鱼C论坛

 找回密码
 立即注册
查看: 1944|回复: 4

再问关于在一系列数中取几个数的问题,求帮忙,谢谢

[复制链接]
发表于 2023-4-16 16:07:58 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
关于在一系列数中取几个数的问题,求帮忙,谢谢

在范围0到lng(lng表示为最大数字)之间,取gap个数
gap的第一个和最后一个是必取,也就是必取0和lng2个,其它数为:gap-2

我的代码如下,但每次取的个数,总是大于gap,不知道什么原因,求大师帮忙,谢谢


def  get_numbersw(lng, gap):
    gap_list = []
    if lng <= gap:
        gap_list = list(lng)
    else:
        gap_z = lng // gap
        gap_y = lng % gap

        index = 0
        gap_list.append(0)

        while gap_list[-1] < lng:
            index += 1
            if gap_y != 0:
                gap_y_z = 1
                gap_y = gap_y - 1
            gap_list.append(gap_z*index+gap_y_z)            

        #gap_list.append(lng - 1)  # 加入最后一个数
    print(index)
    return gap_list


lng = 100   #指在0-100中间取数
gap = 31    #31是指取个数
gap_list = get_numbersw(lng, gap)
print(gap_list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-4-16 16:10:18 | 显示全部楼层
本帖最后由 sfqxx 于 2023-4-16 16:15 编辑

你好!根据你提供的代码,我看到了几个潜在的问题。首先是计算 `gap_z` 和 `gap_y` 的公式似乎有点错误,应该是:
gap_z = (gap - 2) // (lng - 2)
gap_y = (gap - 2) % (lng - 2)
这样计算出来的 `gap_z` 表示至少每隔多少个数取一个数,`gap_y` 表示剩余需要再取多少个数。如果 `gap_y` 不为零,则前 `gap_y` 个间隔要多取1个数。

另外,在循环中计算 `gap_y_z` 的语句没有放在条件语句里面,应该写成:
if gap_y != 0:
    gap_y_z = 1
    gap_y = gap_y - 1
else:
    gap_y_z = 0

最后,在生成 `gap_list` 列表时,如果直接把 `lng` 添加进去会导致 `gap_list` 中多出一个不必要的元素,所以可以把最后一个元素删掉,然后再添加上 `lng` 就行了。

下面是修改后的代码,你可以试试看是否符合你的需求:
def get_numbersw(lng, gap):
    gap_list = []
    if lng <= gap:
        gap_list = list(range(lng))
    else:
        gap_z = (gap - 2) // (lng - 2)
        gap_y = (gap - 2) % (lng - 2)

        gap_list.append(0)
        index = 1
        while gap_list[-1] < lng-1:
            if gap_y != 0:
                gap_y_z = 1
                gap_y = gap_y - 1
            else:
                gap_y_z = 0
            gap_list.append(gap_z*index+gap_y_z)
            index += 1

        gap_list.pop() # 删除最后一个元素
        gap_list.append(lng-1) # 添加lng
    return gap_list


lng = 100   #指在0-100中间取数
gap = 31    #31是指取个数
gap_list = get_numbersw(lng, gap)
print(gap_list)
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-16 16:17:03 | 显示全部楼层
你好!我看了你的代码,发现了一些问题。我对代码进行了修改,现在应该可以正常工作了:
def get_numbersw(lng, gap):
    gap_list = []
    if lng <= gap:
        gap_list = list(range(lng))
    else:
        gap_z = (lng - 1) // (gap - 1)  # 修改这里,使得每个间隔更加平均分布
        gap_y = (lng - 1) % (gap - 1)

        index = 0
        gap_y_z = 0  # 将gap_y_z初始化在循环外部

        while len(gap_list) < gap:  # 修改这里,使得循环终止条件更合理
            if gap_y != 0:
                gap_y_z = 1
                gap_y = gap_y - 1
            else:
                gap_y_z = 0  # 添加这里,确保在不需要额外增加间隔时,gap_y_z为0
            gap_list.append(gap_z * index + gap_y_z)
            index += 1

    return gap_list


lng = 100  # 指在0-100中间取数
gap = 31  # 31是指取个数
gap_list = get_numbersw(lng, gap)
print(gap_list)

这个修改后的代码应该可以按照你的需求在0到lng之间取gap个数,其中首尾两个数必取(即0和lng)。希望这对你有所帮助!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-4-16 17:27:21 | 显示全部楼层

def get_numberslw(lng, gap):
    gap_list = []
    if lng <= gap:
        gap_list = list(range(lng))
    else:
        gap_z = (lng - 1) // (gap - 1)  # 修改这里,使得每个间隔更加平均分布
        gap_y = (lng - 1) % (gap - 1)

        gap_list.append(0)
        index = 1
        gap_y_z = 0  # 将gap_y_z初始化在循环外部        

        while gap_list[-1] < lng-1:  # 修改这里,使得循环终止条件更合理
            if gap_y > 0:
                gap_y_z = gap_y_z + 1     #***
                gap_y = gap_y - 1
            gap_list.append(gap_z* index  + gap_y_z)
            index += 1
            
    print(index)
    return gap_list

lng = 62   #指在0-100中间取数
gap = 31    #31是指取个数
gap_list = get_numberslw(lng, gap)
print(gap_list)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-4-16 22:27:13 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-23 17:20

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表