Новичок Python (3.7) здесь. Эта игра в угадайку дает подсказки по дальности:
ColdWarmHotВ зависимости от того, насколько близок к ответу игрок.
Проблема: как добавить дополнительные 3 дополнительные подсказки:
Colder
Warmer
Hotter
Colder используется, если следующее предположение находится дальше от ответа.Warmer используется, если следующее предположение ближе к ответу.Hotter используется вместо Warmer, если он находится в диапазоне Hot.
Первое предположение дает подсказки диапазона Cold, Warm или Hot.
Последующие догадки будут давать дополнительные подсказки Colder или Warmer/Hotterесли, пока они попадут в тот же диапазон, что и предыдущая догадка.
Если они выпадают из диапазона, сначала будут созданы подсказки диапазона Cold, Warm или Hot, а тогдаColder или Warmer/Hotter в этом диапазоне. другими словами, подсказки диапазона Cold, Warm или Hot имеют более высокий приоритет, чем инкрементные Colder или Warmer/Hotter.
print("The secret number is somewhere between 0 and 100. You have 5 guesses.")
user_input = int(input('Make a guess '))
count = 0
while user_input is not 41 and count < 4:
count = count + 1
how_close_to_answer = 41 - user_input
if 5 < how_close_to_answer.__abs__() < 20:
user_input = int(input(f'Warm. Remaining guesses {5 - count} '))
elif how_close_to_answer.__abs__() >= 20:
user_input = int(input(f'Cold. Remaining guesses {5 - count} '))
else:
user_input = int(input(f'Hot. Remaining guesses {5 - count} '))
if user_input is not 41:
print('You Lose!')
else:
print('You Win!')
print(f"It took you {count + 1} guesses to get this correct.")
Например (в случае бесконечных догадок n):
Cold. Осталось догадок (n-1) 'Warmer. Осталось догадок (n-2) 'Colder. Осталось догадок (n-3) 'Hot. Осталось догадок (n-4) 'Hotter. Осталось догадок (n-5) 'Warm. Осталось догадок (n-6) 'В 4. примере - число 36 больше Warmer, чем предыдущие 12, но оно также попадает в диапазон Hot, поэтому вместо него дается подсказка Hot.
в 6. примере - число 30 Colder, чем предыдущие 37, но оно также попадает в диапазон Warm, поэтому вместо него дается подсказка Warm.
В дополнение к предложению @Hoog вы можете сделать это в зависимости от того, идет ли их предположение к ответу или отклоняется от него. то есть угадай 35, потом 40, "теплее", потом 38, "холоднее". Таким образом, вы говорите, что они становятся «теплее», если они переходят от 10 к 15, даже если они находятся в одной и той же группе. Затем вы можете сделать это так, чтобы, если они находятся в пределах 10% от ответа, он говорил «горячо».
если предположение попадает в диапазон «Холодный», он сначала скажет «Холодный» и «Теплее» / «Холоднее», пока остается в диапазоне «Холодный». То же самое касается «Теплого» диапазона. Для диапазона «Горячий» то же самое, за исключением «Горяче»/«Холоднее» вместо «Теплее»/«Холоднее». т.е. 20 -> «Холоднее», затем 21 -> «Теплее», затем 25 -> «Теплее», затем 24 -> «Холоднее», затем 44 -> «Горяче», затем 43 -> «Горяче», затем 45 -> «Холоднее», затем 15 -> «Холоднее». В основном сначала будет объявлено имя диапазона, а затем относительный прогресс внутри этого диапазона.






