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