在python中使用for和while循环试图解决同一问题的不同结果

2024-09-30 06:16:11 发布

您现在位置:Python中文网/ 问答频道 /正文

你好!我不熟悉编码,我试图解决一个问题,这个问题要求我使用循环对列表中的所有负整数求和。我尝试使用for和while循环来解决这个问题,但得到了不同的答案。

循环代码

glist3 = [7,5,4,4,2,1,1,-2,-2,-4,-5]
total3=0
for i in glist3:
    if glist3[i]<0:
        total3+=glist3[i]
print(total3)

而循环代码

glist4 = [7,5,4,4,2,1,1,-2,-2,-4,-5]
i2=0
total4=0
while i2 < len(glist4):
    if glist4[i2] < 0:
        total4+=glist4[i2]
    i2+=1
print (total4)

我得到的for loop的结果是-12(这是不正确的),但是while loop确实返回了正确的答案,即-13。我只是想问一下造成这种差异的可能原因。谢谢大家!


Tags: 答案代码loop编码列表forif整数
3条回答

While循环循环,直到满足“While”关键字旁边定义的条件

For循环通过迭代器循环,例如:列表、字典甚至文件

例如,如果您循环浏览如下水果列表:

fruits = ['banana', 'apple', 'mango', 'pear', 'pineapple']
for fruit in fruits:

变量“水果”在第一个循环中等于“香蕉”,然后在第二个循环中等于“苹果”,依此类推。“水果”不等于该项目的索引。因此,在该示例中:

fruits = ['banana', 'apple', 'mango', 'pear', 'pineapple']
for fruit in fruits:
    print(fruits[fruit])

将导致错误,因为水果不是整数而是字符串

如果希望在for循环期间跟踪索引,则需要在for循环外设置一个变量,然后在循环中递增该变量

下面是一个使用for循环的工作示例:

glist3 = [7,5,4,4,2,1,1,-2,-2,-4,-5]
total3 = 0
for number in glist3:
    if number < 0:
        total3 += number
print(total3)

错误在for循环中。你说的是for i in glist3,意思是变量i取每个数字的值,而不是递增1,但是你正在使用它索引列表

glist3[i]替换为i,这样您就可以添加实际的数字,而不是列表中索引处的数字,如下所示,这将起作用

glist3 = [7,5,4,4,2,1,1,-2,-2,-4,-5]
total3=0
for i in glist3:
    if i<0:
        total3+=i
print(total3)

或者如果你想索引。。。使用范围也会起作用

glist3 = [7,5,4,4,2,1,1,-2,-2,-4,-5]
total3=0
for i in range(len(glist3)):
    if glist3[i]<0:
        total3+=glist3[i]
print(total3)

两者现在都应该按预期返回-13

希望这有帮助,祝你好运

您可以在IDEX上循环。for循环覆盖值。使用将索引返回到列表中

修正:

glist3 = [7,5,4,4,2,1,1,-2,-2,-4,-5]
total3=0
for i in glist3:      # these are the VALUES of the list, not indexes
    if i<0: 
        total3 += i   # simply add up the values
print(total3)         # -13 for the win

修复它

幸运的是,你的数字也都可以作为索引加入到你的列表中——尝试添加99,你会得到一个IndexError

简短版本:

print( sum( i for i in [7,5,4,4,2,1,1,-2,-2,-4,-5] if i < 0) )

# or if you want to confuse people:
print( sum( i * (i<0) for i in [7,5,4,4,2,1,1,-2,-2,-4,-5]) )

相关问题 更多 >

    热门问题