(Это может быть как проблема программирования, так и математическая проблема, но публиковать здесь сначала.)
Я создал простую программу, которая играет в угадайку между компьютером и самим собой.Он генерирует число от 0 до 100 включительно, а затем получает догадки от другой функции.Программа работает, но очень неточна, потому что функция угадывания знает только последнее предположение, и должно ли оно угадываться выше или ниже.(Прямо сейчас он просто рандомизирует int между последним предположением и самой низкой / самой высокой границей.)
Самое простое решение было бы с 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)
Любые вопросы о самом вопросе и / или критике в отношении написания приветствуются.