2017-10-31 5 views
0

1) Schreiben Sie eine Funktion Gewinner, der drei String-Argumente dauert. Die ersten beiden Argumente repräsentieren die Folgen von Münzwürfen, die von den beiden Spielern eines Penney-Ante-Spiels gewählt wurden. Das dritte Argument ist die Reihenfolge der Ergebnisse, die erzielt wurde, wenn eine Münze wiederholt effektiv geworfen wurde. Die Funktion muss den Wert 1 zurückgeben, wenn die erste gewählte Sequenz (erstes Argument) das Spiel gewinnt, der Wert 2, wenn die zweite gewählte Sequenz (zweites Argument) das Spiel gewinnt, und der Wert 0, wenn keine der Sequenzen gewinnt, weil keiner von ihnen gewinnt wurde in der Abfolge von Münzwürfen als drittes Argument beobachtet. Wenn die ersten beiden Argumente identisch sind, muss ein AssertionError ausgelöst werden, wobei die Nachrichtensequenzen nicht gleich sein dürfen. Falls die ersten beiden Argumente nicht die gleiche Länge haben, muss ein AssertionError ausgelöst werden, wobei die Nachrichtensequenzen die gleiche Länge haben müssen.Python: Wie oft erscheint eine Zeichenfolge in einer anderen Zeichenfolge

Problem: meine Codes nicht zum Beispiel in allen Fällen funktionieren: winnaar ('KKK', 'MKK', 'KMKMKKKKMKKKMMMMKMKK')

richtiges Ergebnis: 2 mit meinem Code ist das Ergebnis: 1

def winnaar(seq1, seq2, seq3): 

    """ 
    >>> winnaar('KKK', 'MKK', 'KMKMKKKKMKKKMMMMKMKK') 
    2 
    >>> winnaar('MKM', 'MMK', 'KMKMKKKKMKKKMMMMKMKK') 
    1 
    >>> winnaar('MKK', 'KKM', 'KKKKKKKKKKKKKKKKKKKK') 
    0 
    >>> winnaar('MKK', 'MKK', 'KKKKKKKKKKKKKKKKKKKK') 
    Traceback (most recent call last): 
    AssertionError: reeksen mogen niet gelijk zijn 
    >>> winnaar('MKKM', 'MKK', 'KKKKKKKKKKKKKKKKKKKK') 
    Traceback (most recent call last): 
    AssertionError: reeksen moeten zelfde lengte hebben 
    """ 


    if seq3.find(seq1) > seq3.find(seq2): 
     return 1 

    if seq3.find(seq1) < seq3.find(seq2): 
     return 2 

    if seq1 and seq2 not in seq3: 
     return 0 

    assert (seq1) == (seq2), "ongeldig serienummerreeksen mogen niet gelijk zijn" 
    assert len(seq1) != len(seq2), "reeksen moeten zelfde lengte hebben" 
+5

Bitte teilen Sie dies in zwei verschiedene Fragen auf. – glibdud

+0

Wie bei der ersten Frage - sieht so aus, als müssten Sie '>' und '<' Operatoren umdrehen. Auch ist diese eine 'seq1 und seq2 nicht in seq3' nicht korrekt, da sie wie '(seq1) und (seq2 nicht in seq3)' ausgewertet würde. –

Antwort

0

Dieses für Problem # 1 helfen kann:

# [::-1] --> This means reverse string 
seq3 = seq3[::-1] # The reason I reverse strings is because 
seq1 = seq1[::-1] # index() gives you the first occurence 
seq2 = seq2[::-1] # the string 

if seq1 not in seq3 or seq2 not in seq3: 
    return 0 
if seq1 > seq2: 
    return 1 
if seq1 < seq2: 
    return 2 

um alle anderen, die helfen will, können die Probleme hier über sein: https://dodona.ugent.be/en/exercises/406642900/

+0

Ich glaube nicht, dass dies helfen könnte. Es gibt immer noch die falsche Lösung. – Lien

Verwandte Themen