TypeError: can only concatenate a tuple (and not "int") in Python

I will need your help with this constant tuple error that I keep getting. This seems to be a common mathematical mistake that many have. I read almost every instance of TypeError, including "not int", "not list", "not float", etc. But I could not understand why I get it.

I wrote the code below that allows you to enter the sum of a random number and ultimately calculates a success rate. Therefore, I have a counter "right = right + 1" to count my correct answers. Python doesn't seem to like this.

Here is what I wrote:

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()

and I keep getting:

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

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
+11
right = checkAnswer(number1, number2, answer, right)

, checkAnswer. .

return right, answer

, right .

right = right + 1

, int .

+1

I do not think that yours averageRightgives the correct result. So I fixed the code. I am using IDLE 3.5.2, so some syntax may seem a little different (for example, print()). So below is the code. Welcome:)

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()
0
source

Try rightFloat = float(right[0] + 1)and just link rightFloat. Just a workaround if you're lazy.

-1
source

All Articles