web-dev-qa-db-fra.com

cs50 lisibilité pset6 python ce code devrait compter le nombre de mots, de phrases et de lettres mais il n'a pas

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
adel

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!

0
New to

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

  1. Comment comptera-t-il le dernier mot? Ce ne sera pas le cas (car ce n'est pas "suivi" d'un espace). Vous pouvez envisager d'initialiser Word à 1 (au lieu de 0).
  2. Compte-t-il correctement les mots du passage suivant? Encore une fois, non. Cette 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.

0
DinoCoderSaurus

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.

0
mattthew_james

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]==":":
0
Rakel