创建一个应该首先返回小写字母“_”和“。”的函数时遇到问题。然后是大写字母,“”和“|”以该顺序。我的版本似乎返回数字和特殊字符,例如&lt;&gt; @,我不想让它做,它只应该读取输入字符串一次,我不知道是否用我的代码实现了。< / p>
我的代码是:
def split_iterative(n):
splitted_first = ""
splitted_second = ""
for i in n:
if i == i.lower() or i == "_" or i == ".":
splitted_first = splitted_first + i
elif i == i.upper() or i == " " or i == "|":
splitted_second = splitted_second + i
return splitted_first + splitted_second
如果我执行plit_iterative("'lMiED)teD5E,_hLAe;Nm,0@Dli&Eg ,#4aI?rN@T§&e7#4E #<(S0A?<)NT8<0'"))
,则返回"'li)te5,_he;m,0@li&g ,#4a?r@§&e7#4 #<(0?<)8<0'MEDDELANDEINTESANT"
这是不正确的,因为它应该消除所有这些特殊字符和数字。我该如何解决?它应该返回('lite_hemligare', 'MEDDELANDE INTE SANT')
答案 0 :(得分:1)
你可以试试这个:
def f(input_string):
str1 = str2 = ""
for character in input_string:
if character.isalpha():
if character.islower():
str1 += character
else:
str2 += character
elif character in "_.":
str1 += character
elif character in " |":
str2 += character
return str1, str2
输出:
>>> input_string = "'lMiED)teD5E,_hLAe;Nm,0@Dli&Eg ,#4aI?rN@T§&e7#4E #<(S0A?<)NT8<0'"
>>>
>>> print f(input_string)
('lite_hemligare', 'MEDDELANDE INTE SANT')
>>>
答案 1 :(得分:1)
这是因为你正在迭代一个字符串。特殊字符的小写字母与字符相同。即.. '#'.lower() == '#'
。因此,它将返回#&#39;#&#39;和所有其他特殊字符。你应该在字符串上使用isalpha()方法显式检查字母表。
(i.isalpha() and i.lower() == i) or i == '_' or i == '.'
答案 2 :(得分:0)
您可以使用ASCII值过滤字符:
def split_iterative(n):
splitted_first = ""
splitted_second = ""
for i in n:
if ord(i) in range(97,122) or i == "_" or i == ".":
splitted_first = splitted_first + i
elif ord(i) in range(65,90) or i == " " or i == "|":
splitted_second = splitted_second + i
return (splitted_first , splitted_second)
答案 3 :(得分:0)
首先,要让它返回一个列表,不要返回连接的字符串,而是列表
其次,您没有检查或过滤掉字符,一种方法是使用isalpha()方法检查字符是否为字母
类似的东西:
def split_iterative(n):
splitted_first = ""
splitted_second = ""
for i in n:
if (i.isalpha() and i == i.lower()) or i == "_" or i == ".":
splitted_first = splitted_first + i
elif (i.isalpha() and i == i.upper()) or i == " " or i == "|":
splitted_second = splitted_second + i
#returns a list you can make it a variable if you need
return [splitted_first, splitted_second]
答案 4 :(得分:0)
您可以在浏览文字字符时使用两个列表。
您可以将小写,下划线和停止字符附加到一个列表,然后将大写,空格和管道字符附加到另一个列表。
最后返回作为字符串连接的每个列表的元组。
def splittext(txt):
slug, uppercase_letters = [], []
slug_symbols = {'_', '.'}
uppercase_symbols = {' ', '|'}
for letter in txt:
if letter.islower() or letter in slug_symbols:
slug.append(letter)
if letter.isupper() or letter in uppercase_symbols:
uppercase_letters.append(letter)
return ''.join(slug), ''.join(uppercase_letters)
txt="'lMiED)teD5E,_hLAe;Nm,0@Dli&Eg ,#4aI?rN@T§&e7#4E #<(S0A?<)NT8<0'"
assert splittext(txt) == ("lite_hemligare", "MEDDELANDE INTE SANT")