错误 - 最多输入1个参数,得到3

时间:2012-04-02 01:13:45

标签: python arguments traceback

我已经设置了以下for循环来接受5个测试分数。我希望循环提示用户输入5个不同的分数。现在我可以通过输入“请输入你的下一个测试分数”输入来做到这一点,但我宁愿为每个输入的分数提示输入相关的数字。

因此,对于第一个输入,我希望它显示“请输入您的测试1的分数”,然后为第二个分数显示“请输入您的测试2的分数”。当我尝试运行此循环时,出现以下错误:

Traceback (most recent call last):
  File "C:/Python32/Assignment 7.2", line 35, in <module>
    main()
  File "C:/Python32/Assignment 7.2", line 30, in main
    scores = input_scores()
  File "C:/Python32/Assignment 7.2", line 5, in input_scores
    score = int(input('Please enter your score for test', y,' : '))
TypeError: input expected at most 1 arguments, got 3

这是代码

def input_scores():
    scores = []
    y = 1
    for num in range(5):
        score = int(input('Please enter your score for test', y, ': '))

        while score < 0 or score > 100:
            print('Error --- all test scores must be between 0 and 100 points')
            score = int(input('Please try again: '))
        scores.append(score)
        y += 1
        return scores

2 个答案:

答案 0 :(得分:6)

一种简单(正确!)的方式来写你想要的东西:

score = int(input('Please enter your score for test ' + str(y) + ': '))

答案 1 :(得分:2)

因为input 只需要一个参数而你提供三个参数,所以期望它将它们神奇地连接在一起: - )

您需要做的是将三部分字符串构建到一个参数中,例如:

input("Please enter your score for test %d: " % y)

这就是Python做sprintf的方式 - 键入字符串构造。举例来说,

"%d / %d = %d" % (42, 7, 42/7)

是一种获取这三个表达式并将它们转换为一个字符串"42 / 7 = 6"的方法。

有关其工作原理的说明,请参阅here。您还可以使用显示here的更灵活的方法,可以按如下方式使用:

input("Please enter your score for test {0}: ".format(y))