Я взял num как случайно сгенерированное число вместо 41.
import random
print("The secret number is somewhere between 0 and 100. You have 5 guesses.")
user_input = int(input('Make a guess '))
count = 0
num = random.randint(1,101)
while user_input is not num and count < 4:
#uncomment the line below to see random generated number
#print('Generated Random Number= '+str(num))
count = count + 1
how_close_to_answer = num - user_input
if abs(how_close_to_answer)>5 and abs(how_close_to_answer) <20 :
user_input = int(input(f'Warm. Remaining guesses {5 - count} '))
elif abs(how_close_to_answer) >= 20 :
user_input = int(input(f'Cold. Remaining guesses {5 - count} '))
else:
user_input = int(input(f'Hot. Remaining guesses {5 - count} '))
if user_input is not num:
print('You Lose!')
else:
print('You Win!')
print(f"It took you {count + 1} guesses to get this correct.")
Насколько я понял, вышеприведенная программа генерирует случайное число, и вам нужно угадать это число,
5 цифрам ближе к этому случайному числу, оно сообщит вам hot5 и меньше 20, то он скажет вам warm20, это даст вам coldНадеюсь, что это поможет вам !!
Это изменяет 41 на случайное число, но не добавляет 2 новые подсказки «Холоднее или Теплее». если предположение попадает в диапазон «Холодный», он сначала скажет «Холодный» и «Теплее» / «Холоднее», пока остается в диапазоне «Холодный». То же самое касается «Теплого» диапазона. Для диапазона «Горячий» то же самое, за исключением «Горяче»/«Холоднее» вместо «Теплее»/«Холоднее». т.е. 20 -> «Холоднее», затем 21 -> «Теплее», затем 25 -> «Теплее», затем 24 -> «Холоднее», затем 44 -> «Горяче», затем 43 -> «Горяче», затем 45 -> «Холоднее», затем 15 -> «Холоднее». В основном сначала будет объявлено имя диапазона, а затем относительный прогресс внутри этого диапазона.
Это самое близкое, что я мог получить к тому, что вы просили. На мой взгляд, комментарии к вашему исходному вопросу стоит прочитать, но я думаю, что это именно то, о чем вы просили в вопросе.
print("The secret number is somewhere between 0 and 100. You have 5 guesses.")
user_input = int(input('Make a guess '))
count = 0
last_distance = -1
while user_input is not 41 and count < 4:
count = count + 1
how_close_to_answer = (41 - user_input)
how_close_to_answer = how_close_to_answer.__abs__()
if how_close_to_answer <= 5 and last_distance > 5:
user_input = int(input(f'Hot. Remaining guesses {5 - count} '))
elif last_distance == -1:
if 5 < how_close_to_answer < 20:
user_input = int(input(f'Warm. Remaining guesses {5 - count} '))
elif how_close_to_answer >= 20:
user_input = int(input(f'Cold. Remaining guesses {5 - count} '))
elif how_close_to_answer <= 5:
user_input = int(input(f'Hot. Remaining guesses {5 - count} '))
else:
if how_close_to_answer < last_distance:
if how_close_to_answer <= 5:
user_input = int(input(f'Hotter. Remaining guesses {5 - count} '))
else:
user_input = int(input(f'Warmer. Remaining guesses {5 - count} '))
elif how_close_to_answer > last_distance:
user_input = int(input(f'Colder. Remaining guesses {5 - count} '))
last_distance = how_close_to_answer
if user_input is not 41:
print('You Lose!')
else:
print('You Win!')
print(f"It took you {count + 1} guesses to get this correct.")
Надеюсь, это то, что поможет
Спасибо, это почти идеальное решение. Есть 2 проблемы:
1-й - когда ввод находится в «горячем» диапазоне, он перестает отслеживать, будет ли следующее предположение «теплее» или «холоднее». 2-й: если один и тот же номер вводится дважды подряд (от 1 до 35 и от 47 до 100), цикл прерывается преждевременно с сообщением «Вы потеряли сообщение».
что вы хотите, чтобы произошло, если они введут один и тот же номер, вы не указали. Кроме того, не уверен, какова первая проблема после прочтения вашего исходного вопроса. Теплее/Холоднее все еще работает, даже если вход находится в горячем диапазоне (например, предположение 1 = 40 (выход = горячее), предположение 2 = 12 (выход = холоднее). Что требуется?
Это то, что вы хотите? Угадай 1 = 39 (выход = горячее), Угадай 2 = 40 (выход = горячее) Если это так, что, если порядок предположений был изменен на противоположный? Это все еще просто «Холоднее» (ааа, только что увидел ваш другой ответ. Похоже, единственная разница в том, что вам нужна более горячая функциональность. Сейчас редактирую)
Спасибо, это решает все. Другая проблема была довольно незначительной — если игрок ввел одно и то же число дважды подряд, цикл прервался с сообщением «Вы проиграли!» сообщение до того, как были использованы оставшиеся предположения. Исправлено, добавив else: user_input = int(input(f'Same. Remaining guesses {5 - count} ')) между 26-й и 27-й строками, чтобы решить случай, когда как_close_to_answer = last_distance
Прежде всего, нужно ТОЧНО решить, как вы хотите, чтобы эти дополнительные подсказки работали. Если бы мне пришлось угадывать, вы бы хотели, чтобы все догадки после первого говорили либо
warmer, либоcolder, либоHOT. Если игрок угадываетHOTпредположение, а затем получает следующее в пределах диапазонаHOT, должен ли ваш код повторятьHOTснова или одно изwarmer/colder?