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 チェックが不良
私はそれで何か間違ったことをするかもしれません
1)Wordを1に初期化。 2)文字が任意の小文字/大文字であると想定するために次を追加しました:for i in range(n):if text [i] .isalnum()またはtext [i] .isupper()またはtext [i] .islower ()== True:レター= letter + 1 3)Word count:およびtext [i + 1] .isalnum()== Trueから削除されました:
今あなたのコードは10/10です!
プログラムが単語を数える方法にはいくつかの問題があります。それはスペースを数えることによってそうしています(良い計画)が、
if text[i].isspace()==True and text[i+1].isalnum()==True:
は、a-z、A-Z、または0-9が後に続くスペースのみをカウントします。この場合、「アリス」の後のスペースはカウントされないため、ワードカウントは正しくありません。アリスは「絵も会話もなしで?」と思った。
補足:i
ループでi + 1
にアクセスすることは、一般的に非常に悪い考えです。最大に達すると範囲外になります。テストされたテキストがスペースで終わっていないため、テストに失敗していません。失敗する場合は、スペースで終わるテキストを入力してください。
Wordを1に初期化して、CLIの前の「丸め」を削除し、最後から2番目の印刷ステートメントに丸めを追加します。例:{round(grade)}
私は同様のコードを持っていて、私のために働いた。
すばらしい仕事です。ここに最後の部分を追加するだけで修正しました。
if text[i]=="?" or text[i]=="." or text[i]=="!" or text[i]==":":