为什么我找到双字母的程序不能执行?Python

2024-09-30 08:34:01 发布

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

我的目的是让程序列出一个文本文件中有3组双字母的所有字符串。如果找到3个或更多个双字母集,则函数应该返回True:

def three_double(s):
doubnum = 0
i=0
while i < len(s)-1:
    if s[i] == s[i+1]:
        doubnum += 1
    elif doubnum >= 3:
        return True
    else:
        i += 1
return False

我不知道为什么它不打印任何东西。这是节目的其余部分。在

^{pr2}$

Tags: 函数字符串程序目的truelenreturnif
3条回答

^{}可以大大简化您的程序(=更少的错误)

from itertools import groupby
import urllib

def find_three_double(words_file):
    for word in words_file:
        word = word.strip()
        if sum(sum(1 for i in g) == 2 for k,g in groupby(word)) == 3:
            print word

# Access the file containing the valid letters
words_url = "http://thinkpython.com/code/words.txt"
words_file = urllib.urlopen(words_url)

# Apply the actual test
find_three_double(words_file)

说明:

在生成器表达式中,我们看到groupby(word)。这将扫描单词并将两个字母聚集在一起。在

sum(1 for i in g)应用于每个组。它相当于求群的长度。如果长度为2,则这是一个双字母,因此sum(1 for i in g) == 2的计算结果为True

外部的sum()将所有的True和{}的值相加,True被添加为1,而{}则被添加为0。如果正好有3个True值,则会打印该单词

while i < len(s)-1:
    if s[i] == s[i+1]:
        doubnum += 1
    elif doubnum >= 3:
        return True
    else:
        i += 1

如果您的第一个检查(s[i] == s[i+1])是True,那么您将永远不会递增i,这样循环将永远继续。在

一开始我没有仔细阅读您的代码,结果发现它与read()或{}无关,因为您正在迭代find_three_doubles()函数。在


在您的three_double()函数中:

while i < len(s)-1:
    if s[i] == s[i+1]:
        doubnum += 1
    elif doubnum >= 3:
        return True
    else:
        i += 1
return False

有两个问题:

  • 您需要将i递增1,否则如果存在“double”,while循环将永远不会停止。在
  • 您还需要在此处将elif更改为if,否则将不会选择某些限定词。在

固定代码:

^{pr2}$

结果:

aggressiveness
aggressivenesses
allottee
allottees
appellee
appellees
barrenness
barrennesses
bookkeeper
bookkeepers
bookkeeping
bookkeepings
cheerlessness
cheerlessnesses
committee
committees
greenness
greennesses
heedlessness
heedlessnesses
heelless
hyperaggressiveness
hyperaggressivenesses
keelless
keenness
keennesses
masslessness
masslessnesses
possessiveness
possessivenesses
rottenness
rottennesses
sleeplessness
stubbornness
stubbornnesses
successfully
suddenness
suddennesses
sullenness
sullennesses
toolless
wheelless
whippoorwill
whippoorwills
woodenness
woodennesses
46 found

相关问题 更多 >

    热门问题