2017-01-26 2 views
1

Je suis un programmeur très novice et encore plus novice en Python. J'essaye de détecter si un caractère passé à une fonction est inférieur ou majuscule.Python: vérifier la capitalisation d'un personnage

def encode(char, key, position, skipped): 

if char.islower() == True: 
    ascii_offset = 97 
if char.isupper() == True: 
    ascii_offset = 65 
else: 
    print("You dun goofed laddie") 
    exit(2) 
... 
return char 

La fonction se ferme dans l'instruction 'else'. Cependant, je suis un peu confiant que les caractères en fait sont passés à la fonction ...

+2

Un changement qui seconde 'if' dans un' elif' – inspectorG4dget

+0

Merci beaucoup, cela a fonctionné! Je ne sais pas trop pourquoi ... mais je suis très reconnaissant – Tikhon

Répondre

1

@Tikhon a écrit: « Merci beaucoup, cela a fonctionné, je ne suis pas trop pourquoi ... mais je suis très reconnaissant! »

Explication: Si un caractère est en minuscule, vous exécutez le premier si le bloc. Cependant, l'exécution du code passera itérativement au bloc if suivant, et parce qu'il est False (en supposant que le premier était True), vous exécutez le cas else.

Donc, en utilisant Elif mettra en œuvre le comportement souhaité:

if condition A: 
    do something 
elif condition B: 
    do something else 
else: 
    do some default case 
3

Votre problème est que vous avez deux instructions if et la seconde en a une autre. Vous voulez quelque chose comme:

def encode(char, key, position, skipped): 

    if char.islower(): 
    offset = 97 
    elif char.isupper(): 
    offset = 65 
    else: 
    print("Somethings wrong") 
    exit(2) 

return char 

Les deux déclarations si l'amène à l'échec parce que si vous envoyez une lettre minuscule, il sera toujours faire la déclaration else à courir. La deuxième déclaration if dit, if this is not an upper case letter, exit(2). Ainsi, toute lettre minuscule provoquera la sortie. Surveillez également vos indentations. C'est comme ça que Python sépare les blocs de code.