9

我将需要您的帮助来解决我不断收到的这个不断出现的元组错误。似乎这是许多人常见的数学错误。我已经阅读了几乎所有 TypeError 实例,包括“not int”、“not list”、“not float”等。但我无法弄清楚为什么会得到它。

我编写了下面的代码,允许您输入随机数的总和,最后计算您的成功率。所以我有一个计数器“right=right+1”来计算我的正确答案。似乎Python不喜欢那样。

这是我写的:

import random 
#the main function
def main():
    counter, studentName, averageRight, right, answer, number1, number2 = declareVariables() 
    studentName = inputNames()

    while counter < 10:
        number1, number2 = getNumber()
        answer = getAnswer(number1, number2, answer)
        right = checkAnswer(number1, number2, answer, right)
        counter = counter + 1
    results(right, averageRight)
    displayInfo(studentName, right, averageRight)

def declareVariables():
    counter = 0
    studentName = 'NO NAME'
    averageRight = 0.0
    right = 0.0
    answer = 0.0
    number1 = 0
    number2 = 0
    return counter, studentName, averageRight, right, answer, number1, number2

def inputNames():
    studentName = raw_input('Enter Student Name: ')
    return studentName

def getNumber():
    number1 = random.randint(1, 500)
    number2 = random.randint(1, 500)
    return number1, number2

def getAnswer(number1, number2, answer):
    print 'What is the answer to the following equation'
    print number1
    print '+'
    print number2
    answer = input('What is the sum: ')
    return answer

def checkAnswer(number1, number2, answer, right):
    if answer == number1+number2:
        print 'Right'
        right = right + 1
    else:
        print 'Wrong'

    return right, answer

def results(right, averageRight):
    averageRight = right/10
    return averageRight



def displayInfo(studentName, right, averageRight):
    print 'Information for student: ',studentName
    print 'The number right: ',right
    print 'The average right is: ', averageRight

# calls main
main()

我不断得到:

Traceback (most recent call last):
  File "Lab7-4.py", line 70, in <module>
    main()
  File "Lab7-4.py", line 15, in main
    right = checkAnswer(number1, number2, answer, right)
  File "Lab7-4.py", line 52, in checkAnswer
    right = right + 1
TypeError: can only concatenate tuple (not "int") to tuple Press any key to continue . . .
4

4 回答 4

15

您的checkAnswer()函数返回一个元组

def checkAnswer(number1, number2, answer, right):
    if answer == number1+number2:
        print 'Right'
        right = right + 1
    else:
        print 'Wrong'

    return right, answer

这里return right, answer返回两个值的元组。请注意,使该表达式成为元组的是逗号;在大多数情况下,括号是可选的。

您将此返回值分配给right

right = checkAnswer(number1, number2, answer, right)

在这里制作right一个元组。

然后,当您尝试1再次添加时,会发生错误。您不会answer在函数内进行更改,因此在这里返回值是没有意义的;从return语句中删除它:

def checkAnswer(number1, number2, answer, right):
    if answer == number1+number2:
        print 'Right'
        right = right + 1
    else:
        print 'Wrong'

    return right
于 2013-10-26T18:01:11.927 回答
2
right = checkAnswer(number1, number2, answer, right)

您正在分配checkAnswer. 但是您要从中返回一个元组。

return right, answer

所以,在第一次迭代之后right就变成了一个元组。当它到达

right = right + 1

第二次,它无法将 int 添加到元组。

于 2013-10-26T18:00:35.553 回答
1

我不认为你averageRight给出了正确的结果。所以我修复了代码。我使用的是 IDLE 3.5.2,所以某些语法可能看起来没什么不同(例如print())。所以下面是代码。不客气 :)

import random 
#the main function
def main():
    counter, studentName, averageRight, right, answer, number1, number2 = declareVariables() 
    studentName = inputNames()

    while counter < 10:
        number1, number2 = getNumber()
        answer = getAnswer(number1, number2, answer)
        right = checkAnswer(number1, number2, answer, right)
        counter = counter + 1

    A=results(right, averageRight)
    displayInfo(studentName, right, A)

def declareVariables():
    counter = 0
    studentName = 'NO NAME'
    averageRight = 0.0
    right = 0
    answer = 0
    number1 = 0
    number2 = 0
    return counter, studentName, averageRight, right, answer, number1, number2

def inputNames():
    studentName = input('Enter Student Name: ')
    return studentName

def getNumber():
    number1 = random.randint(1, 500)
    number2 = random.randint(1, 500)
    return number1, number2

def getAnswer(number1, number2, answer):
    print ('What is the answer to the following equation')
    print (number1)
    print ('+')
    print (number2)
    answer = int(input('What is the sum: ')) #input would be a int. without adding the int it would make answer a string instead of int. which was reason why it was giving 'wrong' 
    return answer

def checkAnswer(number1, number2, answer, right):
    if answer==number1+number2:
        print ('Right')
        right = right + 1
    else:
        print ('Wrong')

    return right

def results(right, averageRight):
    averageRight = right/10
    return averageRight



def displayInfo(studentName, right, A):
    print ('Information for student: ',studentName)
    print ('The number right: ',right)
    print ('The average right is: ', A)

# calls main
main()
于 2016-12-07T04:11:11.427 回答
0

尝试rightFloat = float(right[0] + 1)并仅参考rightFloat. 只是一个解决方法,以防你变得懒惰。

于 2013-10-26T18:07:11.533 回答