Je codérise actuellement un jeu de texte à Python dans lequel le récit commencera différemment en fonction des réponses à certaines questions. La première question est simple, un nom. Je ne peux pas sembler obtenir l'entrée pour afficher dans l'option de texte correcte après l'invite.
J'ai essayé d'utiliser p>
"si le nom est vrai" p>
et p >
"Si le nom est str" p>
mais ils passent tous les deux à l'option d'autre, au lieu d'afficher l'option correcte après l'entrée. P>
while True:
try:
# This will query for first user input, Name.
name = str(input("Please enter your name: "))
except ValueError:
print("Sorry, I didn't understand that.")
# No valid input will restart loop.
continue
else:
break
if name is str:
print("Ah, so " + name + " is your name? Excellent.")
else:
print("No name? That's fine, I suppose.")
3 Réponses :
La manipulation d'exception autour de Par conséquent, votre code peut être simplifié à p> plus loin concernant l'utilisation de entrée code> n'est pas requise car la fonction code> (code> renvoie toujours une chaîne. Si l'utilisateur ne saisit pas une valeur, une chaîne vide est renvoyée. est code >:: p> est code> est utilisé pour comparer l'identité comme dans deux variables, reportez-vous au même objet. Il est plus courant de tester si une variable est Aucun code> par exemple si le nom est né code> ( Aucun code> est toujours le même objet). Comme mentionné, vous pouvez utiliser type (nom) code> pour obtenir le type de variable nom em> mais cela est découragé à la place du contrôle intégré isinstance code>. p> == code> d'autre part se compare à l'égalité comme dans si nom == "Dave" code>. p> isinstance code> est plus que de vérifier simplement un type spécifique, il gère également des types hérités. P> P>
est code> compare les identités non types
@Tim par la question de OP, nom code> doit être vérifié si le nom pourrait être un nom réel ou non si nous considérons l'intention de l'OP.
@yaho CHO INPUT () CODE> Ne génère pas ValueError code>. Il accepte n'importe quelle chaîne (y compris une chaîne vide). Le code que j'ai répertorié fait exactement ce que l'OP a demandé sans le code supplémentaire qui ne fait rien.
Le problème est que vous vérifiez si le nom est STR, pas si le type (nom) est STR.
if type(name) is str:
Cette approche est découragée, vous devez utiliser isinstance (nom, str) code>.
Utiliser isinstance code> au lieu de est code>.
Et, vous n'avez pas besoin d'utiliser str (entrée ()) code> car entrée code> renvoie str code>. if name.isalpha():
print("Ah, so " + name + " is your name? Excellent.")
else:
print("No name? That's fine, I suppose.")
Tout en utilisant isinstance code> est bon, cela ne fonctionnera toujours pas comme nom i> sera toujours un str code>
Entrée CODE> retourne toujours un STR code> de sorte que la branche Else de la déclaration IF ne puisse jamais être atteinte.
@Im vous avez raison. Mais, je pense que OP veut juste savoir pourquoi est code> ne fonctionne pas.
@yahocho. OP semble vouloir comprendre comment vérifier une chaîne vide, une extension, pourquoi le code existant ne fonctionne pas.
@Madphysicist Par la question de OP, Nom code> doit être vérifié si le nom pourrait être un nom réel ou non si nous devons bien comprendre l'intention de l'OP. J'ai mis à jour mon code pour vérifier nom code> avec isalpha () code>.
@yahocho qui n'est pas ce que l'OP a demandé, la question était de savoir comment puis-je déterminer si un nom est entré et présente les deux résultats. Ce qui n'est pas ce que votre entrée ici fait, vous avez inventé une nouvelle exigence. Avec la manipulation des exceptions qui ne fait essentiellement rien.
Que pensez-vous
si le nom est str: code> fait?Vous n'avez pas besoin de vérifier si
nom est STR code> -si name.strip (): code> vérifiera si l'entrée est différente des espaces (c'est-à-dire que vous avez une entrée visible) - Si le nom est STR vérifie si le nom est STR pas si le nom est une instance de chaîne non vide