我不太清楚为什么这不起作用,有人可以帮我解决这个问题吗?
def valid(user_guess, valid_characters, guess_size):
'''(list, str, int) -> bool
Given a list of single character strS and a str,
return True if every character is in the given string.
>>> (['A', 'C', 'B', 'E'], 'ACBE', 4)
True
>>> (['A', 'C', 'B', 'E'], 'ADFG', 4)
False
'''
for char in user_guess:
if char in valid_characters and len(user_guess) == guess_size:
return True
if char not in valid_characters and len(user_guess) != guess_size:
return Fal
答案 0 :(得分:2)
这是使用all
def valid(user_guess, valid_characters, guess_size):
return len(user_guess) == guess_size and all(c in valid_characters for c in user_guess)
答案 1 :(得分:1)
如果满足len(user_guess) == guess_size
条件,则仅在检查第一个return True
后触发char
。为了正确,请在此条件失败时返回False
,如果永远不会触发,则将True
返回到循环外。
此外,长度条件不需要在循环内进行评估。
答案 2 :(得分:0)
我不确定您希望此代码如何工作。但是,根据您的评论:
给定单个字符strS和str的列表,返回True 如果每个字符都在给定的字符串中。
我假设您只是想知道user_guess
中的所有字符(="每个字符")都在valid_characters
中。我会这样做:
return len(set(user_guess).difference(valid_characters)) == 0
目前尚不清楚guess_size
应该做什么。
答案 3 :(得分:-1)
这是有效猜测的许多可能方法之一
guesses = [(['A', 'C', 'B', 'E'], 'ACBE', 4),
(['A', 'C', 'B', 'E'], 'ADFG', 4)]
def checkguess(g):
chars = g[0]
valid = g[1]
guess_size = g[2]
if chars == list(valid) and len(chars) == guess_size:
return True
else:
return False
if __name__ == '__main__':
result = [checkguess(g) for g in guesses]
assert result == [True, False]