功能无法更改变量

时间:2017-10-25 19:15:11

标签: python

我正在尝试用商店制作一个全面的猜谜游戏,你可以用硬币买东西。但我有一个功能,应该给用户一定数量的硬币,这取决于他们猜测数量的尝试次数。但是,当我有一个名为“硬币”的变量时,当玩家获得该数字时,我将硬币添加到“硬币”中,它实际上并没有添加硬币。当我打印'硬币'时它仍然告诉我0.我知道这很混乱,但我只是想解决这个问题。我正在使用带有python 3的mac,并使用两个文件,一个用于主代码,另一个用于函数。你知道我哪里出错吗?

主要代码:

from guessing_functions import guess_game, guess_home

home = False
attempt = 0
coins = 0
print ("Atemps:Coins, 10:5, 7:10, 5:20, 3:40, 1:100 ")

guess_game(coins, attempt)

while not home:
    guess_home(coins)

功能:

import random
def guess_game(coins, attempt):
    print ("This is a guessing game. ")
    found = False
    num = random.randint(1, 100)
    while not found:
        userGuess = input('Your Guess: ') ; userGuess = int(userGuess)
        if userGuess == num:
            print ("You got it!")
            found = True
        elif userGuess > num:
            print ("Guess Lower!")
        else:
            print ("Guess Higher")

        attempt += 1

        if attempt == 1 and found == True:
            print ("You won 100 coins!")
            coins += 100
        elif attempt == 2 and found == True:
            print ("You won 40 coins")
            coins += 40
        elif attempt == 3 and found == True:
            print ("You won 40 coins")
        elif attempt == 4 and found == True:
            print ("You won 20 coins")
            coins += 20
        elif attempt == 5 and found == True:
            print ("You won 20 coins")
            coins += 20
        elif attempt == 6 and found == True:
            print ("You won 10 coins")
            coins += 10
        elif attempt == 7 and found == True:
            print ("You won 10 coins")
            coins += 10
        elif attempt == 8 and found == True:
            print ("You won 5 coins")
            coins += 5
        elif attempt == 9 and found == True:
            print ("You won 5 coins")
            coins += 5
        elif attempt == 10 and found == True:
            print ("You won 5 coins")
            coins += 5

3 个答案:

答案 0 :(得分:1)

您的功能在其本地范围内使用coins为了让功能更改外部范围(全局)的值您需要明确指出的coins变量。

在更改global coins值之前,在您的函数中添加coins

coins = 0

def f():
    global coins
    coins = 5

f()
print coins
# 5

或者,另一种方法是从该函数返回硬币值,并调用您的函数coins = guess_game(attempt)

以下是一些有用的resource for this subject

答案 1 :(得分:0)

您应该从函数中返回硬币数量并将其分配给def guess_game(coins, attempt): ... # code to determine coin amount return coins coins = guess_game(coins, attempt)

$.confirm({
    title: 'testing',
    content: 'this has two static buttons',
    buttons: {
        confirm: function () {
        },
        cancel: function () {
        },
    }
});

Defining Functions

答案 2 :(得分:0)

要使其正常运行,您只需将guess_game添加到coins = guess_game(coins, attempt)函数的末尾,并将主代码中返回的值收集为import random def guessing_game(coins): print("This is a guessing game. ") attempts = 0 number = random.randint(1, 100) user_guess = -number while user_guess != number: user_guess = int(input("Your Guess: ")) if user_guess > number: print("Guess Lower!") elif user_guess < number: print("Guess Higher") else: print("You got it!") if attempts == 1: winnings = 100 elif attempts in [2, 3]: winnings = 40 elif attempts in [4, 5]: winnings = 20 elif attempts in [6, 7]: winnings = 10 elif attempts in [8, 9, 10]: winnings = 5 else: winnings = 0 print("You won {} coins!".format(winnings)) return coins + winnings attempts += 1 。但是,如果您愿意,可以稍微简化代码:

from guessing_functions import guessing_game

coins = 0
print("Starting balance: {} coins".format(coins))

print ("Winnings vs. Attempts: 10:5, 7:10, 5:20, 3:40, 1:100")
coins = guessing_game(coins)

print("Current balance: {} coins".format(coins))

主要代码为:

Starting balance: 0 coins
Winnings vs. Attempts: 10:5, 7:10, 5:20, 3:40, 1:100
This is a guessing game.
Your Guess: 50
Guess Lower!
Your Guess: 25
Guess Higher
Your Guess: 37
Guess Higher
Your Guess: 44
Guess Higher
Your Guess: 47
Guess Lower!
Your Guess: 46
You got it!
You won 20 coins!
Current balance: 20 coins

样本运行的输出如下:

BufferedReader buffReader = Files.newBufferedReader(Paths.get(fileName), getCorrectCharsetToApply());