Уведомления

Группа в Telegram: @pythonsu

#1 Май 17, 2022 21:58:21

AlLinik
Зарегистрирован: 2022-05-17
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра "Отгадай число" наоборот! Майкл Доусон

Всем привет!
Начал изучать 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')

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

Отредактировано AlLinik (Май 17, 2022 22:41:21)

Офлайн

#2 Май 17, 2022 22:13:40

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

Игра "Отгадай число" наоборот! Майкл Доусон

[code python]код вставлять между этими тегами в редакторе рядом со смайлом есть список тегов[/code]

Отредактировано xam1816 (Май 17, 2022 22:14:09)

Офлайн

#3 Май 17, 2022 22:39:02

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Игра "Отгадай число" наоборот! Майкл Доусон

Бинарный поиск это называется:

  
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)

Офлайн

#4 Май 17, 2022 22:43:53

AlLinik
Зарегистрирован: 2022-05-17
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

Игра "Отгадай число" наоборот! Майкл Доусон

А с помощью if, elif, else, while можно что-нибудь придумать?
Или лучше изучать дальше?

Офлайн

#5 Май 17, 2022 22:48:41

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

Игра "Отгадай число" наоборот! Майкл Доусон

  
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

Отредактировано xam1816 (Май 17, 2022 22:52:21)

Офлайн

#6 Май 17, 2022 22:50:40

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Игра "Отгадай число" наоборот! Майкл Доусон

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('Числа нет в списке')

Офлайн

#7 Май 17, 2022 23:04:19

xam1816
Зарегистрирован: 2020-05-11
Сообщения: 1352
Репутация: +  118  -
Профиль   Отправить e-mail  

Игра "Отгадай число" наоборот! Майкл Доусон

Palrom
spisok = list(range(0, 101))
chislo = int(input('Введите число: '))

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

  
number_list = list(range(0, 101))
number = int(input('Введите число: '))

Офлайн

#8 Май 17, 2022 23:13:21

Palrom
Зарегистрирован: 2022-04-21
Сообщения: 82
Репутация: +  5  -
Профиль   Отправить e-mail  

Игра "Отгадай число" наоборот! Майкл Доусон

xam1816
пользуйся переводчиком

Сделал так специально, чтоб перевод не отнимал драгоценное “процессорное время” и было легче сходу понять, что за что отвечает, но на будущее, ок.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version