cs50可读性pset6 python此代码应该计算单词、句子和字母的数量,但它没有

2024-04-24 20:16:54 发布

您现在位置:Python中文网/ 问答频道 /正文

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 支票是坏的

可能是我做了什么错事


Tags: textintrueforgetstringifrange
3条回答

程序计算单词的方式有几个问题。这是通过计算空间来实现的(好计划),但是

  1. 最后一个字怎么算?它不会(因为它后面没有空格)。您可以考虑将单词初始化为1(而不是0)。李>
  2. 下面这段话的字数正确吗?同样,否。此if text[i].isspace()==True and text[i+1].isalnum()==True:仅统计后跟a-z、a-z或0-9的空格。在这种情况下,它不会计算“Alice”后面的空格,因此单词计数是不正确的

thought Alice "without pictures or conversation?"

旁注:在i循环中访问i + 1通常来说是一个非常糟糕的主意;当我达到最大值时,它将超出范围。它没有在测试中失败,因为没有测试文本以空格结尾。如果希望看到失败,请输入以空格结尾的文本

这里有几个问题:

第一种是在开始时使用文本(顺便说一句,不是标准的)而不是文本。这应该对你有很大帮助

第二个问题是,您实际上没有使用get\u string方法。现在,这可能对你有用;我只是把它扔进了Juypter笔记本,因为我想把它当作一个REPL。但是,假设没有,让我们简单地介绍一下

使用cs50安装Conda环境或pip并运行:

enter image description here

运行良好,没有错误。好的现在是第一个街区:

letter=0
sentence=0
word=0
Text = get_string("Text: ")

这(因为我使用的是笔记本)评估为:

Text: None

现在,在cs50库中可能会用到一些特定的东西,但我使用了输入,并将文本改为小写

但你走的路是对的

1)将字初始化为1; 2) 添加以下内容以假设字母为任何小写/大写字符: 对于范围(n)中的i: 如果text[i].isalnum()或text[i].isupper()或text[i].islower()==True: 字母=字母+1 3) 已删除字数计算: 和文本[i+1]。isalnum()==True:

现在你的代码是10/10

相关问题 更多 >