MIT OCW介绍CS练习测试1?

时间:2014-09-16 19:39:06

标签: python

以下代码包含两个语义错误。纠正它,使其读入整数,直到用户输入-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。怎么样?

由于

1 个答案:

答案 0 :(得分:2)

  

我猜你需要在for循环中用实际列表替换“getLines()”。该函数必须返回列表“inputs”。

完全。


  

但是在函数的while循环中,“if line == -1:”永远不会返回True。怎么样?

在交互式解释器上试试这个:

>>> '-1' == -1
False

除非在一组非常有限的特殊情况下(例如intfloat),不同类型的值永远不会相等。

现在查看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 }}。你不喜欢边缘情况吗?