2010-11-12 11 views
8

Próbuję uzyskać tę grę nożyczek z papieru skalnego, aby zwrócić wartość logiczną, jak w zestawie player_wins na wartość Prawda lub Fałsz, w zależności od tego, czy gracz wygra, lub aby całkowicie skorygować ten kod, aby nie używał pętli while. Pochodzę z sysadminowej strony świata, więc proszę, bądźcie łagodni, jeśli jest napisane w niewłaściwym stylu. Próbowałem kilku rzeczy i rozumiem TIMTOWTDI, i chciałbym po prostu trochę danych wejściowych.Pytanie początkujące: zwracanie wartości boolowskiej z funkcji w Pythonie

Dzięki.

import random 

global player_wins 
player_wins=None 

def rps(): 

    player_score = 0 
    cpu_score = 0 

    while player_score < 3 and cpu_score < 3: 

     WEAPONS = 'Rock', 'Paper', 'Scissors' 

     for i in range(0, 3): 
      print "%d %s" % (i + 1, WEAPONS[i]) 

     player = int(input ("Choose from 1-3: ")) - 1 
     cpu = random.choice(range(0, 3)) 

     print "%s vs %s" % (WEAPONS[player], WEAPONS[cpu]) 
     if cpu != player: 
      if (player - cpu) % 3 < (cpu - player) % 3: 
      player_score += 1 
      print "Player wins %d games\n" % player_score 
      else: 
      cpu_score += 1 
      print "CPU wins %d games\n" % cpu_score 
     else: 
      print "tie!\n" 
rps() 

Próbuję zrobić coś takiego:

print "%s vs %s" % (WEAPONS[player], WEAPONS[cpu]) 
    if cpu != player: 
     if (player - cpu) % 3 < (cpu - player) % 3: 
     player_score += 1 
     print "Player wins %d games\n" % player_score 
     if player_score == 3: 
      return player_wins==True 
     else: 
     cpu_score += 1 
     print "CPU wins %d games\n" % cpu_score 
     if cpu_score == 3: 
      return player_wins==False 
    else: 
     print "tie!\n" 
+1

Jaka wartość boolowska powinna zostać zwrócona dla remisu? –

+0

Ponieważ jest wewnątrz pętli, więzi po prostu zrzucają cię z powrotem na początku. REWANŻ! – matt

+0

Podejrzewam, że nie jest to dobry projekt, aby uzyskać właściwe zrozumienie programowania? – matt

Odpowiedz

24

Ignorując problemy z refaktoryzacją, należy zrozumieć funkcje i zwracane wartości. Nie potrzebujesz w ogóle globalnego. Zawsze. Można to zrobić:

def rps(): 
    # Code to determine if player wins 
    if player_wins: 
     return True 

    return False 

Potem tylko przypisać wartość zmiennej poza tą funkcję tak:

player_wins = rps() 

To będzie przypisany zwracanej wartości (prawda lub fałsz) funkcji właśnie zadzwoniłeś.


Po komentarzach, postanowiłem dodać, że idiomatically, to byłoby lepiej wyrażony następująco:

def rps(): 
    # Code to determine if player wins, assigning a boolean value (True or False) 
    # to the variable player_wins. 

    return player_wins 

pw = rps() 

ta przypisuje wartość logiczną player_wins (wewnątrz funkcji) do zmiennej pw zewnątrz funkcjonować.

+1

Ah, widzę teraz. Dostałem to, dziękuję. Zaktualizuję ten post, aby odzwierciedlić rozwiązanie. – matt

+2

Ten kod rani moje oczy ... powinien to być 'return player_wins' –

+0

Oczywiście, Rafe, ale nie byłoby to tak jasne dla celów ilustracyjnych. – syrion

2

Wyraź swoją próbował za pomocą słowa kluczowego 'powrót'?

def rps(): 
    return True 
Powiązane problemy