2017-10-29 4 views
-2

次のコードを作成しましたが、残りのコードを正常に終了できないというエラーが発生しています。最初の文字だけが偽であることを検出し、他の文字では検出できません。

コードは次のとおりです。

def isvalid(userg, valid_c, size): 
'''(list, str, int) -> bool 
Given userg, a list of single character strings; 
valid_ch, a string; and size, an int; 
return True if every character in user_guess list is in 
valid_characters and if user_guess is of length guess_size. 
Return False otherwise. 
>>>isvalid(['A', 'B', 'C'], 'ABCDE', 3) 
True 
>>>isvalid(['Y', 'G', 'O', 'B'], 'YGOBPR', 4) 
True 
>>>isvalid(['X', 'G', 'O', 'B'], 'YGOBPR', 4) 
False 
>>>isvalid(['Y', 'G', 'O', 'B'], 'YGOBPR', 5) 
False 
>>>valid(['Y', 'G', 'O'], 'GOBPR', 4) 
False 
''' 
for char in userg: 
    if len(userg) == size and char in valid_c: 
     return True 
    else: 
     return False 

しかし、それだけでusergで非常に最初の文字がvalid_cでない場合はFalseを返すように動作します。たとえば、 'K'がvalid_cにないときは、最初の位置にないので、isvalid(['Y'、 'K'、 'O'、 'B']、 'YGOBPR'、4)はtrueを返します。 Yはそうです)ので、間違っている/間違っていると認識しません。私がisvalid(['K'、 'Y'、 'O'、 'B']、 'YGOBPR'、4)ならば、Kが最初であるため、Falseと認識します。誰でもこの助けてくれますか?私は他のことを試みたが、うまくいかなかった。ありがとう!

+2

'return'文は何をしていますか?もし条件が 'True'であれば' continue'し、* for *ループの終わりにすべての項目がチェックされた後に 'true True'を返すべきです。 –

+0

あなたがしたいのは、 'return len(userg)== sizeとall(charのuser_gでのchar)'です。それは実際にコメントの要件を直接翻訳したものです。 –

答えて

0

多分あなたは何かのような意味ですか?

def isvalid(userg, valid_c, size): 
    return len(userg) == size and all(char in userg for char in valid_c) 
+0

いいえ、正確ではありません。 – Daniel

関連する問題