以下代码包含两个语义错误。纠正它,使其读入整数,直到用户输入-1,然后打印整数的总和(8分):
def getLines():
inputs = []
while True:
line = raw_input('Enter a positive integer, -1 to quit: ')
if line == -1:
break
inputs.append(line)
total = 0
for e in getLines():
total += e
print total
我猜您需要使用实际列表替换getLines()
中的for-loop
。该函数必须返回列表inputs
。
但是在函数while loop
内,if line == -1:
永远不会返回True。怎么样?
由于
答案 0 :(得分:2)
我猜你需要在for循环中用实际列表替换“getLines()”。该函数必须返回列表“inputs”。
完全。
但是在函数的while循环中,“if line == -1:”永远不会返回True。怎么样?
在交互式解释器上试试这个:
>>> '-1' == -1
False
除非在一组非常有限的特殊情况下(例如int
和float
),不同类型的值永远不会相等。
现在查看raw_input
返回的内容:
...函数然后从输入读取一行,将其转换为字符串(剥离尾随换行符),然后返回。
因此,当您输入-1
时,raw_input
将返回字符串'-1'
。
您可以通过检查字符串'-1'
而不是数字-1
来解决此问题。但这就是你想要的吗?如果有人输入-1
,如果有空格,是否算作戒烟?如果是,您可能需要致电line.strip()
。
但实际上这里有一个第三个错误...而且他们只声称有2个错误的事实让我觉得他们希望你们一起解决这两个错误。
inputs
将成为字符串列表。您可以将它们全部添加在一起,但所有要做的就是将它们连接成一个大字符串,而不是将它们添加为数字。实际上,您可能需要将每个字符串转换为整数,例如:
try:
number = int(line)
except ValueError:
print 'I said a positive integer, does %s look like an integer?' % (line,)
continue
如果你这样做,之前的问题就会神奇地消失,因为number == -1
将是真的。
当然,您还需要弄清楚如何处理用户输入0
或-32
或其他有效int
的内容,但既不是正整数也不是{{1 }}。你不喜欢边缘情况吗?