请帮助我理解为什么我的代码没有按我希望的方式工作。当我在头脑中运行代码时,我无法将结果与控制台中的实际结果相匹配。很简单:
给定列表";num_list";,我想取奇数,求和并显示结果,条件是它必须取列表中的前5个奇数并求和。
即
结果=85+719+85+17+191
num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69, 113, 166]
result=0
odd_num=[]
count_odd=0
while count_odd < 5:
for i in range(len(num_list)):
if num_list[i]%2!=0:
odd_num.append(num_list[i])
count_odd+=1
result+=sum(odd_num)
print(result)
问题是while循环不会在count_odd < 5
处停止。
我正在学习最基本的东西,我想了解这里发生了什么。
谢谢
我发现您当前的代码有一些错误,还有一些是不可预知的。
您可以简单地将奇数附加到循环中的列表中。然后在循环之外找到总和下面我已经修复了这些错误并清理了代码。
num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69, 113, 166]
odd_num=[]
count_odd=0
for num in num_list:
if count_odd == 5:
break
elif num%2!=0:
odd_num.append(num)
count_odd+=1
print(sum(odd_num))
输出
993
是否需要使用while
循环?否则,一个简单的解决方案是在for循环中添加if
条件,例如
num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69, 113, 166]
result=0
odd_num=[]
count_odd=0
for i in range(len(num_list)):
if count_odd < 5:
if num_list[i]%2!=0:
print(num_list[i])
odd_num.append(num_list[i])
count_odd+=1
result+=sum(odd_num)
print(result)
在while循环中发生的情况是,while循环运行了5次,这意味着for循环运行了五次,所以基本上结果=85+719+85+17+191计算运行了5倍,这是你不想要的。你想在for循环中检查你的计数,而不是让for循环运行5次。希望这是有意义的
这是因为for循环完全完成while循环的每次迭代,即使找到了5个赔率。您可以在每个循环结束时检查计数。
while count_odd < 5:
for i in range(len(num_list)):
if num_list[i] % 2 != 0:
odd_num.append(num_list[i])
count_odd += 1
result+=sum(odd_num)
if count_odd >= 5:
break
或者,您可以完全删除for循环。
i = 0
while count_odd < 5:
if num_list[i] % 2 != 0:
odd_num.append(num_list[i])
count_odd += 1
result += sum(odd_num)
print(count_odd)
i += 1
您只需要一个循环,即while
循环。
num_list = [422, 136, 524, 85, 96, 719, 85, 92, 10, 17, 312, 542, 87, 23, 86, 191, 116, 35, 173, 45, 149, 59, 84, 69, 113, 166]
odd_num=[]
count_odd=0
i = 0
while count_odd < 5:
print(num_list[i])
if num_list[i]%2!=0:
odd_num.append(num_list[i])
count_odd+=1
i += 1
result = sum(odd_num)
print(result)
您可以使用列表理解来迭代列表,过滤掉所有偶数,使用列表切片来选择前5个奇数,然后对它们求和。
n = sum(list(filter(None, [i if i%2==1 else None for i in num_list]))[:5])
print(n)
给出:
993
或85+719+85+17+87=993(前5个奇数(