Найти - Пользователи
Полная версия: Игра "Отгадай число" наоборот! Майкл Доусон
Начало » Python для новичков » Игра "Отгадай число" наоборот! Майкл Доусон
1
AlLinik
Всем привет!
Начал изучать Python по книге Майкла Доусона “Программируем на Python”
Изучил 3 раздела, после каждого раздела выполняю задачи (проблем не было).
И вот наткнулся на последнюю задачу “Отгадай число” только наоборот (число должен отгадать компьютер!)
Возникли трудности в написании программы!
Пытался найти ответ в сети интернет, без результата (решения есть, но весьма непонятные пока мне!)

Сама задача: “А вот задача посложнее. Напишите на псевдокоде алгоритм игры, в которой случайное число от 1 до 100 загадывает человек, а отгадывает компьютер. Прежде чем приступать к решению, задумайтесь над тем, какой должна быть оптимальная стратегия отгадывания. Если алгоритм на псевдокоде будет удачным, попробуйте реализовать игру на Python.”

Вопрос: “Не могу понять, как написать код, в котором необходимо передать компьютеру, что следующее выведенное им число, было бы меньше либо больше уже имеющегося числа”

Вот сама программа “Отгадай число” (с ограниченным количеством попыток):

 import random
print('\nДобро пожаловать в игру "ОТГАДАЙ ЧИСЛО"!')
print('\nЗагадано натуральное число от 1 до 100.')
print('\nПопробуй его отгадать за 10 попыток!')
number = random.randint(1,100)
guess = int(input('\nВаше число: '))
tries = 1
while guess != number:
    if guess > number:
        print('Меньше...')
    elif guess < number:
        print('Больше...')
    if tries == 10:
        print('\nПОПЫТОК БОЛЬШЕ НЕТ! The end...')
        break
    guess = int(input('Следующая попытка: '))
    tries += 1
print('\nПоздравляю!!! Это число: ', number)
print('\nВы затратили всего: ', tries, 'попыток!')
input('\nEnter')

ВСЕМ ОТОЗВАВШИМСЯ СПАСИБО!

xam1816
[code python]код вставлять между этими тегами в редакторе рядом со смайлом есть список тегов[/code]
Palrom
Бинарный поиск это называется:
  
def binary_search(spisok, value):
    low = 0
    high = len(spisok) - 1
    while low <= high:
        mid = (low + high) // 2
        if value == mid:
            return print('Загаданное число:', mid)
        elif value < spisok[mid]:
            print('Число меньше', mid)
            high = mid - 1
        else:
            print('Число больше', mid)
            low = mid + 1
    else:
        print('Числа нет в списке')
 
spisok = list(range(0, 101))
chislo = int(input('Введите число: '))
binary_search(spisok, chislo)
AlLinik
А с помощью if, elif, else, while можно что-нибудь придумать?
Или лучше изучать дальше?
xam1816
  
import random
import time
while True:
    hide_num = int(input('загадайте число от 1 до 100\n>>>'))
    if 1 <= hide_num <= 100:
        break
    else:
        print('число вне диапазона!')
a = 1
b = 100
while True:
    num = random.randint(a, b)
    print(f'компьютер: "это число {num}"')
    if num > hide_num:
        b = num - 1
        print('ВЫ: "нет это число меньше"')
    elif num < hide_num:
        a = num + 1
        print('ВЫ: "нет это число больше"')
    else:
        print(f'верно!!!, это число {hide_num}')
        break
    time.sleep(2)
    print('-----------------------')

даже с первого раза угадал
загадайте число от 1 до 100
>>>5
компьютер: "это число 5"
верно!!!, это число 5

Process finished with exit code 0
Palrom
AlLinik
с помощью if, elif, else, while
Так представленная выше функция на 99% из этого и состоит.
Если пугает сама функция, то вот без неё:
  
spisok = list(range(0, 101))
chislo = int(input('Введите число: '))
low = 0
high = len(spisok) - 1
while low <= high:
    mid = (low + high) // 2
    if chislo == mid:
        print('Загаданное число:', mid)
        break
    elif chislo < spisok[mid]:
        print('Число меньше', mid)
        high = mid - 1
    else:
        print('Число больше', mid)
        low = mid + 1
else:
    print('Числа нет в списке')
xam1816
Palrom
spisok = list(range(0, 101))
chislo = int(input('Введите число: '))

названия давай на английском языке, так принято, пользуйся переводчиком

  
number_list = list(range(0, 101))
number = int(input('Введите число: '))
Palrom
xam1816
пользуйся переводчиком

Сделал так специально, чтоб перевод не отнимал драгоценное “процессорное время” и было легче сходу понять, что за что отвечает, но на будущее, ок.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB