Veuillez examiner pourquoi les deux morceaux de code produiraient des résultats différents. Le but est de renvoyer True ou False si la chaîne d'entrée contient un caractère qui n'est PAS en anglais.
Code 1:
def is_english(string):
for char in string:
if ord(char) > 127:
return False
return True
resultX = is_english('ç±å¥èºPPS -ãæ¬¢ä¹é¢2ãçµè§å§çæ')
resultY = is_english('Docs To Go⢠Free Office Suite')
resultZ = is_english('Instachat ð')
print(resultX, resultY, resultZ)
Ceci produit le résultat False, True, True
Code 2:
def char_find(string):
for char in string:
if (ord(char) >= 0) and ord(char) <= 127:
return True
else:
return False
result1 = char_find('ç±å¥èºPPS -ãæ¬¢ä¹é¢2ãçµè§å§çæ')
result2 = char_find('Docs To Go⢠Free Office Suite')
result3 = char_find('Instachat ð')
print(result1, result2, result3)
5 Réponses :
Dans le code 1, vous renvoyez True si vous trouvez un caractère anglais sinon un False mais dans le code 2, vous renvoyez un False si vous trouvez un caractère non anglais. Ce n'est que si tous les caractères sont anglais que cela renvoie un True .
Le point clé à noter est que vous quittez la fonction avec la valeur transmise avec return une fois que vous rencontrez un return.
Vous pouvez le faire de manière plus pythonique en utilisant le module string et all sur un générateur:
def is_english(s):
return all(char.lower() in string.ascii_lowercase for char in s)
qui renverra un True si tous sont des caractères anglais sinon un False.
Dans la première fonction, vous parcourez tous les caractères avec pour char dans la chaîne , mais comme les deux cas de l'instruction if ont un retour explicite, vous ne vérifiez jamais aucun caractère après le premier.
/ p>
C'est pourquoi il renvoie False, True, True , puisque les premiers caractères sont 爱, D, I.
Lorsque vous êtes dans une fonction, le mot-clé return signifie "arrêtez tout ce que vous faites, prenez cette valeur et renvoyez-la à celui qui l'a demandée." Ainsi, votre première fonction commence à parcourir chaque caractère de la chaîne.
Il commence par le premier caractère et vérifie si sa représentation Unicode est comprise entre 0 et 127. Si tel est le cas, il renvoie True à result1 . C'est ça. La fonction est maintenant terminée et Python passe à la ligne de code suivante, qui vérifie result2 .
La même chose se produit si si elle n'est pas comprise entre 0 et 127, le code renvoie False puis s'arrête.
Quoi qu'il en soit, une fois que vous avez frappé une instruction return , votre fonction est terminée. Étant donné que votre première chaîne commence par un caractère non anglais, elle renvoie false. Étant donné que vos deux secondes chaînes commencent par des caractères anglais, elles renvoient true.
Dans le code 1, Même si vous avez une boucle, vous avez une instruction if else à l'intérieur et if et else contiennent une instruction return. Donc, il vérifie toujours le premier caractère et renvoie le résultat.
C'est pourquoi il renvoie False, True, True , car il ne vérifie que les premiers caractères c'est-à-dire 爱, D, I
Dans le code 2,
Vous parcourez les caractères, à l'intérieur de la boucle, vous ne renvoyez la valeur que si vous trouvez un caractère non anglais. Donc, il vérifiera tous les caractères et si la chaîne ne contient aucun caractère non anglais, la boucle terminera l'itération et True sera retourné lorsque vous mettez l'instruction return après la boucle. P >
Créez une fonction de test qui effectue efficacement le travail des deux fonctions et comparez vous-même les résultats:
ç± => 29233 you would return false here å¥ => 22855 you would return false here èº => 33402 you would return false here P => 80 you would return true here P => 80 you would return true here S => 83 you would return true here => 32 you would return true here - => 45 you would return true here ã => 12298 you would return false here 欢 => 27426 you would return false here ä¹ => 20048 you would return false here é¢ => 39042 you would return false here 2 => 50 you would return true here ã => 12299 you would return false here çµ => 30005 you would return false here è§ => 35270 you would return false here å§ => 21095 you would return false here ç => 28909 you would return false here æ => 25773 you would return false here
sortie:
def char_find(string):
for char in string:
if ord(char) > 127:
print(char, '=>', ord(char))
print('you would return false here')
if (ord(char) >= 0) and ord(char) <= 127:
print(char, '=>', ord(char))
print('you would return true here')
char_find('ç±å¥èºPPS -ãæ¬¢ä¹é¢2ãçµè§å§çæ')
Le premier morceau ne regarde que le premier caractère de la chaîne.
Renvoyer
Truequitte la boucle for à la première itération