from cs50 import get_string
letter=0
sentence=0
Word=0
text = get_string("Text: ")
n = len(text)
for i in range(n):
if text[i].isalnum()==True:
letter=letter+1
for i in range(n):
if text[i].isspace()==True and text[i+1].isalnum()==True:
Word=word+1
for i in range(n):
if text[i]=="?" or text[i]=="." or text[i]=="!":
sentence=sentence+1
grade = round (0.0588 * ((100 * letter) / Word) - 0.296 * ((100 * sentence) / Word) - 15.8)
if grade<1:
print("Before Grade 1")
Elif grade < 16:
print(f"Grade {grade}")
else :
print("Grade 16+");
https://submit.cs50.io/check50/d3897b249b2ca6ea937d023c25c1607af52ea5cd les contrôles sont mauvais
peut-être que je fais quelque chose de faux
1) Mot initialisé à 1; 2) Ajout de ce qui suit pour supposer qu'une lettre est un caractère minuscule/majuscule: for i in range (n): if text [i] .isalnum () or text [i] .isupper () or text [i] .islower () == True: letter = letter + 1 3) Supprimé pour le nombre de mots: et texte [i + 1] .isalnum () == True:
Maintenant, votre code est 10/10!
Il y a quelques problèmes avec la façon dont le programme compte les mots. Il le fait en comptant les espaces (bon plan), mais
if text[i].isspace()==True and text[i+1].isalnum()==True:
ne compte que les espaces suivis de a-z, A-Z ou 0-9. Dans ce cas, il ne comptera pas l'espace après "Alice", donc le nombre de mots est incorrect.pensa Alice "sans photos ni conversation?"
Remarque: accéder à i + 1
dans la boucle i
est généralement une très mauvaise idée; il sera en dehors de la plage lorsque j'atteindra le maximum. Le test n'a pas échoué car aucun texte testé ne se termine par un espace. Si vous voulez le voir échouer, entrez un texte qui se termine par un espace.
Essayez d'initialiser Word à 1, en supprimant "round" avant CLI et en ajoutant round à l'avant-dernière instruction d'impression. Exemple: {round (grade)}
J'avais un code similaire, travaillé pour moi.
Excellent travail, je l'ai corrigé en ajoutant seulement la dernière partie ici:
if text[i]=="?" or text[i]=="." or text[i]=="!" or text[i]==":":