Python: While and For loops



请帮助我理解为什么我的代码没有按我希望的方式工作。当我在头脑中运行代码时,我无法将结果与控制台中的实际结果相匹配。很简单:

给定列表";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处停止。

我正在学习最基本的东西,我想了解这里发生了什么。

谢谢

我发现您当前的代码有一些错误,还有一些是不可预知的。

  • 不需要while循环,因为您使用了"for range"。
  • 迭代列表时不希望使用"for range"循环
  • 您可以简单地将奇数附加到循环中的列表中。然后在循环之外找到总和下面我已经修复了这些错误并清理了代码。

    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个奇数(

    最新更新