2014-05-23 41 views
1

下面的代碼*,用Python編寫,用codeskulptor編譯,不會在score()函數中增加全局變量c_score和p_score,而是增加了它的層數。爲什麼c_score變量和p_score變量在應該只增加一個分數時不可避免地增加?

*忽略任何可能會出現的格式錯誤,代碼編譯得很好,它只是不按預期工作的函數。

import random 
import simplegui #graphic library 

'''Following variables are all global variables 
which are used in various capacities throughout the program. ''' 

message = "Welcome to Stone, Paper, Scissors" 
c_message = "Computer is waiting for you to begin" 
w_message = "The game hasn't begun yet" 
number = 0 
c_number = 0 
c_score = 0 
p_score = 0 

'''First of the many helper functions, simulates computer 
choice and prints relevant message in GUI window''' 

def comp_choice(): 
    global c_number #Calling global variable 
    global c_message 
    c_number = random.randrange(1,4) #'random' function 
    if c_number == 1: 
    c_message = "Computer chose Rock" 
    elif c_number == 2: 
    c_message = "Computer chose Paper" 
    elif c_number == 3: 
    c_message = "Computer chose scissors" 
    return c_message 
def score(): 
    global c_score 
    global p_score 
    global number 
    global c_number 
    difference = number - c_number 
    if difference == -1 or difference == 2: 
    c_score += 1 
    elif difference == 1 or difference == -2: 
    p_score += 1 
    return str(p_score) + '  ' + str(c_score) 


#Functions which code user choice buttons 
def rock(): 
    global message #calls for global variable 
    global number 
    number = 1 
    message = "You chose Rock" 
    '''This function call here is used to stimulate each 
round, the one following this applies the logic 
of the original game to determine and give results.''' 
    comp_choice() 
    game_logic() 

def paper(): 
    global number 
    global message 
    number = 2 
    message = "You chose Paper" 
    comp_choice() 
    game_logic() 

def scissors(): 
    global number 
    global message 
    number = 3 
    message = "You chose Scissors" 
    comp_choice() 
    game_logic() 

# Heart of the game 
def game_logic(): 
    global number 
    global c_number 
    global w_message 
    difference = number - c_number 
    if difference == -1 or difference == 2: 
    w_message = "Computer Wins!" 
    elif difference == 1 or difference == -2: 
    w_message = "Player Wins!" 
    else: 
    w_message = 'Player and Computer Tie' 


def draw(canvas): 
    canvas.draw_text("Player's choice: %s" % message, [0,100], 30, "Red") 
    canvas.draw_text("Computer's choice: %s" % c_message, [0,125], 30, "Green") 
    canvas.draw_text(w_message, [0,150], 30, "Black") 
    canvas.draw_text(score(), [0,75], 30, "Black") 

'''Following code registers buttons and their functions, it also creates the playing window.''' 
frame = simplegui.create_frame("Home", 700, 200) 
frame.set_canvas_background('White') 
button1 = frame.add_button("Rock", rock, 100) 
button2 = frame.add_button("Paper", paper, 100) 
button3 = frame.add_button("Scissors", scissors, 100) 
frame.set_draw_handler(draw) 
frame.start() 

回答

1

問題isn't in your score function。這工作「正確」。問題在於,每次需要繪製GUI時都要調用score()

而不是調用score(),就像你在w_message上面做的一樣。 game_logic()函數設置了一個score字符串。

作爲便箋,您應該重新考慮您的代碼結構。使用global只能真正使用,如果你到;否則,你應該使用參數。