2016-11-16 6 views
0

ich ein Python-Programm zu schreiben versucht, die Kühe implementiert Bullen Spiel, hier ist mein Code:einfache Python Spiel nicht egal funktioniert, was

import random 
def cb(): 
    pc = random.sample('123456789',4) 
    cows = [] 
    bulls = [] 
    while True: 
    guess = input('please enter a 4 digit num: ') 
    cows = rmd(cows) 
    bulls = rmd(bulls) 
    if pc == guess: 
     print('You win!') 
     break 
    (cows.append(i) for i in pc if i in guess and guess.index(i) == pc.index(i)) 
    (bulls.append(i) for i in pc if i in guess and guess.index(i) != pc.index(i)) 
    print ('{} cows and {} bulls'.format(len(cows), len(bulls)) 
    continue 

Gerade der letzte Ansatz, den ich versuchte, bevor er aufgibt, bevor dass ich mehr als 50 Programme geschrieben habe und nichts funktionieren würde, würde es immer 0 Kühe 0 Bullen zurückgeben. Ich habe versucht für Schleifen, während rate! = Pc unter Hunderten von Ideen .. Nichts würde funktionieren.

rmd ist eine Funktion, die doppelte Elemente aus einer gegebenen Liste entfernt, indem sie in eine Menge konvertiert und diese Menge anschließend in eine Liste konvertiert und die endgültige Liste zurückgibt.

Es ist nur ein dummes Spiel, aber die Tatsache, dass nichts funktioniert, ist sehr deprimierend ..

+0

Verwenden Sie 'print()', um Werte in Variablen und einige Kommentare anzuzeigen, um zu sehen, was im Code passiert, wenn Sie es ausführen. – furas

Antwort

1

random.sample gibt eine Liste, so dass er nie auf die Zeichenfolge tritt gleich wird der Benutzer. Die Linien (cows.append(i)... und (bulls.append(i)... sind Generatoren, was bedeutet, dass sie nichts tun, außer und bis sie ausgewertet werden. Sie könnten sie technisch in List-Comprehensions umwandeln, indem Sie die umschließenden Klammern für eckige Klammern austauschen, aber Sie würden eine Liste für ihre Nebenwirkungen erstellen, was verpönt ist. Anstatt eine list.append in einem Generator oder Verständnis zu setzen, machen Sie ein Verständnis, das tatsächlich die Liste erstellt, die Sie wollen, wie sie es tun sollen. Darüber hinaus, da Sie nur die einzigartigen Elemente an erster Stelle wollen, gibt es keinen Grund, Listen zu irgendeinem Zeitpunkt zu verwenden.

Es gibt auch keinen Grund, Listen oder Sets zu erstellen, da Sie nur jede Instanz hochzählen möchten.

import random 

def cb(): 
    pc = ''.join(random.sample('123456789',4)) 
    while True: 
     guess = input('please enter a 4 digit num: ') 
     if pc==guess: 
      print ('You win!') 
      break 
     bulls = 0 
     cows = 0 
     for character in guess: 
      if character in pc: 
       if guess.index(character) == pc.index(character): 
        bulls += 1 
       else: 
        cows += 1 
     print(cows, 'cows and', bulls, 'bulls') 
0
  1. Verlieren Sie nicht Herz, zu Programmstart ist nicht immer einfach!
  2. Verwenden Sie print oft, um zu sehen, was in Ihren Variablen ist, würden Sie überrascht sein!
  3. random.sample('123456789',4) gibt eine Liste von 4 Buchstaben, kein 4 Buchstaben Wort zurück.
  4. input, im Gegensatz zu raw_input, versucht automatische Konvertierungen (zum Beispiel Eingabe von "1234" würde zu einem int führen) und einige halten es für eine schlechte Praxis. Verwenden Sie raw_input, um sicherzustellen, dass Sie eine Zeichenfolge erhalten.
  5. Aber wenn Sie einen int aus Ihrer Eingabe erhalten, und eine Liste von Strings (oder sogar eine Zeichenfolge, wenn Sie es richtig verbunden, "".join(random.sample....) verwenden wie sie ?!
  6. Schließlich wird die (... für _ in gleich _) Syntax ist eine Generatorsyntax.Google es, es ist wichtig zu verstehen - es ist eines der Kernkonstrukte in Python.Dieser Code wird nie ausgewertet werden, wie Sie es verwenden.Python neue Leute versuchen oft, die coole Syntax zu erzwingen, wo immer sie kann, auch wenn es keinen Sinn macht, Das ist viel schöner (IMO).

Code:

for index,i in enumerate(guess): 
    if i in guess: 
     if pc[index] == i: cows.append(i) 
     else:    bulls.append(i) 

Viel Glück! EDIT:

Ich sah jemand löste es für Sie - ich dränge Sie immer noch, über Generatoren zu lesen, und vielleicht eine Komplettlösung.

Verwandte Themen