2017-04-10 4 views
0

Je sais que des questions similaires ont déjà été posées et que je me suis occupé de cette partie du code pendant quelques heures maintenant, est-ce que quelqu'un peut m'aider s'il vous plaît?La variable locale "ANSWER" n'est pas utilisée (pycharm)

Ce code est dans une fonction appelée game(), qui a une boucle while et c'est la partie 'else' de cette boucle while. Pycharm me dit que la variable locale ANSWER n'est pas utilisée pour la dernière ligne de code. Est-ce que mon indentation est désactivée? Est-ce parce que je réattribue une réponse? J'ai essayé plus tôt de faire RÉPONSE == si 'y' ou 'oui': (et le même format pour la ligne "non") et aucun n'a fait de différence, donc ce n'est pas le problème ..

Aussi, peu importe ce que je tape pour la réponse, il exécute la commande 'game()' sur la 4ème ligne affichée. Je pourrais taper "alksdfj" et cela relancerait le jeu.

Merci

+0

1) "Mon indentation est-elle désactivée?" - Il est impossible de dire sans voir plus de votre code. 2) "J'ai essayé plus tôt de faire RÉPONSE == si 'y' ou 'oui': ... ce n'est donc pas le problème." Oui c'est * un * des problèmes. Votre test est toujours vrai. 'if 'y' ou 'yes' == ANSWER' est évalué comme vrai parce que' si 'y'' est toujours vrai. Ce que vous voulez, c'est 'if (ANSWER == 'y') ou (ANSWER == 'oui'):'. La même chose s'applique à la déclaration elif. – Craig

Répondre

0

Il est difficile d'être sûr sans voir plus de code autour, mais il semble que le modèle que vous avez se résume à ceci:

begin loop 
    assign value1 to ANSWER 
    read from ANSWER 
    assign value2 to ANSWER 
end loop 

Si vous « déroulez » cette boucle, en traçant les lignes que vous atteignez à son tour, vous obtenez un code qui ressemble à ceci:

assign value1 to ANSWER 
read from ANSWER 
assign value2 to ANSWER 
assign value1 to ANSWER 
read from ANSWER 
assign value2 to ANSWER 

Ainsi, chaque fois que vous attribuez à valeur2 réponse, vous écrasez immédiatement avec valeur1 (prochaine fois t il boucle).

Qu'est-ce que vous voulez sans doute est plus comme ceci:

assign value1 to ANSWER 
begin loop 
    read from ANSWER 
    assign value2 to ANSWER 
end loop 

qui déroule comme ceci:

assign value1 to ANSWER 
read from ANSWER 
assign value2 to ANSWER 
read from ANSWER 
assign value2 to ANSWER 

Alors maintenant, quand nous allons dans la boucle, nous avons encore valeur2 à lire.

0

C'est parce que vous n'utilisez pas ANSWER. Lorsque Python regarde votre déclaration if, il évalue 'y' à True, donc il n'évalue jamais 'yes' == ANSWER. Essayez:

if ANSWER.lower() in ('y', 'yes'): 

Même chose pour votre instruction elif.