再问关于在一系列数中取几个数的问题,求帮忙,谢谢
关于在一系列数中取几个数的问题,求帮忙,谢谢在范围0到lng(lng表示为最大数字)之间,取gap个数
gap的第一个和最后一个是必取,也就是必取0和lng2个,其它数为:gap-2
我的代码如下,但每次取的个数,总是大于gap,不知道什么原因,求大师帮忙,谢谢
defget_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) 本帖最后由 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)
有用请设置最佳答案 你好!我看了你的代码,发现了一些问题。我对代码进行了修改,现在应该可以正常工作了:
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)。希望这对你有所帮助!
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) {:5_106:}
页:
[1]