Beginner question: returning a boolean value from a function in Python
Solution 1
Ignoring the refactoring issues, you need to understand functions and return values. You don't need a global at all. Ever. You can do this:
def rps():
# Code to determine if player wins
if player_wins:
return True
return False
Then, just assign a value to the variable outside this function like so:
player_wins = rps()
It will be assigned the return value (either True or False) of the function you just called.
After the comments, I decided to add that idiomatically, this would be better expressed thus:
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()
This assigns the boolean value of player_wins
(inside the function) to the pw
variable outside the function.
Solution 2
Have your tried using the 'return' keyword?
def rps():
return True
matt
Currently interested in (at work) opensolaris, ZFS, low latency network design, and infiniband. At home, I'm playing with nginx, open source routing, and arduino involving leds and el wire. Experienced and or deadly in the arts of securing and administrating cisco/blade/juniper/voltaire switches, routers, and Windows+linux+unix networks.
Updated on November 13, 2020Comments
-
matt over 3 years
I'm trying to get this rock paper scissors game to either return a Boolean value, as in set
player_wins
to True or False, depending on if the player wins, or to refactor this code entirely so that it doesn't use a while loop. I'm coming from the sysadmin side of the world, so please be gentle if this is written in the wrong style. I have tried a few things, and I understand TIMTOWTDI, and would just like some input.Thanks.
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()
I'm trying to do something like this:
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"