Python游戏中的函数不破不赢';不要继续下一个功能

Python游戏中的函数不破不赢';不要继续下一个功能,python,function,numbers,Python,Function,Numbers,对于一个类,我们必须制作一个游戏,其中一个人将输入一个上限整数和一个下限整数作为一个范围。然后从这两个数字之间选择一个随机数。然后,玩家猜一个数字,当你猜对数字时,游戏就结束了。在“我的范围”的函数中,我有一个循环,只有在您输入正确的范围时才会结束。然后它将清除控制台并继续游戏的猜测部分。问题是,一旦输入正确的范围,它将清除屏幕,然后执行循环的错误部分,使其无法继续。到目前为止,我编写的程序如下,我大约在2个月前开始编写Python **import time, os, random #The

对于一个类,我们必须制作一个游戏,其中一个人将输入一个上限整数和一个下限整数作为一个范围。然后从这两个数字之间选择一个随机数。然后,玩家猜一个数字,当你猜对数字时,游戏就结束了。在“我的范围”的函数中,我有一个循环,只有在您输入正确的范围时才会结束。然后它将清除控制台并继续游戏的猜测部分。问题是,一旦输入正确的范围,它将清除屏幕,然后执行循环的错误部分,使其无法继续。到目前为止,我编写的程序如下,我大约在2个月前开始编写Python

**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")