思考Python(如何像计算机科学家一样思考) - 练习8.4
我在解决下面这个问题时遇到了一些麻烦(我对如何解决它的想法就在问题下面)
“在罗伯特·麦克洛斯基的书《给小鸭子让路》中,小鸭子的名字是杰克、凯克、拉克、马克、纳克、欧克、帕克和夸克。”
这个循环按顺序输出这些名字:
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
当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更简单易懂。