2017-10-19 46 views
0

我不太清楚为什么这不起作用,谁能帮我解决这个问题?在单个字符串列表中返回字符

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

当'char'不在''valid_characters'而是'len(user_guess)== guess_size'时函数返回什么? –

+0

为什么'len(user_guess)== guess_size'和'len(user_guess)!= guess_size'在循环内部?这些变量不会改变! –

+0

对于纯粹的乐趣,尝试'有效(['E','T','W','Q'],'ADFG',4)' –

回答

1

如果len(user_guess) == guess_size条件满足的return True只检查第一char后触发。为了正确,当这种情况失败时返回False,并且如果从不触发则返回True

此外,长度条件不需要在循环内进行评估。

-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] 
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) 
+0

它仍然不起作用 – dg123

+0

它以什么方式不工作?错误信息,错误答案等 –

+0

当我测试它时,它不会给我任何东西。我没有得到一个布尔值。当我复制并粘贴我想测试的代码时,它只输出相同的代码 – dg123

0

我不知道究竟如何你想这个代码稍微更Python的方式工作。然而,根据您的评论:

鉴于单个字符的STR和STR,返回TRUE 的列表,如果每一个字符是给定的字符串英寸

我假设你只是想知道,所有字符(=“每个字符”)在user_guessvalid_characters。我会做这种方式:

return len(set(user_guess).difference(valid_characters)) == 0 

目前尚不清楚什么guess_size是应该做的。