目标是从用户的段落中列出并进行迭代,以便我可以计算出多少个单词包含特殊字母“j,x,q,z”。

输入示例:
在地下的一个洞里,住着一个霍比特人。它不是一个肮脏,肮脏,潮湿的小孔,里面充满蠕虫的末端和难闻的气味,也没有一个干燥,裸露的沙质孔,里面没有东西可坐下或进食;这是一个霍比特洞,这意味着舒适。

输出示例:
1个单词,稀有字符

我已经开始在代码中将用户的段落分成一个列表,但是我很难遍历该列表并查找每个特殊字母的实例。

这是我到目前为止的内容:

def rareChar(words):
    rareWords = 0
    rareChars = ['j', 'x', 'q', 'z']
    for astring in words:
        wds = words.split()
        for char in wds:
            if char in rareChars:
                rareWords = rareWords + 1
    return rareWords

def CoolPara(words):
    print(rareChar(words), 'word(s) with a rare character')

    # DO NOT CHANGE CODE BELOW

    print(CoolPara(input("Enter: ")))

如果使用示例输入运行,则会得到输出“0个单词(带一个稀有字符)”。我该如何解决这个问题,以便获得预期的输出。任何帮助将不胜感激,因为我还是编码的新手

还有一个简短的注意事项:我只允许使用split()和Len()的方法/函数

最佳答案

也许这是一个向您介绍一些python功能的机会:

from typing import List


def rare_char(sentence: str, rare_chars: List[str]=["j", "x", "q", "z"]) -> List[str]:
    return [word for word in sentence.split() if
            any(char in word for char in rare_chars)]


def cool_para(sentence: str) -> str:
    return f"{len(rare_char(sentence))} word(s) with rare characters"

该答案使用:
  • typing,可以由第三方工具(例如类型检查器,IDE,短绒毛衫)使用,但更重要的是让其他可能正在阅读您的代码的人清楚您的意图。
  • default arguments,而不是在函数内部对其进行硬编码。记录功能非常重要,这样用户就不会对结果感到惊讶(请参阅Principle of Least Astonishment)。当然,还有其他方式来记录您的代码(请参见docstrings)和其他方式来设计该接口(interface)(例如可以是class),但这只是为了说明这一点。
  • List comprehensions,可以通过增加declarative instead of imperative使其代码更具可读性。确定命令式算法背后的意图可能很困难。
  • string interpolation,根据我的经验,它比串联更容易出错。
  • 我使用pep8样式指南来命名函数,这是python世界中最常见的约定。
  • 最后,不是打印,而是在str函数中返回了cool_para,因为# DO NOT CHANGE CODE BELOW注释下面的代码正在打印函数调用的结果。
  • 关于python - 在列表中查找特定字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58614355/

    10-10 18:26
    查看更多