Skip to main content
 首页 » 编程设计

python之Python 中全局语句的替代方法

2025年05月04日17Terrylee

我正在编写一个非常简单的轮盘模拟器,只专注于红/黑投注(基本上就像正面或反面的游戏)。

我遇到的问题是跨函数调用变量。

这是代码(我敢肯定它还有其他问题,但我现在主要关注这个问题):

import random 
 
# Defines initial amounts of money and losses 
money = 50 
losses = 0 
 
# Starts the sim 
def roulette_sim(): 
    print "How much do you want to bet?" 
    bet = int(raw_input("> "))    
    if bet > money: 
        bet_too_much() 
    else: 
        red_or_black() 
 
 
# Prevents one from betting more money than one has 
def bet_too_much(): 
    print "You do not have all that money. Please bet again."  
    raw_input("Press ENTER to continue> ") 
    roulette_sim() 
 
# Asks user to select red or black, starts the sim, modifies money/losses 
def red_or_black(): 
    print "OK, you bet %r" %  (bet) 
    print "Red or black?" 
    answer = raw_input("> ") 
    number = random.randint(1, 2) 
    if number == 1 and answer == "red": 
        print "You win!" 
        money += bet 
        print "You now have %r money" % (money) 
        print "Your losses are %r" % (losses) 
        replay() 
    elif number == 2 and answer == "black": 
        print "You win!" 
        money += bet 
        print "You now have %r money" % (money) 
        print "Your losses are %r" % (losses) 
        replay() 
    else: 
        print "You lost!" 
        money -= bet 
        losses += bet 
        print "You now have %r money" % (money) 
        print "Your losses are %r" % (losses) 
        replay() 
 
# Asks user whether he/she wants to play again 
def replay(): 
    print "Do you want to play again?" 
    play_again = raw_input("y/n> ") 
    if play_again == "y": 
        roulette_sim() 
    else: 
        print "OK, bye loser!" 
 
 
roulette_sim() 

因此,我得到了 NameError: global name 'bet' is not defined,我可以通过使用 global 来避免这种情况,但我不想诉诸于此。在 roulette_sim 中,除了使用 global 之外,我如何在其他函数中使用用户分配给它的值来调用这个变量?

我想同样的问题也适用于 money 变量。

我目前对 Python 有非常基础的了解,所以对于任何错误,我深表歉意。

谢谢

请您参考如下方法:

使用类:

import random 
 
class RouletteSim(object): 
    def __init__(self): 
        # Defines initial amounts of money and losses 
        self.money = 50 
        self.losses = 0 
 
    # Starts the sim 
    def roulette_sim(self): 
        print "How much do you want to bet?" 
        bet = int(raw_input("> ")) 
        if bet > self.money: 
            self.bet_too_much() 
        else: 
            self.red_or_black(bet) 
 
    # Prevents one from betting more money than one has 
    def bet_too_much(self): 
        print "You do not have all that money. Please bet again." 
        raw_input("Press ENTER to continue> ") 
        self.roulette_sim() 
 
    # Asks user to select red or black, starts the sim, modifies money/losses 
    def red_or_black(self, bet): 
        print "OK, you bet %r" %  (bet) 
        print "Red or black?" 
        answer = raw_input("> ") 
        number = random.randint(1, 2) 
        if number == 1 and answer == "red": 
            print "You win!" 
            self.money += bet 
            print "You now have %r money" % (self.money) 
            print "Your losses are %r" % (self.losses) 
            self.replay() 
        elif number == 2 and answer == "black": 
            print "You win!" 
            self.money += bet 
            print "You now have %r money" % (self.money) 
            print "Your losses are %r" % (self.losses) 
            self.replay() 
        else: 
            print "You lost!" 
            self.money -= bet 
            self.losses += bet 
            print "You now have %r money" % (self.money) 
            print "Your losses are %r" % (self.losses) 
            self.replay() 
 
    # Asks user whether he/she wants to play again 
    def replay(self): 
        print "Do you want to play again?" 
        play_again = raw_input("y/n> ") 
        if play_again == "y": 
            self.roulette_sim() 
        else: 
            print "OK, bye loser!" 
 
RouletteSim().roulette_sim()