Cet exercice de codage me pose beaucoup de problèmes et j'ai besoin d'aide.

Voici le problème.

Écrivez un programme qui fait l'inverse de l'exemple ci-dessus: il doit prendre un caractère en entrée et sortir le nombre correspondant (entre 1 et 26). Votre programme ne doit accepter que des majuscules. En tant que vérification d'erreur, imprimez non valide si l'entrée n'est pas une majuscule.

Voici ce que j'ai jusqu'à présent.

inp = input()

if (len(inp) > 1 or inp != inp.upper()):
    print("invalid input")

else:
    print(ord(inp)-ord("A")+1)
1
Harpoonfever 12 mars 2019 à 02:09

2 réponses

Meilleure réponse

Comme précisé dans le commentaire, le problème semble être que la validation ne couvre pas suffisamment de cas.

Pour vérifier que le nombre que vous calculez est un caractère majuscule valide, vous pouvez simplement vérifier s'il est compris entre 1 et 26:

if 1 < ord(inp) - ord("A") + 1 < 26:
    print(ord(inp) - ord("A") + 1)
else:
    print("Invalid input")

Pour ajouter ceci à votre validation actuelle:

inp = input()

if (len(inp) > 1 or inp != inp.upper() or 
    ord(inp) - ord("A") + 1 < 1 or ord(inp) - ord("A") + 1 > 26):
    print("invalid input")

else:
    print(ord(inp)-ord("A")+1)
0
sheepez 11 mars 2019 à 23:36

Cela pourrait vous aider.

Ajoutez tout ce que vous voulez tester à la liste test_data.

# take advantage of the string module to get a string of all upper-case characters
from string import ascii_uppercase # equiv of 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'

test_data = ['z', 'AB', '', 10, None, "@", *ascii_uppercase] # some test data including all the upper-case characters

for item in test_data:
    string = str(item) # turn the item into type str
    length_is_one = len(string) == 1 # get the length
    if all((length_is_one, string in ascii_uppercase)): # if all these are true
        print(ascii_uppercase.index(item) + 1) # print the index of the letter + 1
    else:
        print(f'"{item}" is {INVALID}') # I modified the invalid output

PRODUCTION:

"z" is invalid
"AB" is invalid
"" is invalid
"10" is invalid
"None" is invalid
"@" is invalid
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
0
dmmfll 11 mars 2019 à 23:51