Python游戏中的函数不破不赢';不要继续下一个功能
对于一个类,我们必须制作一个游戏,其中一个人将输入一个上限整数和一个下限整数作为一个范围。然后从这两个数字之间选择一个随机数。然后,玩家猜一个数字,当你猜对数字时,游戏就结束了。在“我的范围”的函数中,我有一个循环,只有在您输入正确的范围时才会结束。然后它将清除控制台并继续游戏的猜测部分。问题是,一旦输入正确的范围,它将清除屏幕,然后执行循环的错误部分,使其无法继续。到目前为止,我编写的程序如下,我大约在2个月前开始编写PythonPython游戏中的函数不破不赢';不要继续下一个功能,python,function,numbers,Python,Function,Numbers,对于一个类,我们必须制作一个游戏,其中一个人将输入一个上限整数和一个下限整数作为一个范围。然后从这两个数字之间选择一个随机数。然后,玩家猜一个数字,当你猜对数字时,游戏就结束了。在“我的范围”的函数中,我有一个循环,只有在您输入正确的范围时才会结束。然后它将清除控制台并继续游戏的猜测部分。问题是,一旦输入正确的范围,它将清除屏幕,然后执行循环的错误部分,使其无法继续。到目前为止,我编写的程序如下,我大约在2个月前开始编写Python **import time, os, random #The
**import time, os, random
#The beginning where you enter a range
def game_loop():
got_an_int = False
while got_an_int == False:
user_input1 = input("Enter the upper bound integer of the range: ")
user_input2 = input('Enter the lower bound integer of the range: ')
try:
user_input1 = int(user_input1)
user_input2 = int(user_input2)
print("Good job, that is a correct range.")
got_an_int = True
clear()
break
except:
print("That is not a correct range. Try again.")
#To continue after entering a correct range
def clear():
time.sleep(3)
os.system('clear')
time.sleep(1)
game_begin()
#Random Number Generator
def random_num(a,b):
random.randint(user_input1,user_input2)
#Where you begin the game
def game_begin():
guess_right = False
random_num = random_num(user_input1,user_input2)
while random_num != guess_right:
guess = input('Guess an integer in your range: ')
total_guess = [] + 1
try:
guess = int(guess)
if random_num > guess:
print("Too Low.")
guess_right = False
if random_num < guess:
print('Too High.')
guess_right = False
guess = int(guess)
if random_num == guess:
print("You got it! Good job.")
guess_right = True
the_end()
except:
print("That is not an int. Try again")**
**导入时间、操作系统、随机
#输入范围的起点
def game_loop():
得到一个int=False
当获得\u an\u int==False时:
用户_input1=input(“输入范围的上限整数:”)
user_input2=input('输入范围的下限整数:')
尝试:
用户输入1=int(用户输入1)
用户输入2=int(用户输入2)
打印(“干得好,这是一个正确的范围。”)
得到一个int=True
清除()
打破
除:
打印(“该范围不正确。请重试。”)
#在输入正确的范围后继续
def clear():
时间。睡眠(3)
操作系统(“清除”)
时间。睡眠(1)
游戏开始
#随机数发生器
def随机数(a、b):
random.randint(用户输入1,用户输入2)
#你从哪里开始比赛
def game_begin():
猜得对=错
随机数=随机数(用户输入1,用户输入2)
而随机数!=猜对了:
guess=input('猜测范围内的整数:')
总猜测=[]+1
尝试:
猜测=int(猜测)
如果随机数>猜测:
打印(“太低”)
猜得对=错
如果随机数<猜测:
打印('太高')
猜得对=错
猜测=int(猜测)
如果random_num==猜测:
打印(“明白了!干得好。”)
猜对了
(完)
除:
打印(“这不是整数。请重试”)**
您有多个问题,但最突出的问题是以下几方面的组合:
random_num = random_num(user_input1, user_input2)
首先,此行将random\u num
符号重新分配为调用random\u num
的结果。在这一行发生之后,以后对random_num
的任何调用都将不起作用,因为函数已“消失”。其次,user\u input1
和user\u input2
都不在game\u begin
函数的范围内(它们属于game\u循环
函数)
这两个问题都是隐藏的,因为您使用的是“裸”例外:
您应该只捕获您期望的异常并适当地处理它们,或者使其不会发生这些异常
最后,我能够让它主要与以下内容一起工作。评论中提到了我遇到的其他问题
import time, os, random
def game_loop():
got_an_int = False
while got_an_int == False:
user_input1 = input("Enter the upper bound integer of the range: ")
user_input2 = input('Enter the lower bound integer of the range: ')
try:
user_input1 = int(user_input1)
user_input2 = int(user_input2)
print("Good job, that is a correct range.")
got_an_int = True
clear()
# Move game_begin call here and use parameters, so that randint call works
game_begin(user_input1, user_input2)
break
except:
print("That is not a correct range. Try again.")
def clear():
time.sleep(3)
os.system('clear')
time.sleep(1)
# Remove this - not needed
# def random_num(a,b):
# random.randint(user_input1,user_input2)
def game_begin(in1, in2):
guess_right = False
# No longer overwriting variable/func symbol
# Also, reverse order since range is taken Highest first then Lowest
random_num = random.randint(in2, in1)
# Initialize total_guess to 0
total_guess = 0
while random_num != guess_right:
guess = input('Guess an integer in your range: ')
# Can't add list and ints. I assume you wanted to keep a running total?
# Lists aren't how you would do that.
total_guess += 1
try:
guess = int(guess)
if random_num > guess:
print("Too Low.")
guess_right = False
if random_num < guess:
print('Too High.')
guess_right = False
guess = int(guess)
if random_num == guess:
print("You got it! Good job.")
guess_right = True
# This function doesn't exist, so the loop won't ever actually end
# NameError exception is raised
the_end()
except:
print("That is not an int. Try again")
导入时间、操作系统、随机
def game_loop():
得到一个int=False
当获得\u an\u int==False时:
用户_input1=input(“输入范围的上限整数:”)
user_input2=input('输入范围的下限整数:')
尝试:
用户输入1=int(用户输入1)
用户输入2=int(用户输入2)
打印(“干得好,这是一个正确的范围。”)
得到一个int=True
清除()
#移动游戏\u在此处开始调用并使用参数,以便randint调用工作
游戏开始(用户输入1,用户输入2)
打破
除:
打印(“该范围不正确。请重试。”)
def clear():
时间。睡眠(3)
操作系统(“清除”)
时间。睡眠(1)
#删除此选项-不需要
#def随机数(a、b):
#random.randint(用户输入1,用户输入2)
def游戏开始(第1步,第2步):
猜得对=错
#不再覆盖变量/func符号
#另外,由于范围先取最高值,然后取最低值,所以顺序相反
random_num=random.randint(in2,in1)
#将总猜测初始化为0
总数=0
而随机数!=猜对了:
guess=input('猜测范围内的整数:')
#无法添加列表和整数。我猜你想保持一个连续的总数?
#清单并不是你要怎么做的。
总猜测+=1
尝试:
猜测=int(猜测)
如果随机数>猜测:
打印(“太低”)
猜得对=错
如果随机数<猜测:
打印('太高')
猜得对=错
猜测=int(猜测)
如果random_num==猜测:
打印(“明白了!干得好。”)
猜对了
#此函数不存在,因此循环不会真正结束
#引发NameError异常
(完)
除:
打印(“这不是整数。请重试”)
在中,而随机数!=猜对了:
您将数字与真/假进行比较,这毫无意义。你应该检查而猜测正确为假:
或更短的而不是猜测正确:
最终而随机数!=猜:
然后你就不需要猜了。
猜对了。你在的末尾()有什么内容?
你的输入是什么?我刚刚测试了它并运行了它,假设您给出了上限(大数字),然后给出了下限(比前面的数字小)。如果您以另一种方式提供输入(小数字,然后大数字),那么是的,您会看到这种情况发生,因为random.randint(…)
将抛出一个ValueError,该错误被裸露的try…隐藏,除了。如果删除try/excepts
(或使其更具体),则生成的回溯将告诉您哪里出了问题,哪里出了问题。
import time, os, random
def game_loop():
got_an_int = False
while got_an_int == False:
user_input1 = input("Enter the upper bound integer of the range: ")
user_input2 = input('Enter the lower bound integer of the range: ')
try:
user_input1 = int(user_input1)
user_input2 = int(user_input2)
print("Good job, that is a correct range.")
got_an_int = True
clear()
# Move game_begin call here and use parameters, so that randint call works
game_begin(user_input1, user_input2)
break
except:
print("That is not a correct range. Try again.")
def clear():
time.sleep(3)
os.system('clear')
time.sleep(1)
# Remove this - not needed
# def random_num(a,b):
# random.randint(user_input1,user_input2)
def game_begin(in1, in2):
guess_right = False
# No longer overwriting variable/func symbol
# Also, reverse order since range is taken Highest first then Lowest
random_num = random.randint(in2, in1)
# Initialize total_guess to 0
total_guess = 0
while random_num != guess_right:
guess = input('Guess an integer in your range: ')
# Can't add list and ints. I assume you wanted to keep a running total?
# Lists aren't how you would do that.
total_guess += 1
try:
guess = int(guess)
if random_num > guess:
print("Too Low.")
guess_right = False
if random_num < guess:
print('Too High.')
guess_right = False
guess = int(guess)
if random_num == guess:
print("You got it! Good job.")
guess_right = True
# This function doesn't exist, so the loop won't ever actually end
# NameError exception is raised
the_end()
except:
print("That is not an int. Try again")