0
votes

Comment afficher l'entrée utilisateur après une invite dans Python?

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


2 commentaires

Que pensez-vous si le nom est str: fait?


Vous n'avez pas besoin de vérifier si nom est STR - si name.strip (): 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


3 Réponses :


-1
votes

La manipulation d'exception autour de entrée n'est pas requise car la fonction (code> renvoie toujours une chaîne. Si l'utilisateur ne saisit pas une valeur, une chaîne vide est renvoyée.

Par conséquent, votre code peut être simplifié à xxx

plus loin concernant l'utilisation de est ::

est 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 par exemple si le nom est né ( Aucun est toujours le même objet). Comme mentionné, vous pouvez utiliser type (nom) pour obtenir le type de variable nom mais cela est découragé à la place du contrôle intégré isinstance .

== d'autre part se compare à l'égalité comme dans si nom == "Dave" .

isinstance est plus que de vérifier simplement un type spécifique, il gère également des types hérités.


3 commentaires

est compare les identités non types


@Tim par la question de OP, nom 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 () Ne génère pas ValueError . 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.



-1
votes

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:


1 commentaires

Cette approche est découragée, vous devez utiliser isinstance (nom, str) .



-1
votes

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


6 commentaires

Tout en utilisant isinstance est bon, cela ne fonctionnera toujours pas comme nom sera toujours un str


Entrée retourne toujours un STR 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 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 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 avec isalpha () .


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