我正在尝试编写一个消除带有字符串和2个可选参数的函数。第一个可选参数(bad_characters)接受一个字母,第三个参数(case_sensitive)接受一个布尔值。该函数应该采用字符串s并删除bad_characters的所有实例。如果case_sensitive为true,则该函数应该区分大小写。如果为false,则不需要。这是我到目前为止所做的。
def eliminate(s,bad_characters = [],case_sensitive = True or False):
''' Takes a string s and returns the string with all bad_characters
removed. If case_sensitive is True, then the function will only
remove uppercase letters if there are uppercase letters in
bad_characters.
String --> String'''
while True:
if case_sensitive = False:
for character in s:
if bad_characters == character:
newlist = s.replace(bad_characters,'')
return newlist
break
如果需要,我很难弄清楚如何使该函数删除大写字母。如果bad_characters是列表,元组或字符串,该函数也应该有效。
答案 0 :(得分:2)
您的问题是错过了对str.replace
的理解,因为它只是替换了一个字符,因此您需要遍历bad_characters
并逐个删除它们。
而不是使用==
,您可以使用in
操作数来检查成员资格,然后从字符串中删除character
:
def eliminate(s,bad_characters = '',case_sensitive = False):
''' Takes a string s and returns the string with all bad_characters
removed. If case_sensitive is True, then the function will only
remove uppercase letters if there are uppercase letters in
bad_characters.
String --> String'''
if case_sensitive == False:
for character in s:
if character in bad_characters:
s = s.replace(character,'')
return s
作为从字符串中删除特殊字符的更加pythonic的方法,您可以使用str.translate方法:
s.translate(None,bad_characters)
答案 1 :(得分:0)
您可以在此处使用非常方便的str.swapcase
功能。请注意,为清楚起见,以下代码会覆盖bad_characters
,但您可以轻松修改它以保持不变。
def eliminate(s, bad_characters, case_sensitive):
if not case_sensitive:
bad_characters += map(str.swapcase, bad_characters)
return ''.join([c for c in list(s) if c not in bad_characters])
print eliminate('AaBb', ['a'], False)
print eliminate('AaBb', ['a'], True)
print eliminate('AaBb', ['A'], True)
Bb
ABb
aBb
答案 2 :(得分:0)
a = 'AbCdEfG'
print(''.join([x[0] for x in zip(a, a.upper()) if x[0] != x[1]]))
# bdf
答案 3 :(得分:0)
您可以使用string.translate
(python2)。
string.translate(s,table [,deletechars])
删除deletechars中的所有字符(如果存在),然后使用table翻译字符,该表必须是256个字符的字符串,为每个字符值提供翻译,并按其序号索引。如果table为None,则仅执行字符删除步骤。
代码中的其他错误:
case_sensitive
初始化True
。 True or False
是True
。While True
然后break
一无所获。删除它。if case_sensitive = False:
是一项任务,您需要进行比较==
。 case_sensitive
是布尔值,因此只需使用if case_sensitive
或if not case_sensitive
。bad_characters == character
错了。你无法将列表与角色进行比较。请改用character in bad_characters
。以下是更正的整个解决方案:
def eliminate(s, bad_characters = [], case_sensitive = True):
if case_sensitive: #True
return s.translate(None, "".join(bad_characters))
else:
s = s.translate(None, "".join(bad_characters).lower())
s = s.translate(None, "".join(bad_characters).upper())
return s
答案 4 :(得分:-2)
def eliminate(s, bad_characters = [], case_sensitive=True):
for character in bad_characters:
if not case_sensitive:
s = s.replace(character.lower(),'')
s = s.replace(character.upper(),'')
else:
s = s.replace(character,'')
return s