gpt4 book ai didi

Python 3.x 短内存数字猜测(编程/数学)

转载 作者:太空宇宙 更新时间:2023-11-04 04:30:03 25 4
gpt4 key购买 nike

(这可能既是编程问题又是数学问题,但先发在这里。)

我制作了一个简单的程序,可以在计算机和自身之间玩猜谜游戏。它生成一个介于 0 和 100 之间的数字,然后从另一个函数中获得猜测。该程序可以运行但非常不精确,因为猜测函数只知道最后一次猜测以及它应该猜测更高还是更低。 (现在它只是在最后一次猜测和最低/最高界限之间随机化一个整数。)

最简单的解决方案是使用 if-else,但我更喜欢条件尽可能少的解决方案。

有没有办法让猜测函数在只知道最后一次猜测的情况下逐渐缩小猜测的宽度,是否应该猜测更高或更低以及猜测的最大和最小界限?

当前代码:

import random as rnd
def guess_me_computer(number = None, guess = 50, turns = 0, memory = []):
"""Guessing game between two computers.

Args:
number: Number to be guessed
guess: Guess made by computer
turns: How many guesses made so far
memory: List storing how many turns each run takes
"""
turns += 1

if number == None:
number = rnd.randint(0, 100)

if guess == number:
print("Correct! My number: {number} was guessed in {turns} tries!".format(number = number, turns = turns))
memory.append(turns) #Memory used in another testing function
return None
elif guess < number:
print("Wrong! Guess Higher!")
guess_me_computer(number = number, guess = guesser_computer(last_guess = guess, higher = True), turns = turns, memory = memory)
else:
print("Wrong! Guess Lower!")
guess_me_computer(number = number, guess = guesser_computer(last_guess = guess, higher = False), turns = turns, memory = memory)


def guesser_computer(last_guess = None, higher = None):
if higher:
return rnd.randint(last_guess, 100)
else:
return rnd.randint(0, last_guess)

非常欢迎任何关于问题本身的问题和/或对写作的批评。

最佳答案

虽然这对于学习递归来说不是一个大问题,但对于学习生成器,尤其是它们的 .send() 方法来说,这可能是一个有趣的问题。下面的生成器仍然只知道最后的猜测,但它也会从调用它的程序中得到提示,无论该猜测是太高还是太低:

from random import randint

def guess_me_computer(guesser):
number = randint(1, 100)
tries = 1
too_low = None
guess = next(guesser)

while True:
if guess == number:
print("Number: {} guessed in {} tr{}!".format(number, tries, ["ies", "y"][tries == 1]))
return

if guess < number:
print("Wrong! {} is too low! Guess Higher!".format(guess))
too_low = True
else:
print("Wrong! {} is too high! Guess Lower!".format(guess))
too_low = False

tries += 1
guess = guesser.send(too_low)

def guesser_computer(minimum=1, maximum=100):
while True:
guess = randint(minimum, maximum)
higher = yield guess

if higher:
minimum = guess + 1
else:
maximum = guess - 1

generator = guesser_computer()
guess_me_computer(generator)

关于Python 3.x 短内存数字猜测(编程/数学),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52832518/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com