2014-09-14 8 views
-2

Я просто учился кодировать, и я работаю над личным проектом, дополняющим мою классную работу - викторину, которая также поможет мне запомнить мой немецкий словарь. Сейчас мне трудно понять, как сделать эту вещь самой. Вот код, который я пытаюсь изменить:Python: TypeError: неподдерживаемый тип операндов для +: 'int' и 'function'. Трудность управления возвращаемой переменной?

def dialogue (question,response,score): 
    if question == response: 
     print ("Correct! ") 
     score = 1 
    else: 
     print ("Correct answer: " + response) 
     score = 0 
    return score 

score = dialogue 
currentScore = 0 
currentScore = currentScore + score 
question = raw_input ("Good morning ") 
response = ("guten morgen") 
dialogue(question,response,score) 
print currentScore 

Моя полная ошибка выглядит следующим образом:

Traceback (most recent call last): 
    File "C:/Users/Burgess/Desktop/COLLEGE FOLDER/scoreMod.py", line 12, in <module> 
    currentScore = currentScore + score 
    **TypeError: unsupported operand type(s) for +: 'int' and 'function'** 

Все это вздор об определении счет становится немного длительным. Я могу посмотреть, как это сделать, чтобы работать как модуль. Я также хочу попытаться преобразовать его, чтобы дать обратную связь за значение%, но, я думаю, я могу справиться с этими проблемами самостоятельно. Прямо сейчас, я предпочел бы исправить эту проблему, прежде чем усложнить код.

Кто-нибудь, кто может помочь мне понять это? Я скрывался на форумах, и я нашел еще одну проблему с похожим названием, но я не думаю, что наши проблемы имеют аналогичную резолюцию.

+0

@vaultah: не совсем, поскольку 'dialog()' принимает 3 аргумента. Почему это требует 'score', поскольку аргумент не ясен. –

+0

И поскольку 'dialog()' * is * вызывается позже, неясно, почему 'score = dialog' есть * вообще *. –

ответ

0

Пожалуйста, сообщите, какую версию Python вы используете и комментируете свой код. Пожалуйста, объясните, почему вы написали код таким образом.

Вот исправленная версия с комментариями, которые будут работать в Python 2.7.

def dialogue(question,response): # you are defining dialogue as a function 
    # This function checks whether the answer matches the correct answer 
    if question.lower() == response.lower(): # .lower() makes it not case sensitive 
     print ("Correct! ") 
     return 1 # If matches, return 1 
    else: 
     print ("Correct answer: " + response) 
     return 0 # If does not match, return 0 

currentScore = 0 # Initial Score 

question = raw_input("Good morning: ") #Asking for input 
response = "guten morgen" #Correct answer 

currentScore += dialogue(question, response) #calling the function with 2 arguments 
#adding the returned score to currentScore 
""" 
currentScore += dialogue(question, response) 
is same as 
currentScore = currentScore + dialogue(question, response) 
""" 
print currentScore #returning output 

А вот код без комментариев:

def dialogue(question,response): 
    if question.lower() == response.lower(): 
     print ("Correct! ") 
     return 1 
    else: 
     print ("Correct answer: " + response) 
     return 0 

currentScore = 0 

question = raw_input("Good morning: ") 
response = "guten morgen" 

currentScore += dialogue(question, response) 
print currentScore 
0

Я думаю, попробуйте этот код в первую очередь. Если вы работаете с версией 3.X Вы не должны использовать raw_input. Попробуйте использовать x.upper(), если вы хотите сравнить два предложения.

def dialogue (question,response): 
    if question == response: 
     print ("Correct! ") 
     score = 1 
    else: 
     print ("Incorrect answer: " + response) 
     score = 0 
    return score 
currentScore = 0 
question = input("Good morning ") 
question='Good morning' 
response='guten morgen' 
score = dialogue(question,response) 
currentScore = currentScore + score 
print ('Your score:',(currentScore)) 
0

Похоже, вы назначаете метод переменной и фактически не вызываете метод. В вашем примере score = dialogue следует заменить чем-то вроде
score = dialogue(question,response,score)