Beginner question: returning a boolean value from a function in Python

128,588

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
Share:
128,588
matt
Author by

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, 2020

Comments

  • matt
    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"