Напишите программу которая с помощью цепочки таких вопросов и ответов мальчика угадывает число
Перейти к содержимому

Напишите программу которая с помощью цепочки таких вопросов и ответов мальчика угадывает число

  • автор:

Язык кода Python. Игра «Компьютер угадывает число»
Поменяйте мальчика и компьютер из прошлой задачи местами. Теперь мальчик загадывает число между 1 и 100 (включительно). Компьютер может спросить у мальчика: «Твое число равно, меньше или больше, чем число N?», где N — число, которое хочет проверить компьютер. Мальчик отвечает одним из трёх чисел: 1 — равно, 2 — больше, 3 — меньше.
Напишите программу, которая с помощью цепочки таких вопросов и ответов мальчика угадывает число.
Дополнительно: сделайте так, чтобы можно было гарантированно угадать число за семь попыток.

eRrOr123456789100

а. Возраст. Пользователь должен ввести свой возраст в цифрах: 1. Если возраст больше 0 или равен 18, показать сообщение «Вы еще молоды. Вам нужно учит … ься». 2. Если возраст больше 18 или равен 50, показать сообщение «Вам нужно работать». 3. Если возраст больше 50 или равен 59, показать сообщение «Вам скоро на пенсию». 4. Если возраст больше 59 или равен 100, показать сообщение «Вы пенсионер». 5. Если ни одно условие не подошло, то показать сообщение «Что-то пошло не так». Сообщения выводить методом alert(). дам 42 бало срочно​

Компьютер угадывает число

Игра «Компьютер угадывает число». Пользователь загадывает число между 1 и 100 (включительно). Компьютер может спросить у него «Твое число равно, меньше или больше чем число N?», где N — число, которое хочет проверить компьютер. Пользователь отвечает одним из трех чисел: 1 — равно, 2 — больше, 3 — меньше.
Написать программу, которая с помощью цепочки таких вопросов и ответов пользователя угадывает число. Дополнительно: сделать так, чтобы можно было гарантированно угадать число за 7 попыток.

94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
Ответы с готовыми решениями:

Написать программу «Угадай число». Человек загадывает целое число, компьютер угадывает это число
Написать программу «Угадай число». Человек загадывает целое число, компьютер угадывает это число.

Компьютер угадывает число
Пользователь загадывает число от 1 до 100 и компьютер пытается угадать. На каждую попытку.

Компьютер угадывает число
Здравствуйте. Задание: Человек загадывает целое число, а компьютер его угадывает. Понятно, что он.

Компьютер угадывает число
Пользователь “загадывает” число oт 1 дo Х-1, а компьютер должен его отгадать. Подсчитать количество.

Am I evil? Yes, I am!

Эксперт PythonЭксперт Java

18977 / 9670 / 2712
Регистрация: 21.10.2017
Сообщений: 21,484

Добавлено через 24 минуты

Кликните здесь для просмотра всего текста

1 2 3 4 5 6 7 8 9 10 11 12 13 14
left, right = 1, 100 steps = 0 while True: m = (right+left)//2 steps += 1 print(f' ?\n1 - равно, 2 - больше, 3 - меньше') answer = int(input('--> ')) if answer==1: print(f'Steps: ') break elif answer==2: left = m else: right = m

1378 / 309 / 76
Регистрация: 16.03.2020
Сообщений: 945

Whitecolor, Поясняю суть решения iSmokeJC, если вдруг не знакомы с бинарным поиском: каждый раз мы сокращаем диапазон [1; 100] вдвое в зависимости от ответа. Если предположение (первое будет 50) меньше числа — мы сокращаем диапазон до [50; 100] и берем середину от этого диапазона и т.д., если же число меньше предположения — сокращаем в обратную сторону до [1; 50].

Кликните здесь для просмотра всего текста

ЦитатаСообщение от iSmokeJC Посмотреть сообщение

1 2 3 4
elif answer==2: left = m else: right = m

Лучше делать left = m+1 и right = m-1 по канонам «книжной» реализации. А в идеале должно быть

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
left, right = 1, 100 steps = 0 while left  right: mid = (right+left) // 2 steps += 1 print(f' ?\n1 - равно, 2 - больше, 3 - меньше') answer = int(input('--> ')) if answer == 1: break elif answer == 2: left = mid + 1 else: right = mid - 1 print(f'Steps: ') print(mid)

725 / 505 / 54
Регистрация: 10.03.2012
Сообщений: 3,694

ЦитатаСообщение от rim41 Посмотреть сообщение

