-1

我偶然发现了“如何像计算机科学家一样思考”中的一个新练习。(打开文档@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。

我应该修改什么以便得到 Ouack 和 Quack 而不是 Oack 和 Qack?

为了学习,我尝试的是:

prefix="JKLMNOPQ"
suffix="ack"

for letter in prefix:
  if letter = "O" or "U":
    print letter + "u" + suffix
  else:
    print letter + suffix

正如大多数人第一眼看到的那样,所犯的语法错误是在 if 函数调用中使用 = 而不是 == 。

感谢您的及时帮助,我非常感谢他们。

4

8 回答 8

5

给定的示例依赖于这样一个事实,即在迭代时,字符串会给出其每个单独的字符。由于您希望某些前缀具有两个字符,因此您必须将字符串分解为每个字符的单独字符串并添加所需的u位置。

prefixes=["J", "K", "L", "M", "N", "Ou", "P", "Qu"]
suffix="ack"

for letters in prefixes:
    print letters + suffix
于 2012-05-15T14:13:07.543 回答
4

我不会为你解决这个问题,但会给你一个提示:if语句可能会派上用场。

于 2012-05-15T14:13:14.193 回答
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
于 2012-05-15T14:15:32.783 回答
2

查找两个前缀(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
于 2012-05-15T14:18:17.433 回答
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","Ou ","P","Qu"] 之类的。通常,正则表达式替换可能是修复字符串输入的好方法。如果您打算“更像计算机科学家那样思考”,我还建议您尝试尽可能多地使用列表推导来掌握它们,并将输出视为一个单独的问题。

于 2012-05-15T15:36:43.277 回答
0

使用地图函数和正则表达式

RX = lambda x: re.sub("(O|Q)","\\1u",x)
map(RX,[x+suffix for x in prefix])
于 2013-01-29T09:47:42.797 回答
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

我喜欢破坏东西;)

于 2016-08-27T21:06:39.650 回答
-4

如果我理解这个问题(即如何只为 Q/O 前缀添加 u),你最终会得到如下结果:

for letter in prefix:
     word = letter
     if letter in ["O","U"]:
        word += "u"
     print word . suffix
于 2012-05-15T14:17:20.240 回答