我已经能够隔离我想要从用户输入的字符串中排除的字符列表(或字符串)。但我不知道如何删除所有这些不需要的字符。完成此操作后,我想我可以尝试加入用户字符串,这样它就变成了一个字母输入,就像说明中所说的那样。
使用说明:
例如,如果输入是:
-Hello, 1 world$!
输出应该是:
Helloworld
我的代码:
userEntered = input()
makeList = userEntered.split()
def split(userEntered):
return list(userEntered)
if userEntered.isalnum() == False:
for i in userEntered:
if i.isalpha() == False:
#answer = userEntered[slice(userEntered.index(i))]
reference = split(userEntered)
excludeThis = i
print(excludeThis)
当我打印
excludeThis
时,我得到这个作为我的输出:
-
,
1
$
!
所以我想我可能走在正确的道路上。我需要弄清楚如何从用户输入中获取这些字符。
循环输入字符串。如果字符是字母,请将其添加到结果字符串中。
userEntered = input()
result = ''
for char in userEntered:
if char.isalpha():
result += char
print(result)
这也可以通过正则表达式来完成:
import re
userEntered = input()
result = re.sub(r'[^a-z]', '', userEntered, flags=re.I)
正则表达式
[^a-z]
匹配除字母字符之外的任何内容。 re.I
标志使其不区分大小写。这些都被替换为空字符串,从而删除它们。
这基本上有两个主要部分:区分 alpha 和非 alpha,并获取仅包含前者的字符串。如果
isalpha()
满足前者,那么就只剩下后者了。我的理解是,被认为最 Pythonic 的解决方案是加入理解。想要这样的:
''.join(char for char in userEntered if char.isalpha())
顺便说一句,代码中有几个地方使代码变得比需要的更复杂。在 Python 中,您可以迭代字符串,因此无需将
userEntered
转换为列表。 isalnum()
检查字符串是否全是字母数字,因此它是无关紧要的(字母数字包括数字)。您不应该将布尔值与 True
或 False
进行比较,只需使用布尔值即可。因此,例如,if i.isalpha() == False:
可以简化为 if not i.isalpha():
。
user_input = input(str())
for character in user_input:
if character.isdigit() == False:
if character.isupper() == True:
print(character, end='')
if character.islower() == True:
print(character, end='')
print()