2017-12-21 6 views
1

Ich schrieb ein ziemlich einfaches Programm, das eine zufällige Zeichenfolge erstellt, fragt den Benutzer, eine Zeichenfolge einzugeben und zählt, wie viele Buchstaben er verpasst/getroffen. Es geht weiter, bis er die zufällige Zeichenfolge errät.Zu viele Daten zu verarbeiten

Aus irgendeinem Grund bekomme ich den Fehler: "zu viele Daten zu verarbeiten". Ich habe diesen Fehler nie zuvor gesehen und weiß nicht wirklich, was schief gelaufen ist und warum.

Ich würde gerne Ihre Meinung dazu erhalten. Hier ist der Code, den ich schrieb:

import random 
import string 
def cows_and_bulls(real_string, guess_string): 
    hits = 0 
    missed = 0 
    hits_set = [] 
    missed_set = [] 
    for index, letter in enumerate(guess_string): 
     if real_string[index] == letter: 
      hits +=1 
      hits_set.append(letter) 
     elif letter in real_string and letter not in hits_set: 
      missed +=1 
      missed_set.append(letter) 
    print(hits, missed) 
    return ("hits:" +str(hits), "missed:" +str(missed)) 

def main(): 
     random_string = ''.join([random.choice(string.ascii_letters) for n in 
           range(5)]) 
     guess_string = input("please enter a guess string") 
     if len(guess_string) != 5 or guess_string.isalpha == False: 
      print("please enter a new guess") 
      guess_string = input("please enter a guess string") 

     win = False 
     while win is not True: 
      hits,missed = cows_and_bulls(random_string, guess_string) 
      if hits == len(random_string): 
       print("you win!") 
       win = True 
       break 

if __name__ == '__main__': 
    main() 

print(cows_and_bulls("abcd", "abdz")) 
+0

Haben Sie versucht, zu debuggen? – hrust

+0

Ich versuchte, aber konnte nicht, weil das Programm sofort beendet .. –

+0

Was ist die Zeichenfolge, die Sie eingeben? –

Antwort

1

Sie müssen Ihre Hauptfunktion zu beheben.

So wie es aussieht, wird es nicht das Verhalten geben, das Sie wollen. Das Ausführen der Funktion, wie es jetzt ist, führt zu einer endlosen Schleife von Drucktreffern und Fehlschlägen, wenn die Länge der Schätzung 5 für die gleiche Schätzung ist (das Verhalten, das ich in einem Jupiter-Notizbuch erhielt). Abhängig von der genauen Umgebung, die Sie zum Ausführen verwenden, kann dies zu Problemen führen.

mit Haupt wie folgt aus:

def main(): 
     random_string = ''.join([random.choice(string.ascii_letters) for n in 
           range(5)]) 
     win = False 
     while win is not True: 

      guess_string = input("please enter a guess string") 
      if len(guess_string) != 5 or guess_string.isalpha == False: 
       print("please enter a new guess") 
       guess_string = input("please enter a guess string") 
      if len(guess_string) == 5: 
       hits,missed = cows_and_bulls(random_string, guess_string) 
       if hits == len(random_string): 
        print("you win!") 
        win = True 

Sollte das Problem beheben. Wenn Ihre Hauptfunktion so aussieht, fragen Sie jedes Mal nach Eingabe, wenn der Spieler nicht gewonnen hat und die Schleife nach dem Gewinn aufhört. Außerdem wird der Player aufgefordert, jedes Mal, wenn eine Schätzung falsch ist, neue Eingaben zu machen.

An meinem Ende behoben das Wesen in einer Endlosschleife des Druckens die Treffer und vermisst für die gleiche Schätzung.

1

Außerdem müssen Sie die Methode cows_and_bulls korrigieren. Wechsel:

return ("hits:" +str(hits), "missed:" +str(missed)) 

zu

return hits, missed 

Ohne Änderung im Einklang

if hits == len(random_string): 

Sie vergleichen String mit integer. Auch wenn Sie die Zeichenfolge erraten haben, haben Sie eine Endlosschleife, weil 'hits:5' == 5 False ist.