если вдруг не знакомы с бинарным поиском
Спасибо, читал как он устроен
725 / 505 / 54
Регистрация: 10.03.2012
Сообщений: 3,694

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
import random right_ans = int(input('Введите число от 1 до 100: ')) a = 1 b = 101 right = False tries = 1 while not right: comp_answer = random.randint(a, b) if comp_answer > right_ans: b = comp_answer elif comp_answer  right_ans: a = comp_answer + 1 else: print(f'Да, компьютер угадал с помощью попыток') right = True tries += 1

87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
Помогаю со студенческими работами здесь

Программа угадай число, компьютер угадывает
Не работает программа, знаю что стринг не может вывести несколько слов и как это сделать .

Угадай число, где компьютер угадывает
После первой попытки происходит работа программы не так как нужно, подскажите в чем проблема, знаю.

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

Компьютер угадывает число. Задача решена, как считаете? (вектор и цикл)
Компьютер должен угадать задуманное пользователем число с 7-ми попыток. Хотел написать с.

Напишите программу «Угадай число», но здесь компьютер угадывает ваше число
Напишите программу "Угадай число", но здесь компьютер угадывает ваше число. Желательно, чтобы в.

«Угадай Число», где угадывает компьютер
Привет, у меня проблема. По идее, все предельно просто и поиск загаданного числа осуществляется с.

Не могу решить задачу на Python?

Читаю книгу «Программируем на Python» Майкла Доусона и наткнулся на задачу.

Суть Задачи в том, чтобы пользователь загадывал число, а программа отгадывала, при этом задавая вопрос «Больше или Меньше?».

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

Вот мой код, который я написал :

import random print( "\tДобро пожаловать в игру 'Отгадай число'!") print("\nЗагадывайте число от 1 до 100") print("Я постараюсь отгадать его за минимальное число попыток.") print("Используйте \"Больше\", \"Меньше\", \"Да\" или \"Нет\"\n") max_number = 100 yesOrNot = input("Ваше число 50?\n ") guess = 50 if yesOrNot == "Да" : print("Я нашел это число. ") input("Нажмите Enter чтобы выйти. ") elif yesOrNot == "Нет" : while yesOrNot == "Да" : check = input("Больше или Меньше") if check == "Больше" : guess_r = random.randint(guess, max_number) elif check == "Меньше" : guess_r = random.randit(0, guess) guess_r = max_number guess_r = guess yesOrNot = input("Ваше число ", str(guess_r), "?") print("Я нашел это число") input("Нажмите Enter чтобы выйти. ")

Но программа просто спрашивает «Ваше число 50?», затем просто выводит две последние строки при этом на смотря на условия.

  • Вопрос задан более трёх лет назад
  • 33467 просмотров

6 комментариев

Оценить 6 комментариев

А чему равно yesOrNot == «Да» при первой проверке?
Кузя @N_kuzya Автор вопроса
Влад: Неважно, что отвечает пользователь программа все равно прописывает две последние строки и все.
while yesOrNot != «ДА»
Но дальше, сам цикл, то же не правильный

DigitalLev

Дмитрий Попов @DigitalLev
Тебя эти строчки не смущают?)

elif yesOrNot == "Нет" : while yesOrNot == "Да" :

При таком условии данный цикл выполнятся не будет.
Кузя @N_kuzya Автор вопроса

Юрий Дягилев: Суть была в том, чтобы если он отвечал что загаданное число не 50( то есть он отвечал Нет), программа будет работать до тех пор, пока ответ не будет Да

Здесь только то, что Майкл Доусон объяснял от начала своей книги до главы 3 включительно.

# Комп, отгадай число # Человек загадывает случайное число от 1 до 100. # Комп пытается его угадать, # а человек говорит больше, меньше или в точку # Псевдокод # приветствие и объяснение правил # предложить юзеру загадать число от 1 до 100 # импортируем ГСЧ # задать начальные условия # включить ГСЧ от a до b # номер попытки приравнять к 1 # пока число не совпадет с загаданным # вывести число # спросить у юзера то ли это число # если да то # закончить игру, посчитав количество попыток # если больше # включить ГСЧ от последнего предложенного до b # если меньше # включить ГСЧ от a до последнего предложенного print('\tWelcome to the game "PC guess the number"!' #приветствуем '\n\nMake a number from 1 to 100. I will try to guess it.' #объясняем правила '\n\nPlease, make a number from 1 to 100 and write it down on a piece of paper.') #предлагаем придумать число import random #импортируем ГСЧ #задаем начальные условия a = 1 #начальная граница диапазона b = 100 #конечная граница диапазона user_number = int(input('Press "0" to start: ')) #вводим начальное загаданное число вне диапазона (обход бага) comp_number = random.randint(a, b) #включаем ГСЧ от a до b tries = 1 #количество попыток #цикл отгадывания while comp_number != user_number: print('\nIs it number', str(comp_number) + '?') user_answer = input('If I am right, then enter "Y",' '\nif the hidden number is greater, then enter "M",' '\nif is less, then enter "L"' '\n ') #спрашиваем у юзера if user_answer == 'Y': user_number = comp_number print('\nHidden number is', str(user_number) + '. I made', tries, 'tries. Game over.') break elif user_answer == 'M': a = comp_number + 1 comp_number = random.randint(a, b) elif user_answer == 'L': b = comp_number - 1 comp_number = random.randint(a, b) tries += 1

