目的是试图扭转消息,删除所有以小写字母开头的字符串,最后将所有内容都小写。
这是我的代码:
msg = input('code: ')
msg = msg.split()
msg = list(reversed(msg))
for i in msg:
if i[0] == i[0].lower:
del msg[i]
msg = ' '.join(msg)
msg = msg.lower()
print(msg)
这是一个例子
BaSe fOO ThE AttAcK
然后它会变成
attack the base
非常感谢你们!!!!!!!!!所以我回去编辑了我的代码:
new_msg = []
msg = input('code: ')
msg = msg.split()
msg = list(reversed(msg))
for word in msg:
if not word[0].islower():
new_msg.append(word.lower())
new_msg = ' '.join(new_msg)
print("says:",new_msg)
然后我回去标记它,但它说你不能标点符号!是的,我想我又需要帮助,我该如何摆脱它们呢?
答案 0 :(得分:2)
new_msg = []
msg = msg.split()
for word in msg: #For every word in the string
if not word[0].islower(): #if it starts with anything other than lowercase
new_msg.append(word.lower()) #add to new list
new_msg = ' '.join(new_msg[::-1]) #Reverse order of list and make into string
答案 1 :(得分:2)
这就是为什么你的代码无法工作,至少:
>>> i = 'fOO'
>>> i[0] == i[0].lower # huh?
False
>>> i[0].lower # oh!
<built-in method lower of str object at 0x00249F40>
>>> i[0].lower() # we forgot to *call* it
'f'
>>> i[0] == i[0].lower() # perfect!
True
您正在将字符串与方法对象进行比较 - 这就是为什么条件永远不会被命中。
如果你修复了这个错误,它仍然无法正常工作;你删除msg['fOO']
没有任何意义!尝试使用enumerate()
获取索引以及列表中的字符串。
(然后它仍然将无效。你能找出原因吗?)
答案 2 :(得分:1)
这看起来有点吓人,但我会解释一下。
s = "BaSe fOO ThE AttAcK"
print ' '.join(reversed([word.lower() for word in s.split(' ') if not word[0].islower()]))
我在这里做的是将s分割到单个空格' '
,然后创建一个不是单个' '
的列表。然后我遍历“单词”列表,并且只有当单词的第一个字符(我们通过调用第0个索引获得)不低时,才使用内置的lower方法将每个单词转换为lower。最后,我们使用join方法加入我们创建的列表。
编辑:我忘了撤消列表。
答案 3 :(得分:-1)
" ".join([word.lower() for word in reversed(msg.split()) if not word[0].islower()])
答案 4 :(得分:-1)
string = raw_input().split()
string2 = []
for i in range(len(string)):
if not string[i].[0].islower():
string2.insert(0,string[i].lower())
print ' '.join(string2)
答案 5 :(得分:-1)
我建议您在任何情况下都不要删除list / Dict迭代中的任何元素。 如果你这样做,那就错了。
就像那样:
sMsg="BaSe fOO The AttAck"
lstMsg=sMsg.split(" ")
for i in xrange(len(lstMsg)):
if lstMsg[i][0].islower():
del lstMsg[i]