Python 循环控件练习

Python Loop Controls Exercise

提问人:uncle.ro 提问时间:5/7/2020 最后编辑:khelwooduncle.ro 更新时间:5/7/2020 访问量:202

问:

在过去的几周里,我刚刚开始在 hyperskill 上学习 python。

场景如下:

编写一个程序,从控制台整数(一行一个)中读取,直到它们的总和等于 0。紧接着,它应该显示所有输入数字的平方和。 可以保证在某个时候输入的数字之和将等于 0。之后,无需继续阅读。

如果第一个整数等于 0,也请停止从输入中读取值。打印出 0 而不是平方和。

例如,我们正在阅读数字 1、-3、5、-6、-10、13。在这一点上,我们注意到这些数字的总和是 0 并输出它们的平方和,而没有注意仍然存在未读值的事实。

num = int()
listtrigbreak = []
listsquares = []

sumtrig = 0
sumsqua = 0

while sumtrig != 0: # until sum of trig is not 0, 
  num = int(input())     #accept numbers

  if num == "0": # while first input is 0,
    print(0) # print 0
    break    # and break the loop


  listtrigbreak.append(num)   # append num to listtrig
  sumtrig += sum(listtrigbreak) # add sum of list to sumtrig


  for x in listtrigbreak: # for each number in listtrigbreak
    squared = x ** 2     # convert each to squares, save variable
    listsquares.append(squared) # add squared to listsquq
    sumsqua = sum(listsquares)  # sum of squares in listsqua

else:
  print(sumsqua)

我什至无法通过第一个 while 循环。每当我运行它时,它都会跳过整个 while 循环并转到以下位置:

else:
  print(sumsqua)

从一开始,我就很难使用布尔逻辑。我需要解释。

python while-loop 布尔逻辑

评论

0赞 user2357112 5/7/2020
while并不意味着“直到”。
0赞 TigerhawkT3 5/7/2020
我不确定你为什么对它跳过第一个循环感到惊讶。条件是 ,并且您刚刚完成对 的初始化。当你做一个数字,然后检查它是否与字符串匹配时,你以后也会遇到麻烦。whilesumtrig != 0sumtrig0num
0赞 pfabri 5/7/2020
循环中的代码将仅在 while 语句中的条件为 时执行。用简单的英语来说,这读起来是这样的:只要 sumtrig 不为零,请执行以下操作......由于您初始化为您的条件将计算为 和 Python 将跳过您的整个 while 循环。whilesumtrig != 0Truesumtrig0sumtrig != 0False
0赞 uncle.ro 5/7/2020
哇,我想我真的必须回溯并更多地研究这些循环和布尔值。我对这些的逻辑似乎很不对劲。非常感谢你们的见解。

答:

0赞 sander 5/7/2020 #1

正如其他评论已经指出的那样,while 循环有点棘手,因为您最初将变量声明为 0。您可以使用布尔开关来控制 while 循环,如下所示:

input_integers = []
stop = False

while not stop: # So while we should keep asking user input...
    num = int(input())

    input_integers.append(num)

    if sum(input_integers) == 0 and len(input_integers) > 0:
        print('done')
        stop = True

现在在其中添加其他功能,您就完成了。