返回单个字符串列表中的字符

时间:2017-10-19 02:36:36

标签: python python-3.x

我不太清楚为什么这不起作用,有人可以帮我解决这个问题吗?

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

4 个答案:

答案 0 :(得分:2)

这是使用all

的更多Pythonic方式
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]