Ошибка - ожидается ввод не более 1 аргумента, получено 3

Я установил следующий цикл 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

person Dustin Burns    schedule 02.04.2012    source источник


Ответы (2)


Простой (и правильный!) Способ написать то, что вы хотите:

score = int(input('Please enter your score for test ' + str(y) + ': '))
person Óscar López    schedule 02.04.2012

Потому что input нужен только один аргумент, а вы предоставляете три, ожидая, что он волшебным образом объединит их вместе :-)

Что вам нужно сделать, так это встроить вашу трехчастную строку в этот один аргумент, например, с помощью:

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

Вот как Python выполняет построение строк типа sprintf. Например,

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

это способ взять эти три выражения и превратить их в одну строку "42 / 7 = 6".

См. здесь, чтобы узнать, как это работает. Вы также можете использовать более гибкий метод, показанный здесь, который можно использовать следующим образом:

input("Please enter your score for test {0}: ".format(y))
person paxdiablo    schedule 02.04.2012
comment
Ха-ха, я видел, что делал после того, как напечатал. Я подумал: "Ой, может, это все". Я относился к этому как к функции печати. Хотя я собираюсь найти эту интересную вещь, которую вы только что сделали, я не уверен, как она работает - person Dustin Burns; 02.04.2012
comment
@Dustin, docs.python.org/library/stdtypes.html#string-formatting, но вы также можете использовать более гибкий метод {}: docs.python.org/tutorial /inputoutput.html. Я добавлю это к ответу. - person paxdiablo; 02.04.2012