2010-11-12 12 views
8

Estoy intentando que este juego de tijeras de papel piedra devuelva un valor booleano, como en el conjunto player_wins en verdadero o falso, dependiendo de si el jugador gana, o para refactorizar este código por completo para que no utilice un ciclo while. Vengo del lado de sysadmin del mundo, así que sea amable si está escrito en el estilo incorrecto. He intentado algunas cosas, y entiendo TIMTOWTDI, y solo me gustaría alguna información.Pregunta para principiantes: devolver un valor booleano de una función en Python

Gracias.

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() 

que estoy tratando de hacer algo como esto:

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

¿Qué valor booleano se debe devolver para un empate? –

+0

Debido a que está dentro de un ciclo while, los vínculos solo te devuelven al principio. ¡REVANCHA! – matt

+0

Supongo que este no es un buen proyecto para obtener una comprensión adecuada de la programación. – matt

Respuesta

24

Ignorando los problemas de refactorización, necesita comprender las funciones y los valores devueltos. No necesitas un global en absoluto. Nunca. Usted puede hacer esto:

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

    return False 

Entonces, justo asignar un valor a la variable fuera de esta función, así:

player_wins = rps() 

se le asignará el valor de retorno (Verdadero o Falso) de la función acabas de llamar


Después de los comentarios, he decidido añadir que idiomáticamente, esto sería mejor expresa así:

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() 

Esto asigna el valor booleano de player_wins (dentro de la función) a la variable pw fuera del función.

+1

Ah, ya veo. Ya lo tengo, gracias. Actualizaré esta publicación para reflejar la solución. – matt

+2

Este código me duele los ojos ... debería ser 'return player_wins' –

+0

Claro, Rafe, pero eso no sería tan claro con fines ilustrativos. – syrion

2

que su tratado de utilizar la palabra clave 'retorno'?

def rps(): 
    return True 
Cuestiones relacionadas