TypeError: ne peut concaténer n-uplet (pas de “int”) en Python
Je vais avoir besoin de votre aide avec cette constante n-uplet d'erreur que je reçois. Semble qu'il est commun de mathématiques de l'erreur que beaucoup ont. J'ai lu presque tous les cas de TypeError y compris les "non int', 'pas de liste', 'ne pas flotter", etc. Pourtant, je n'ai pas réussi à comprendre pourquoi je l'obtenir.
J'ai écrit le code ci-dessous qui vous permet d'entrer la somme d'un nombre aléatoire et à la fin il calcule votre taux de réussite. Donc, j'ai un compteur de "droite=droite+1" à compter mes réponses correctes. Me semble que si Python n'est pas comme ça.
Voici ce que j'ai écrit:
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()
et je reçois:
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 . . .
OriginalL'auteur sammojohn | 2013-10-26
Vous devez vous connecter pour publier un commentaire.
Votre
checkAnswer()
fonction renvoie un tuple:Ici
return right, answer
retourne un tuple de deux valeurs. Notez que c'est la virgule qui fait que l'expression d'un n-uplet; les parenthèses sont facultatives dans la plupart des contextes.Vous assigner cette valeur de retour de
right
:faire
right
un tuple ici.Ensuite, lorsque vous essayez d'ajouter
1
à nouveau, l'erreur se produit. On ne change pasanswer
à l'intérieur de la fonction, de sorte qu'il n'y a pas de point dans le retour de la valeur ici; supprimer de lareturn
déclaration:OriginalL'auteur Martijn Pieters
Vous attribuez ce qui est retourné par
checkAnswer
. Mais vous êtes de retour d'un n-uplet.Donc, après la première itération
right
devient un n-uplet. Et quand il arrivela deuxième fois, il ne parvient pas à ajouter un int à un n-uplet.
OriginalL'auteur thefourtheye
Je ne pense pas que votre
averageRight
donne le bon résultat. Donc, j'ai corrigé le code. Je suis à l'aide d'INACTIVITÉ 3.5.2 de sorte que certains de la syntaxe peut sembler un peu différent (par exempleprint()
). Donc, ci-dessous est le code. Vous êtes les bienvenus 🙂OriginalL'auteur Mahmud Hasan
Essayer
rightFloat = float(right[0] + 1)
et juste référencerightFloat
. Juste une solution de contournement dans le cas où vous êtes paresseux.right
est destiné à être un certain nombre à travers, le fait qu'il devient un tuple est une surprise, pas l'objectif.Alors dans ce cas, prendre la première valeur du tuple et ajouter la une. Pas dur.
et que dire du premier appel où
right
est fixé à0.0
? Au lieu de fixer le symptôme, de résoudre le problème.Point de pris. Mais là encore, Vous pourriez faire
intRight = right[0] + 1
puis il suffit d'utiliserintRight
où il est nécessaire.Mais le problème, c'est qu'une fonction renvoie un tuple parce que l'OP mal compris certains de la syntaxe. Fixation qui signifie qu'il n'existe pas de tuple tout et le problème disparaît.
OriginalL'auteur DevinLynch99