我正在使用python 3.4,我正在尝试制作一个递归猜谜游戏。游戏应该采用最小值和最大值,并且有一个魔法"数。游戏将在x和y的范围之间生成随机数。然后要求用户插入y表示“是”,表示太低,h表示太高。如果是'祝贺消息',则退出。如果它太低,取最小值x,然后加1,这将是新的最小值。 h的逻辑相同。然后重新生成随机数。我被困在哪里调用递归。
def recursive_guess(x,y,):
correct = False
while not correct:
print('I will guess a number y for yes, l for too low, h for too high')
guess = random.randrange(x, y)
print(guess)
anwser = input('y for yes l for low h for high')
if anwser == 'y':
print('Got it right')
correct = True
elif anwser == 'l':
guess = random.randrange(minVal + 1, maxVal)
elif anwser == 'h':
guess = random.randomrange(minVal, maxVal-1)
答案 0 :(得分:0)
让我们切换到高级伪代码并为您的变量提供更好的名称,因为我认为您已经深入了解语法细节并且无法全面了解您的算法你的脑袋。
def recursive_guess(lower_bound, upper_bound):
guess = random guess in range [lower_bound, upper_bound]
print guess
request user response
response = <get user response>
if guess was too high:
upper_bound = guess - 1
elif guess was too low:
lower_bound = guess + 1
else:
return guess
# assuming we reached this point without returning,
# we need to do a recursive call because guess was wrong
return recursive_guess(lower_bound, upper_bound)
在给出的代码中,您似乎已经开始使用递归方法,但是一旦您再次将猜测更新为新的随机值,您就会(潜意识地)切换到迭代方法。如果你在功能结束时做同样的事情,就像你在开始时做的那样,这可以告诉你,你可能已经应该已经递归了。
将递归看作简单地使您的任务稍微小一点,然后您已经完成了。在这种情况下,如果我们可以减小窗口大小(upper_bound - lower_bound
),那么我们就完成了我们的工作。只要我们有一个基本案例,递归就会从那里处理它。在这种情况下,基本案例正确猜测,在这种情况下我们立即返回。
答案 1 :(得分:0)
而不是guess = random.randrange(minVal + 1, maxVal)
,您应该更改minVal然后使用它,如下所示:
minVal = guess + 1
guess = random.randrange(minVal, maxVal)
否则,minVal和maxVal将不会关闭正确的数字; elif语句中的猜测每次都是相同的,因为minVal和maxVal实际上并没有改变。另外,我没有看到minVal和maxVal设置为x和y的位置。
编辑:不确定递归的位置。如果你想让这个函数递归,你可以把它从while循环中取出并让它自己调用,即recursive_guess(guess + 1, y)
而不是上面的行。 / p>