2017-02-16 2 views
-1

J'ai essayé d'utiliser la fonction de Python dédiée à la mise en majuscule de chaque lettre d'une chaîne, mais après l'avoir utilisée une chaîne de caractères booléens ne fonctionne pas sur cette chaîne. Qu'est-ce que je veux dire que vous demandez? Eh bien, disons que les booléens suivants:str.upper() retourne une chaîne qui apparemment ne vaut rien, y compris une autre str.upper()

"b".upper() is "B" 
".".upper() is "." 
".".upper() is ".".upper() 

sont tout faux.

Je suis tellement confus. Il se comporte comme si je convertissais une chaîne en forme upper(), au lieu de renvoyer la même chaîne avec des majuscules (ce que dit la documentation), il retourne un nouvel objet qui n'égale rien même un objet produit dans les mêmes conditions.

La définition de points d'arrêt et l'examen des valeurs réelles des variables semblent inutiles. Je survole is_graduate_input = input("Enter (y/n)").upper() et il me montre une valeur de "Y", parce que c'est ce que j'ai entré. Mais alors directement après cette ligne mon instruction print(is_graduate_input is "Y") imprime False?!?! Pourquoi?!?!

La documentation de Python indique que leur algorithme de majuscule est décrit dans certains standards Unicode. Je ne veux pas le lire. Je ne pense pas que ça va aider. Quelqu'un peut-il simplement me dire ce qu'il se passe? Je veux aller au lit. J'ai École demain.

+0

Voir [ici] (http://stackoverflow.com/questions/132988/is-there-a-difference -between-and-is-in-python) - c'est une mauvaise idée d'utiliser 'is' pour comparer avec autre chose que des singletons comme' None'. Utilisez '=='.Très similaire à ce qui se passe en Java avec '==' et '.equals()'. – yeputons

+0

@yeputons Est-ce mon problème?!?! Que devrais-je faire? –

+0

C'est, vous devriez utiliser '==' en Python pour comparer les objets pour l'égalité. N'utilisez pas 'is' en dehors des comparaisons' is None 'et 'is not None', sauf si vous comprenez clairement ce que vous faites et pourquoi. – yeputons

Répondre

1

is retournera True si deux variables pointent vers le même ID d'objet

== retournera True si les objets visés par les variables sont égales.

Ce que vous faites est de comparer deux objets différents ici et donc obtenir Faux.

"b".upper() is "B" # will return False 

Qu'est-ce qui fonctionne pour vous est

"b".upper() == "B" # will return True 

Dis: commencez avec

a = "b" 
b = "B" 
print(id(a)) 
print(id(a)) # will print same id as above. 
print(id(b)) 
print(id(b)) # will print same id as above. 

sortie:

4337047792 
4337047792 
4337610568 
4337610568 

Mais si vous imprimez id pour a.upper() il retournerez un nouvel objet à chaque fois et p rint un nouvel identifiant.

print(id(a.upper())) 
print(id(a.upper())) 

sortie:

4372772488 
4372772376 

C'est la raison pour laquelle "b".upper() is "B" # will return False. Parce que l'identifiant ne correspondra pas.

vous pouvez lire plus sur ces sujets:

why does comparing strings in python using either or is sometimes produce

understanding pythons is operator