2017-10-19 1 views
0

Ich bin mir nicht ganz sicher, warum das nicht funktioniert, kann mir bitte jemand helfen, dies zu beheben?Zurückgegebene Zeichen in einzelnen String-Listen

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

Was sollte die Funktion zurückgeben, wenn 'char'" nicht in "' valid_characters'' sondern 'len (user_guess) == guess_size' steht? –

+0

Warum 'len (user_guess) == guess_size' und' len (user_guess)! = Guess_size' sind innerhalb der Schleife? Diese Variablen ändern sich nicht! –

+0

Für reinen Spaß, versuchen Sie 'gültig ([' E ',' T ',' W ',' Q '],' ADFG ', 4) ' –

Antwort

1

Wenn die len(user_guess) == guess_size Bedingung erfüllt ist, die return True auslöst, nachdem nur die ersten char überprüfen. Geben Sie für die Korrektheit False zurück, wenn diese Bedingung fehlschlägt, und geben Sie True außerhalb der Schleife zurück, wenn dies nie ausgelöst wird.

Auch die Längenbedingung muss nicht innerhalb der Schleife ausgewertet werden. Diese

-1

ist eine von vielen Möglichkeiten, um gültig die Vermutungen

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

Hier ist ein wenig mehr Pythonic Weise all mit

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

Es funktioniert immer noch nicht aus irgendeinem Grund – dg123

+0

In welcher Weise ist es funktioniert nicht? Fehlermeldung, falsche Antwort, etc –

+0

Es gibt mir nichts, wenn ich es teste. Ich bekomme keinen Boolean. Wenn ich den Code, den ich testen möchte, kopiere und einfüge, wird nur derselbe Code ausgegeben. – dg123

0

Ich bin nicht sicher genau, wie Sie diesen Code wollen Arbeit. Allerdings basiert auf Ihrem Kommentar:

eine Liste der einzelnen Zeichen strS angegeben und str, return true wenn jedes Zeichen in der angegebenen String- ist.

Ich nehme an, Sie einfach wissen wollen, dass alle Zeichen (= "jedes Zeichen") in user_guess in valid_characters sind. Ich würde es auf diese Weise tun:

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

Es ist nicht klar, was guess_size tun soll.

Verwandte Themen