看来我的代码正在无限循环

use*_*832 -1 python while-loop python-3.x

我是一个Python学习者,我的代码似乎在同时进行无限循环表达式中进行了无限循环,但我不明白为什么。

我想要的是一个程序来计算此列表中前五个奇数的总和。

这是 Udacity 网站上的一个非常基本的练习,输出是程序因使用 13 CPU 秒而关闭,并且在 Windows python3 中它不显示任何输出。经过一些测试,我怀疑是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]

    z=0
    s=0
    for i in range(len(num_list)):
        while z<=5:
            if num_list[i]%2==1:
                z+=1
                s+=num_list[i]
    print(s)
Run Code Online (Sandbox Code Playgroud)

azr*_*zro 5

遵循您的代码

  • 你开始索引0
  • 读取值为422
  • 你不会进入如果
  • 你不增加z
  • 你会无限地停留在 while 循环中
for i in range(len(num_list)):
    while z <= 5:
        if num_list[i] % 2 == 1:
Run Code Online (Sandbox Code Playgroud)

解决方案 1:不要使用 2 个循环(while 和 for),因为您想做两件事:迭代值检查 5 个条件。break当你有五个时,你可以只使用一个

for i in range(len(num_list)):
    if num_list[i] % 2 == 1:
        z += 1
        s += num_list[i]
    if z >= 5:
        break
Run Code Online (Sandbox Code Playgroud)

解决方案 2:使用不同的逻辑

  • 得到奇怪的
  • 得到前 5 个
  • 将它们相加
r = sum(list(filter(lambda i: i % 2 == 1, num_list))[:5])
Run Code Online (Sandbox Code Playgroud)