web-dev-qa-db-fra.com

Si instruction pour les chaînes en python?

Je suis un débutant total et j'ai regardé http://en.wikibooks.org/wiki/Python_Programming/Conditional_Statements mais je ne peux pas comprendre le problème ici. C'est assez simple, si l'utilisateur entre y il devrait imprimer cela fera le calcul bien que j'obtienne une erreur de syntaxe sur IF answer == "y"

answer = str(input("Is the information correct? Enter Y for yes or N for no"))
proceed="y" or "Y" 
If answer==proceed:
print("this will do the calculation"):
else:
exit()
15
user829084

Même une fois que vous avez corrigé le if mal placé et l'indentation incorrecte dans votre code, cela ne fonctionnerait pas comme vous vous y attendiez probablement. Pour vérifier une chaîne par rapport à un ensemble de chaînes, utilisez in. Voici comment procéder (et notez que if est entièrement en minuscules et que le code dans le bloc if est en retrait d'un niveau).

Une approche:

if answer in ['y', 'Y', 'yes', 'Yes', 'YES']:
    print("this will do the calculation")

Un autre:

if answer.lower() in ['y', 'yes']:
    print("this will do the calculation")
42
Daniel DiPaolo

If doit être if. Votre programme devrait ressembler à ceci:

answer = raw_input("Is the information correct? Enter Y for yes or N for no")
if answer.upper() == 'Y':
    print("this will do the calculation")
else:
    exit()

Notez également que l'indentation est importante, car elle marque un bloc en Python.

10
Björn Pollex

Tu veux:

answer = str(raw_input("Is the information correct? Enter Y for yes or N for no"))
if answer == "y" or answer == "Y":
  print("this will do the calculation")
else:
  exit()

Ou

answer = str(raw_input("Is the information correct? Enter Y for yes or N for no"))
if answer in ["y","Y"]:
  print("this will do the calculation")
else:
  exit()

Remarque:

  1. C'est "si", pas "si". Python est sensible à la casse.
  2. L'indentation est importante.
  3. Il n'y a ni deux-points ni point-virgule à la fin des commandes python.
  4. Vous voulez raw_input pas input ; input évalue l'entrée.
  5. "ou" vous donne le premier résultat s'il est évalué à vrai, et le deuxième résultat sinon. Alors "a" or "b" correspond à "a", tandis que 0 or "b" correspond à "b". Voir La nature particulière de et et o .
6
MGwynne

Python est un langage sensible à la casse. Tous les mots-clés Python sont en minuscules. Utilisez if, pas If.

De même, ne mettez pas de deux-points après l'appel à print(). Indenter également les appels print() et exit(), car Python utilise l'indentation plutôt que des crochets pour représenter les blocs de code.

Et aussi, proceed = "y" or "Y" Ne fera pas ce que vous voulez. Utilisez proceed = "y" Et if answer.lower() == proceed:, ou quelque chose de similaire.

Il y a aussi le fait que votre programme se fermera tant que la valeur d'entrée n'est pas le caractère unique "y" ou "Y", ce qui contredit l'invite de "N" pour la casse alternative. Au lieu de votre clause else, utilisez Elif answer.lower() == info_incorrect:, avec info_incorrect = "n" Quelque part au préalable. Ensuite, reproposez simplement la réponse ou quelque chose si la valeur d'entrée était autre chose.


Je recommanderais de suivre le tutoriel dans la documentation Python si vous rencontrez autant de problèmes dans la façon dont vous apprenez maintenant. http://docs.python.org /tutorial/index.html

6
JAB
proceed = "y", "Y"
if answer in proceed:

De plus, vous ne voulez pas

answer = str(input("Is the information correct? Enter Y for yes or N for no"))

Tu veux

answer = raw_input("Is the information correct? Enter Y for yes or N for no")

input() évalue tout ce qui est entré comme une expression Python expression, raw_input() renvoie une chaîne.

Edit: Cela n'est vrai que sur Python 2. Sur Python 3, input est très bien, bien que str() wrapping est toujours redondant.

2
agf