0

所以这是简短的:我需要输入如下内容:

BaSe fOO ThE AttAcK

并返回:

attack the base.

如您所见,要对此进行解码,我需要首先以相反的顺序阅读单词,如果单词 isupper() 的第一个字母,则将其设为小写并将其附加到我稍后将打印的列表中。这是我到目前为止所拥有的:

# Enter your code for "BaSe fOO ThE AttAcK" here.
default = input('code: ')
listdefault = default.split()
uncrypted = []
for i in range(len(listdefault)):
  if listdefault[:-i].istitle(): # doesn't work
    i = i.lower() # dont know if this works, Should convert word to lower case.
    uncrypted.append(i)
solution = ' '.join(uncrypted)
print(solution)

有人可以告诉我如何让这个程序工作吗?说我不能在列表类型上使用 istitle() 方法..

4

3 回答 3

2

这可以更简单地完成......

text = input("Code: ")
result = [w.lower() for w in reversed(text.split()) if w[0].isupper()]
print(' '.join(result))
Code: BaSe fOO ThE AttAcK
attack the base

我希望这能让你想更深入地学习 Python。

顺便说一句,你不能.istitle()用于这个任务,因为它检查是否只有第一个字母是大写的。

于 2013-08-14T08:06:52.513 回答
1

你已经接近了,但是你在i作为索引(for i in range...)和作为单词本身(uncrypted.append(i))之间切换。你的意思可能是listdefault[i].istitle()而不是listdefault[:-i].istitle()

最好的解决方案是将其更改为:

for w in listdefault[::-1]:
    if w.istitle():
        w = w.lower()
        uncrypted.append(w)

因为listdefault[::-1]是一种反转列表的方法(reversed(listdefault)也有效)。如果您知道如何使用列表推导式,您可以在一行中完成:

solution = ' '.join([w.lower() for w in listdefault[::-1] if w.istitle()])
于 2013-08-14T08:05:18.877 回答
0

这是一个合理的解决方案:

default = input('code: ')
listdefault = default.split()
uncrypted = []
for i in reversed(listdefault):
    if i[0].isupper():
        i = i.lower()
        uncrypted.append(i)
solution = ' '.join(uncrypted)
print('says:',solution)
于 2020-08-14T00:22:07.910 回答