思考Python(如何像计算机科学家一样思考) - 练习8.4

2 投票
12 回答
10257 浏览
提问于 2025-04-16 07:25

我在解决下面这个问题时遇到了一些麻烦(我对如何解决它的想法就在问题下面)

“在罗伯特·麦克洛斯基的书《给小鸭子让路》中,小鸭子的名字是杰克、凯克、拉克、马克、纳克、欧克、帕克和夸克。”

这个循环按顺序输出这些名字:

prefixes = 'JKLMNOPQ' 
suffix = 'ack'
for letter in prefixes:
    print letter + suffix

输出结果是:

Jack
Kack
Lack
Mack
Nack
Oack
Pack
Qack

当然,这个结果不太对,因为“欧克”和“夸克”拼错了。

练习8.2 修改程序以修正这个错误。

所以现在的前缀加后缀一共是4个字符,而“欧克”和“夸克”是5个字符。在之前的部分,我们使用了'while'循环来遍历一个字符串,创建一个条件:如果索引等于字符串的长度,条件就为假,这样循环的内容就不会执行。我在想我需要修改这个for循环,让它在输出的字符数小于输入的原始字符串值时,添加字母'U'。我该如何将输入的每个名字的字符串长度和'前缀'联系起来呢?

我不太确定该怎么做,或者是否应该换个策略。

提前道歉,如果我把术语搞得一团糟,我才刚开始读这本书,之前没有计算机科学的背景。

12 个回答

3

我刚做完这个练习,来这里看看别人是怎么做的。在我的第二版书里,这个内容是关于索引和字符串模块的一章,所以我在我的疯狂解法中大量使用了这些东西。基本上,我在前缀字符串中加了“u”,然后写了一个if语句来检查字符串中是否有小写字母。

import string
def ducks():
    prefixes = "JKLMNOuPQu"
    suffix = "ack"
    index = 0
    while index < len(prefixes)-1:
        if prefixes[index+1] in string.lowercase:
        prefix = prefixes[index:index+2]
        print prefix + suffix
        index += 1
    elif prefixes[index] in string.lowercase:
        index += 1
    else:
        prefix = prefixes[index]
        print prefix + suffix
        index +=1
4

我的解决方案是:

prefixes = list('JKLMNP')
prefixes.extend(['Ou', 'Qu'])
suffix = 'ack'
for pref in prefixes:
    print pref + suffix

这个方案很简洁,而且对原来的内容改动很少。

6
>>> for letter in prefixes:
        if letter in ('O', 'Q'):  # if the letter is O or Q
            print letter + 'u' + suffix
        else:
            print letter + suffix


Jack
Kack
Lack
Mack
Nack
Ouack
Pack
Quack

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。

撰写回答