Python:While和For循环

Python:While和For循环,python,for-loop,while-loop,Python,For Loop,While Loop,请帮助我理解为什么我的代码不能像我希望的那样工作。当我在头脑中运行代码时,我无法与控制台中的实际结果相匹配。这很简单: 给定列表“num_List”,我想取奇数,求和并显示结果,条件是必须取列表中的前5个奇数并求和 i、 e 结果=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,

请帮助我理解为什么我的代码不能像我希望的那样工作。当我在头脑中运行代码时,我无法与控制台中的实际结果相匹配。这很简单:

给定列表“num_List”,我想取奇数,求和并显示结果,条件是必须取列表中的前5个奇数并求和

i、 e

结果=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)

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]
结果=0
奇数_num=[]
计数奇数=0
当计数奇数小于5时:
对于范围内的i(len(num_列表)):
如果数量列表[i]%2=0:
奇数追加(奇数列表[i])
计数_奇数+=1
结果+=总和(奇数)
打印(结果)
问题是while循环不会在
count\u odd<5
处停止

我正在学习基础知识,我想了解这里发生了什么


谢谢

您需要使用
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)
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]
结果=0
奇数_num=[]
计数奇数=0
对于范围内的i(len(num_列表)):
如果计数奇数小于5:
如果数量列表[i]%2=0:
打印(数字列表[i])
奇数追加(奇数列表[i])
计数_奇数+=1
结果+=总和(奇数)
打印(结果)

while循环中发生的事情是while循环运行了5次,这意味着for循环运行了5次,因此基本上结果=85+719+85+17+191计算运行了5次,这是您不想要的。您希望检查for循环中的计数,而不是让for循环运行5次。希望这是有意义的

您可以使用列表理解来迭代列表,过滤掉所有偶数,使用列表切片选择前5个奇数,然后求和

n = sum(list(filter(None, [i if i%2==1 else None for i in num_list]))[:5])
打印(n)
给出:

993

或者85+719+85+17+87=993(前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
计数奇数<5时:
对于范围内的i(len(num_列表)):
如果数量列表[i]%2!=0:
奇数追加(奇数列表[i])
计数_奇数+=1
结果+=总和(奇数)
如果计数奇数>=5:
打破
或者您可以完全删除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
i=0
当计数奇数小于5时:
如果数量列表[i]%2!=0:
奇数追加(奇数列表[i])
计数_奇数+=1
结果+=总和(奇数)
打印(单数)
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]
奇数_num=[]
计数奇数=0
i=0
当计数奇数小于5时:
打印(数字列表[i])
如果数量列表[i]%2=0:
奇数追加(奇数列表[i])
计数_奇数+=1
i+=1
结果=总和(奇数)
打印(结果)

我发现您当前的代码有一些错误,还有一些是不必要的

  • 不需要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
    

    结果
    错误。这是正确的:
    85+719+85+17+87
    过滤器(lambda x:x%2==1,num\u列表)会简单得多。或者
    (如果i%2==1,则num\u列表中的i代表i)
    您也不需要首先将
    过滤器实例转换为列表
    sum
    可以添加任意可编辑的值。仍然需要在sum函数中绘制它
    sum(list(filter(lambda x:x%2!=0,num_list))[:5])
    TypeError:“filter”对象不可下标
    您需要将其转换为列表,否则如何使用列表切片仅选择前5项?