我正在练习编写bat代码,问题是找出单词“code”在字符串中出现的次数,但“code”中的字母“d”可以替换任何字母。所以“code”的计数是1,“cope”也是1。我写了一些代码,但它不能工作。我不明白为什么它不能工作。该函数为每一个输入返回0。这是我尝试过的https://codingbat.com/prob/p186048的链接
def count_code(str):
count = 0
str = str.lower()
for x in str:
if x == ‘c’ and str.find(x) + 1 == “o” and str.find(x) + 3 == “e”:
count += 1
return count 发布于 2020-04-12 13:57:45
正如Tim提到的,如果你需要一种更简单的方法(不是最有效的方法,而是一种方法),我会在这类任务中使用正则表达式:
import string
text = 'elephant code joke cole coke man'
total = 0
for letter in string.ascii_lowercase:
total += text.count(f'co{letter}e')
print(f'{total}')请注意,在您的解决方案尝试中,存在以下情况:
for x in str:除了在这种情况下应该避免名称冲突str之外,对于1000个字符的文本,您将使用这种方法进行1000次迭代,减少到26次迭代(字母表)。
发布于 2020-04-12 13:32:10
我在这里使用re.findall,然后只计算找到的匹配项的数量:
inp = "blah code blah cole blah core blah"
print(len(re.findall(r'\bco[a-z]e\b', inp))) # prints 3这里使用的正则表达式模式是\bco[a-z]e\b,它可以匹配任何单词code,其中第三个字母d实际上可以是任何字母。
发布于 2020-04-12 13:37:00
您混淆了索引和字符的内容:
str.find(x) + 1 == ‘o’这绝不可能是真的:您的find调用将返回字符串中第一个这样的字符的位置。将该索引加1。你如何想象这个整数和可以等于字符'o'?整数和字符不能相等。
你需要备份并重新设计你的逻辑。当您这样做时,请参阅debugging help的这个可爱的参考资料。您需要学习如何在自己的代码中跟踪问题。
https://stackoverflow.com/questions/61167240
复制相似问题