我迫切需要帮助,我现在已经编码了一段时间但是已经有一段时间陷入困境了。
我的功能必须检查给定的单词是否包含特殊字符,以及没有特殊字符的单词长度是否大于3。
特殊字符是:()1234567890!?_ @#$%^& *。,'
如果单词中没有特殊字符,则该函数必须返回True,且没有特殊字符的单词长度大于3。
然而,这里的一个例外是允许特殊字符位于单词的末尾。
我的想法是将初始单词和特殊字符转换为列表,然后检查最后一个字符是否“特殊”。 (如果我从最后删除所有特殊字符,我不再需要担心它们,因为它们无论如何都是允许的。) 然后再次检查该单词是否包含特殊字符,如果是,则>返回False。 如果它不包含特殊字符,则len(list)是> 3然后返回True,否则:返回False(由于len(list)是< = 3。)
查看我的代码,我无法理解为什么我的测试失败了。
def check_word(word: str) -> bool:
symbols = "()1234567890!?_@#$%^&*.,'"
symbols_list = list(symbols)
word_list = list(word)
while word_list[-1] in symbols_list:
del word_list[-1]
for char in word_list:
if char in symbols_list:
return False
elif char not in symbols_list and len(word_list) > 3:
return True
else:
return False
持续失败的测试是:
print(check_word("te1234et1234")) # False (Mine returns True)
print(check_word("mar132gus")) # False (Mine returns True)
其他一切似乎都是有序的:
print(check_word("jaanus123")) # True
print(check_word("123sander")) # False
print(check_word("123joonas123")) # False
这些测试失败的原因是什么?我错过了什么?
// Edit2所以正如一位用户所指出的那样,我继续使用我的代码上的调试器,问题似乎是当我进入我的初始“for”循环时它只检查我的第一个字符list是一个特殊字符,如果整个列表中有一个特殊字符,那么是否有人可以引导我走上正确的轨道,如何让循环遍历整个列表以寻找特价?
答案 0 :(得分:2)
您不需要将字符串转换为列表,字符串是可迭代的:
def check_word(word: str) -> bool:
symbols = "()1234567890!?_@#$%^&*.,'"
end = len(word)
while word[end-1] in symbols:
end -= 1
if len(word[:end]) < 3:
return False
for char in word[:end]:
if char in symbols:
return False
return True
def tests():
assert check_word("jaanus123") is True
assert check_word("123sander") is False
assert check_word("123joonas123") is False
assert check_word("te1234et1234") is False
assert check_word("mar132gus") is False
print("***all tests pass***")
tests()
***all tests pass***
答案 1 :(得分:0)
试试这个
def check_word(word):
symbols = list("()1234567890!?_@#$%^&*.,'")
word_list = list(word)
while word_list[-1] in symbols:
word_list.pop()
print word_list
temp="".join(word_list)
actuallength=0
for i in temp:
if i in symbols:
return False
else:
actuallength+=1
if (actuallength >3):
return True
else:
return False
<强>输出强>
>>> check_word("jaanus123")
['j', 'a', 'a', 'n', 'u', 's']
True
>>> check_word("123sander")
['1', '2', '3', 's', 'a', 'n', 'd', 'e', 'r']
False
>>> check_word("123joonas123")
['1', '2', '3', 'j', 'o', 'o', 'n', 'a', 's']
False
>>> check_word("te1234et1234")
['t', 'e', '1', '2', '3', '4', 'e', 't']
False
>>> check_word("mar132gus")
['m', 'a', 'r', '1', '3', '2', 'g', 'u', 's']
False
>>>
答案 2 :(得分:-1)
['m', 'a', 'r', '1', '3', '2', 'g', 'u', 's']
中的第一个字符是m
,它不在symbol_list中,整个列表长度为9,因此函数返回True。
所以问题在于这句话len(word_list) > 3
,长度不是没有特殊字符的单词