Python 名称';x';是否未定义/全局变量?

Python 名称';x';是否未定义/全局变量?,python,Python,我正在学习用python编程,我遇到了这个问题:我试图做一个猜谜游戏,在尝试检查win条件时,函数无法识别输入变量,我确保使用以前的函数返回了该变量。所以我得到了“名字1 check_win_1() NameError:未定义名称“首次输入” 我没有粘贴整个代码,因为在测试它时,它在这个阶段返回了错误,所以我认为其余的代码对于这个特定的问题并不重要。我试着将var输入设置为全局的等等,但我认为我做得不正确。您的方法调用不正确。你应该这样调用你的函数 def check_win_1(first_

我正在学习用python编程,我遇到了这个问题:我试图做一个猜谜游戏,在尝试检查win条件时,函数无法识别输入变量,我确保使用以前的函数返回了该变量。所以我得到了“名字1 check_win_1() NameError:未定义名称“首次输入”
我没有粘贴整个代码,因为在测试它时,它在这个阶段返回了错误,所以我认为其余的代码对于这个特定的问题并不重要。我试着将var输入设置为全局的等等,但我认为我做得不正确。

您的方法调用不正确。你应该这样调用你的函数

def check_win_1(first_input):
    if first_input == ran_int:
        guesses_inc()
        print(f'BINGO!\nYou guessed correctly after {guesses} times.')
    elif (abs(ran_int - first_input) <= 10):
        guesses_inc()
        print('WARM!')
        ask2()
    elif first_input < 1 or first_input > 100:
        print('Out of bounds!')
        ask2()
    else:
        guesses_inc()
        print('COLD!')
        ask2()
first_input = ask()
check_win_1(first_input)
def check_win_1(第一次输入):
如果第一次输入==ran\u int:
猜谜公司
打印(答对了!\n您在{猜测}次后猜对了。“)
elif(abs(内部运行-第一次输入)100:
打印('超出范围!')
ask2()
其他:
猜谜公司
打印('COLD!')
ask2()
第一次输入=询问()
检查\u赢\u 1(第一个\u输入)

您的方法调用不正确。您应该像这样调用函数

def check_win_1(first_input):
    if first_input == ran_int:
        guesses_inc()
        print(f'BINGO!\nYou guessed correctly after {guesses} times.')
    elif (abs(ran_int - first_input) <= 10):
        guesses_inc()
        print('WARM!')
        ask2()
    elif first_input < 1 or first_input > 100:
        print('Out of bounds!')
        ask2()
    else:
        guesses_inc()
        print('COLD!')
        ask2()
first_input = ask()
check_win_1(first_input)
def check_win_1(第一次输入):
如果第一次输入==ran\u int:
猜谜公司
打印(答对了!\n您在{猜测}次后猜对了。“)
elif(abs(内部运行-第一次输入)100:
打印('超出范围!')
ask2()
其他:
猜谜公司
打印('COLD!')
ask2()
第一次输入=询问()
检查\u赢\u 1(第一个\u输入)

出现错误是因为您试图在某个地方(即在
检查\u win\u 1()
)使用
第一个\u输入

一种可能的、不推荐的解决方案是将变量限定为
global
,应该非常谨慎地使用

相反,建议使用函数参数,以便将代码封装在自包含的块中,例如:

def func(a, b):
    return a + b


x = func(10, 5)
而不是:

def func():
    global a, b
    return a + b

a = 10
b = 5

x = func()

对于您的客户来说,这可能意味着要做以下事情:

def check_win_1(first_input, ran_int):
    ...
并相应地使用它们,例如:

first_input = ask()
check_win_1(first_input, ran_int)
等等


编辑 按照上述原则,您的代码可能如下所示:

import random

MIN_VAL = 1
MAX_VAL = 100
WARM_LIMIT = 10


def ask_number(
        min_val=MIN_VAL,
        max_val=MAX_VAL):
    guess = None
    while guess is None:
        guess = int(input(f'Enter a number between {min_val} and {max_val}: '))
        if guess < min_val or guess > max_val:
            print('Out of bounds!')
            guess = None
    return guess


def check_guess(
        guess,
        target,
        num_guesses,
        warm_limit=WARM_LIMIT):
    if guess == target:
        print(f'BINGO!\nYou guessed correctly after {num_guesses} times.')
        return True
    else:
        if (abs(guess - target) <= warm_limit):
            print('WARM!')
        else:
            print('COLD!')
        return False


# : main
target = random.randint(MIN_VAL, MAX_VAL)
num_guesses = 0
won = False
while not won:
    guess = ask_number()
    num_guesses += 1
    won = check_guess(guess, target, num_guesses)
随机导入
最小值=1
最大值=100
温热极限=10
def ask_编号(
最小值=最小值,
最大值=最大值):
猜测=无
虽然猜测是没有的:
guess=int(输入(f'输入一个介于{min_val}和{max_val}之间的数字:'))
如果猜测<最小值或猜测>最大值:
打印('超出范围!')
猜测=无
返回猜测
你猜怎么着(
猜测
目标,,
我猜,
温限=温限):
如果guess==目标:
打印(答对了!\n您在{num_猜测}次后猜对了。“)
返回真值
其他:

如果(abs(guess-target)存在错误,因为您试图在某个地方(即内部
检查赢1()
)使用
第一次输入

一种可能的、不推荐的解决方案是将变量限定为
global
,应该非常谨慎地使用

相反,建议使用函数参数,以便将代码封装在自包含的块中,例如:

def func(a, b):
    return a + b


x = func(10, 5)
而不是:

def func():
    global a, b
    return a + b

a = 10
b = 5

x = func()

对于您的客户来说,这可能意味着要做以下事情:

def check_win_1(first_input, ran_int):
    ...
并相应地使用它们,例如:

first_input = ask()
check_win_1(first_input, ran_int)
等等


编辑 按照上述原则,您的代码可能如下所示:

import random

MIN_VAL = 1
MAX_VAL = 100
WARM_LIMIT = 10


def ask_number(
        min_val=MIN_VAL,
        max_val=MAX_VAL):
    guess = None
    while guess is None:
        guess = int(input(f'Enter a number between {min_val} and {max_val}: '))
        if guess < min_val or guess > max_val:
            print('Out of bounds!')
            guess = None
    return guess


def check_guess(
        guess,
        target,
        num_guesses,
        warm_limit=WARM_LIMIT):
    if guess == target:
        print(f'BINGO!\nYou guessed correctly after {num_guesses} times.')
        return True
    else:
        if (abs(guess - target) <= warm_limit):
            print('WARM!')
        else:
            print('COLD!')
        return False


# : main
target = random.randint(MIN_VAL, MAX_VAL)
num_guesses = 0
won = False
while not won:
    guess = ask_number()
    num_guesses += 1
    won = check_guess(guess, target, num_guesses)
随机导入
最小值=1
最大值=100
温热极限=10
def ask_编号(
最小值=最小值,
最大值=最大值):
猜测=无
虽然猜测是没有的:
guess=int(输入(f'输入一个介于{min_val}和{max_val}之间的数字:'))
如果猜测<最小值或猜测>最大值:
打印('超出范围!')
猜测=无
返回猜测
你猜怎么着(
猜测
目标,,
我猜,
温限=温限):
如果guess==目标:
打印(答对了!\n您在{num_猜测}次后猜对了。“)
返回真值
其他:

如果(abs(guess-target)您在最后一行中的
check_-win_1
之后可能缺少括号,那么您还没有定义
ask2()
方法,您在最后一行中的
check_-win_1
之后可能缺少括号您还没有定义
ask2()
方法也很好,谢谢!这很好!我没有存储函数返回的值,也没有在下一个函数上调用正确的参数!这很好!我没有存储函数返回的值,也没有在下一个函数上调用正确的参数