所以这是简短的说明: 我需要输入类似的内容:
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()方法..
答案 0 :(得分: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()
执行此任务,因为它会检查仅第一个字母是否为大写。
答案 1 :(得分: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()])
答案 2 :(得分: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)