2016-01-12 6 views
1

Я пишу викторину/калькулятор для школы для школы, и у меня возникла проблема с созданием случайных вопросов для викторины.Python 3 «Слишком много аргументов»?

На данный момент у меня есть код следующим образом:

while True: 
    if i + n == 10: 
     answer = input("If I have",i,"blue marbles and",n,"yellow marbles in a bag, what percentage of blue marbles are there? ") 
    else: 
     i = random.randint(1, 10) 
     n = random.randint(1, 10) 

Однако питон приходит с ошибкой:

Traceback (most recent call last): 
    File "<stdin>", line 3, in <module> 
TypeError: input expected at most 1 arguments, got 5 

Я попытался несколько способов вокруг него, например:

while True: 
    question = "If I have",i,"blue marbles and",n,"yellow marbles in a bag, what percentage of blue marbles are there? " 
    answer = input(question) 

Однако при печати на раковине он печатает «Если у меня есть 4 [например],« синие мраморы и », 6,« желтый мар » bles в сумке, какой процент синих мраморов? ».

Как вы можете видеть, он печатает кавычки и запятые, но содержит переменные i и n правильно. Я посмотрел на функцию .strip(), но все учебники слишком запутанны, но я думаю, что это то, что мне нужно!

Может ли кто-нибудь сделать эту строку кода, где она просто печатает вопрос в качестве инструкции ввода, в то время как включает переменные?

+0

Я не уверен, почему вы были ниспровергнуты дважды, вопрос в порядке – wim

+0

@wim эту ошибку можно легко исправить с помощью функции google 'input' – Arman

+0

Рад, что вы нашли более одного ответа полезным! К сожалению, для нас вы можете выбрать * one *, чтобы дать знак «принят». Выбор полностью зависит от вас (вплоть до того, что он не будет выбран). –

ответ

8

input() занимает всего один аргумент, но вы передаете в 5:

input(
    "If I have", 
    i, 
    "blue marbles and", 
    n, 
    "yellow marbles in a bag, what percentage of blue marbles are there? ") 

Регистрация тех, кто вместе в строку первой:

input("If I have {} blue marbles and {} yellow marbles in a bag, " 
     "what percentage of blue marbles are there? ".format(i, n)) 

Это использует str.format() method для вставки значения i и n в большую строку.

Возможно, вы столкнулись с print() здесь, который явно принимает произвольное количество аргументов и преобразует каждый из них в строку перед тем, как записывать их в stdout, разделяя их пробелом. input() не предлагает эту функцию.

3

Я думаю, ваша проблема в том, что вы обрабатываете вызов функции input, как если бы это был вызов print. Однако интерфейс отличается от input и print.

  • input ожидает ровно один аргумент
  • print принимает несколько аргументов

Итак, попробуйте создать подсказку, как это вместо:

prompt = "If I have {} blue marbles and {} yellow marbles etc".format(i, n) 
input(prompt) 
0

Ответ уже дан; но я расскажу вам кое-что, потому что вы, похоже, новичок. Функции ввода() и печати() - это встроенные функции. Они не отличаются от функций, которые вы создали бы сами. Функции в основном представляют собой блок кода, который запускается при вызове. Функции имеют аргументы, которые являются значениями, которые вы передаете функции.Так что моя функция добавить бы следующим образом:

def add(x, y) 
    answer = x + y 
    print(answer) 

Я хотел бы вызвать его, введя:

add(10, 20) 

и программа/интерактивная оболочка вернется 30.

Поэтому Input() и Print() ведут себя по-другому, потому что Print() предназначен для принятия множества аргументов и объединения их в одну большую строку, а Input принимает только один. Если вы когда-либо застреваете или не уверены, как использовать функцию, модуль и т. Д. Python имеет встроенную функцию help() (которая принимает один аргумент, lol).

Так что набрав help (input), вы скажете, что ввод будет принимать только один аргумент. Это будет очень полезно, если вы забудете точный синтаксис или особенности чего-то.

Надеюсь, что это устранит любые возникшие у вас вопросы, особенно если вы не были уверены, почему данные ответы работают, а ваш - нет.