我偶然发现了“如何像计算机科学家一样思考”的新练习。 (打开文档@ http://www.openbookproject.net/thinkcs/python/english2e/ch07.html)
希望收到一些指示:
prefix="JKLMNOPQ"
suffix="ack"
for letter in prefix:
print letter + suffix
你得到了 Jack,Kack,Lack,Mack,Nack,Oack,Pack& Qack。
我应该修改什么,以便代替Oack和Qack,我得到Ouack和Quack?
为了学习,我尝试的是:
prefix="JKLMNOPQ"
suffix="ack"
for letter in prefix:
if letter = "O" or "U":
print letter + "u" + suffix
else:
print letter + suffix
正如大多数人一眼就注意到的那样,提交的语法错误是在if函数调用中使用=而不是==。
感谢您的所有快速帮助,我非常感谢他们。
答案 0 :(得分:5)
给定的示例依赖于以下事实:当迭代时,字符串给出每个单独的字符。由于您希望某些前缀包含两个字符,因此您必须将每个字符的字符串拆分为单独的字符串,并将u
添加到您想要的位置。
prefixes=["J", "K", "L", "M", "N", "Ou", "P", "Qu"]
suffix="ack"
for letters in prefixes:
print letters + suffix
答案 1 :(得分:3)
我不会为你解决这个问题,但会给你一个提示:the if
statement可能派上用场。
答案 2 :(得分:3)
查找两个前缀(Q和O),然后添加'u',否则只需按原样打印
for letter in prefix:
if letter in ['Q', 'O']:
print letter + 'u' + suffix
else:
print letter + suffix
的产率:
Jack
Kack
Lack
Mack
Nack
Ouack
Pack
Quack
答案 3 :(得分:2)
prefix = "JKLMNOPQ"
suffix = "ack"
for letter in prefix:
if letter == 'O' or letter == 'Q':
print "".join((letter, 'u', suffix))
else:
print "".join((letter, suffix))
Jack
Kack
Lack
Mack
Nack
Ouack
Pack
Quack
答案 4 :(得分:0)
这是正则表达式解决方案:
import re
prefix="JKLMNOPQ"
suffix="ack"
names=[re.sub("([OQ])","\\1u",p) + suffix for p in prefixes]
print "\n".join(names)
我认为指定的问题是纠正输入,即它不是关于输入如何糟糕的问题,应该是[J“,”K“,”L“,”M“,”N“形式的问题,“欧”,“P”,“曲”等等。通常,正则表达式替换可以是修复字符串输入的好方法。 如果你打算“更像是一个计算机科学家”,我还建议尽可能多地使用列表推导来解决这些问题,并将输出视为一个单独的问题。
答案 5 :(得分:0)
使用地图功能和正则表达式
RX = lambda x: re.sub("(O|Q)","\\1u",x)
map(RX,[x+suffix for x in prefix])
答案 6 :(得分:0)
解决方案:
prefixes = 'JKLMNOPQ'
suffix = 'ack'
for letter in prefixes:
while True:
if letter == 'O':
print letter + 'u' + suffix
break
if letter == 'Q':
print 'Quack' # just another solution of the print statement
break
print letter + suffix
break
我喜欢打破东西;)
答案 7 :(得分:-4)
如果我理解了问题(那就是如何仅为Q / O前缀添加u),你最终会得到这样的结果:
for letter in prefix:
word = letter
if letter in ["O","U"]:
word += "u"
print word . suffix