2
votes

Si la chaîne contient des caractères en anglais - un code en Python

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)


2 commentaires

Le premier morceau ne regarde que le premier caractère de la chaîne.


Renvoyer True quitte la boucle for à la première itération


5 Réponses :


1
votes

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.


0 commentaires

0
votes

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.


0 commentaires

0
votes

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.


0 commentaires

0
votes

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.


0 commentaires

0
votes

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》电视剧热播')


0 commentaires