Решения вопроса 2

flygrounder

Артём Белоусов @flygrounder
Python/Django

У вас изначально странная стратегия отгадывания. Оптимальная будет такой: две переменных left=1 и right=100. И всегда спрашивать Ваше число (left+right)//2? Если больше, то left = (left+right)//2 + 1, если меньше, то right = (left + right)//2 — 1, если оно, то выйти. Гарантированно угадает за log2(n) вопросов, при n=100 за 7 вопросов.
UPD: Вот накидал реализацию

left = 1 right = 100 while True: current = (left+right)//2 is_right = input('Ваше число:<>?(да, больше, меньше)'.format(current)) if is_right.lower() == 'да': print('Я его угадал!') break elif is_right=='больше': left = current + 1 else: right = current - 1

Ответ написан более трёх лет назад
Нравится 4 3 комментария
Нет ощущения отгадывания, просто перебор.

iAzzy: Это не перебор. Это именно алгоритм. Метод половинного деления или метод бисекции, если хотите.

Tark

Бинарный поиск)

Рандом даст ощущение отгадывания?

import random number = int(input("Введите число от 1 до 100: ")) x = 1 y = 100 guess = random.randint (x, y) tries = 1 if number == guess: print('С первой попытки!') else: while guess != number: if number > guess: print("Загаданное число больше: ", guess) x = guess guess = random.randint(x, y) tries += 1 elif number < guess: print("Загаданное число меньше: ", guess) y = guess guess = random.randint(x, y) tries += 1 print (number) print ('В яблочко, с', tries, 'попытки')

Ответ написан более трёх лет назад
Комментировать
Нравится 1 Комментировать
Ответы на вопрос 5
Тут есть и проверка на мухлевку и правильное сужение диапазона! Мой код будет отгадывать быстрее.

import random print("загадайте число от 0 до 100") print( "Если мое число меньше или больше вашего вводите '' соответственно, а если я угадал, то введите 'y' и нажмите Enter" ) rnd = 50 min_diapazona = 0 max_diapazona = 100 otvet = "" while 1 > 0: print("Мое число:", rnd, "я угадал? Диапазон от", min_diapazona, "до", max_diapazona) otvet = input() if otvet == "y": print("Я угадал! Игра окончена.") break elif otvet == "": min_diapazona = rnd + 1 try: rnd = random.randint(min_diapazona, max_diapazona) except: print("Вы мухлевщик! Я с вами больше не играю! Игра окончена!") break else: print("Неправельнй ввод! Допустимые символы: '' и 'y'")

Ответ написан более двух лет назад
Комментировать
Нравится 1 Комментировать

# Игра для компьютера "Отгадай число" import random number=input("Введите загаданное вами число в диапазоне [0;100]: ") x=0 y=100 tries=1 computer_number=random.randrange(x,y+1) while x!=y: print("Ваше число равно,больше или меньше:",computer_number) z=input() if 'больше' in z.lower(): x=computer_number computer_number=random.randrange(x,y) tries+=1 elif 'меньше' in z.lower(): y=computer_number computer_number=random.randrange(x,y) tries+=1 elif 'равно' in z.lower(): break print('Ваше число:',number,' ,а число найденное компьютером: ',computer_number,'кол-во попыток:',tries) 

Ответ написан более трёх лет назад

У одного из челиков была классная идея насчет оптимизации данной программы тип там с поиском в меньших интервалах, но я пока не допер как бы получше это описать.

# Комп, отгадай число

# Человек загадывает случайное число от 1 до 100.
# Комп пытается его угадать,
# а человек говорит больше, меньше или в точку

# приветствие и объяснение правил

# предложить юзеру загадать число от 1 до 100

# импортируем ГСЧ
# задать начальные условия
# включить ГСЧ от a до b
# номер попытки приравнять к 1
# пока число не совпадет с загаданным
# вывести число
# спросить у юзера то ли это число
# если да то
# закончить игру, посчитав количество попыток
# если больше
# включить ГСЧ от последнего предложенного до b
# если меньше
# включить ГСЧ от a до последнего предложенного

print('\tWelcome to the game "PC guess the number"!' #приветствуем
'\n\nMake a number from 1 to 100. I will try to guess it.' #объясняем правила
'\n\nPlease, make a number from 1 to 100 and write it down on a piece of paper.') #предлагаем придумать число

