2013-10-26 1 views
4

계속해서이 튜플 오류가 발생하여 도움이 필요합니다. 그것이 많은 수학적 오류라고 생각합니다. 나는 'not int', 'not list', 'float not'등등을 포함한 TypeError의 거의 모든 인스턴스를 읽었습니다. 그러나 나는 왜 그것을 얻지 못했는지 알아 내지 못했습니다.TypeError : 파이썬에서 튜플 ("int"가 아님) 만 연결할 수 있습니다.

나는 임의의 숫자의 합계를 입력 할 수있는 코드를 작성했으며 결국에는 성공률을 계산합니다. 그래서 나는 정확한 답을 세는 카운터 "right = right + 1"을 가지고있다. 마치 파이썬이 그것을 좋아하지 않는 것처럼 보입니다.

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

나는 점점 계속 : 여기

내가 쓴 것입니다 당신은 checkAnswer에 의해 반환되는 것을 할당하는

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 . . . 

답변

11

귀하의 checkAnswer() 기능은 튜플을를 반환 : 두 값의 튜플을 반환 return right, answer 여기

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

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

. 그러나 당신은 그것으로부터 튜플을 반환하고 있습니다.

return right, answer 

이렇게 첫 번째 반복 후 right은 튜플이됩니다. 그리고 도달하면

right = right + 1 

두 번째로, 튜플에 int를 추가하지 못합니다.

-1

rightFloat = float(right[0] + 1)을 시도하고 단지 rightFloat를 참조합니다. 게으른 경우에 대비 한 해결 방법.

+0

실제로 OP 코드를 읽었습니까? '오른쪽'은 전체에 걸쳐 숫자를 의미하며, 튜플이된다는 사실은 놀랍지 만 목표는 아닙니다. –

+0

그런 다음 튜플의 첫 번째 값을 취하여 튜플에 추가하십시오. 어렵지 않다. – DevinLynch99

+1

그리고'right'가'0.0'으로 설정된 첫 번째 호출은 어떻게됩니까? 증상을 수정하는 대신 실제 문제를 해결하십시오. –

0

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() 
관련 문제