import random #импортируем ГСЧ

#задаем начальные условия
a = 1 #начальная граница диапазона
b = 100 #конечная граница диапазона
user_number = int(input('Press "0" to start: ')) #вводим начальное загаданное число вне диапазона (обход бага)
comp_number = random.randint(a, b) #включаем ГСЧ от a до b
tries = 1 #количество попыток

#цикл отгадывания
while comp_number != user_number:
print('\nIs it number', str(comp_number) + '?')
user_answer = input('If I am right, then enter "Y",'
'\nif the hidden number is greater, then enter "M",'
'\nif is less, then enter "L"'
'\n ') #спрашиваем у юзера
if user_answer == 'Y':
user_number = comp_number
print('\nHidden number is', str(user_number) + '. I made', tries, 'tries. Game over.')
break
elif user_answer == 'M':
a = comp_number + 1
comp_number = random.randint(a, b)
elif user_answer == 'L':
b = comp_number - 1
comp_number = random.randint(a, b)
tries += 1

Ответ написан более трёх лет назад
Сорри, отступы при копировании не сохранились

Разобрался, как правильно вставить код. В нем только то, что проходили по книге Майкла Доусона от начала до Chapter3 включительно.

# Комп, отгадай число # Человек загадывает случайное число от 1 до 100. # Комп пытается его угадать, # а человек говорит больше, меньше или в точку # Псевдокод # приветствие и объяснение правил # предложить юзеру загадать число от 1 до 100 # импортируем ГСЧ # задать начальные условия # включить ГСЧ от a до b # номер попытки приравнять к 1 # пока число не совпадет с загаданным # вывести число # спросить у юзера то ли это число # если да то # закончить игру, посчитав количество попыток # если больше # включить ГСЧ от последнего предложенного до b # если меньше # включить ГСЧ от a до последнего предложенного print('\tWelcome to the game "PC guess the number"!' #приветствуем '\n\nMake a number from 1 to 100. I will try to guess it.' #объясняем правила '\n\nPlease, make a number from 1 to 100 and write it down on a piece of paper.') #предлагаем придумать число import random #импортируем ГСЧ #задаем начальные условия a = 1 #начальная граница диапазона b = 100 #конечная граница диапазона user_number = int(input('Press "0" to start: ')) #вводим начальное загаданное число вне диапазона (обход бага) comp_number = random.randint(a, b) #включаем ГСЧ от a до b tries = 1 #количество попыток #цикл отгадывания while comp_number != user_number: print('\nIs it number', str(comp_number) + '?') user_answer = input('If I am right, then enter "Y",' '\nif the hidden number is greater, then enter "M",' '\nif is less, then enter "L"' '\n ') #спрашиваем у юзера if user_answer == 'Y': user_number = comp_number print('\nHidden number is', str(user_number) + '. I made', tries, 'tries. Game over.') break elif user_answer == 'M': a = comp_number + 1 comp_number = random.randint(a, b) elif user_answer == 'L': b = comp_number - 1 comp_number = random.randint(a, b) tries += 1

Задача 10. Игра «Компьютер угадывает число» (Python)

Поменяйте мальчика и компьютер из прошлой задачи местами. Теперь мальчик загадывает число между 1 и 100 (включительно). Компьютер может спросить у мальчика: «Твоё число равно, меньше или больше, чем число N?», где N — число, которое хочет проверить компьютер. Мальчик отвечает одним из трёх чисел: 1 — равно, 2 — больше, 3 — меньше.

Напишите программу, которая с помощью цепочки таких вопросов и ответов мальчика угадывает число.

Дополнительно: сделайте так, чтобы можно было гарантированно угадать число за семь попыток.

Что оценивается

Задача 10. Игра «Компьютер угадывает число» (Python)

  • результат вычислений корректен;
  • input содержит корректное приглашение для ввода;
  • правильное употребление пробелов после запятых и при бинарных операциях.
  • правильно оформленный input, без пустого приветствия для ввода (видео 2.3);
  • переменные имеют значащие имена, не только a, b, c, d (видео 2.3);
  • правильное употребление пробелов после запятых и при бинарных операциях;
  • отсутствие пробелов после имён функций и перед скобками: “print ()”,“input ()” — неверно, “print()” — верно;
  • правильно оформлены блоки if-elif-else, отступы одинаковы во всех блоках одного уровня:
  • переменные имеют корректные названия, в качестве имён не используются имена встроенных функций (список встроенных функций — официальная документация).
Советы и рекомендации
  • Стиль оформления программ на языке Python PEP8.
    Оригинальный документ PEP8 (на английском).
  • Приоритет арифметических операций PEP8 (мы вводим and, or).
    Список встроенных функций (официальная документация).

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *