Программа которая угадывает загаданное число

Читаю книгу «Программируем на 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?», затем просто выводит две последние строки при этом на смотря на условия.

Я могу угадать ваше имя в считаные секунды

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

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

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

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

DigitalLev

Тебя эти строчки не смущают?)

elif yesOrNot == «Нет» : while yesOrNot == «Да» :
При таком условии данный цикл выполнятся не будет.

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

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

# Комп, отгадай число # Человек загадывает случайное число от 1 до 100. # Комп пытается его угадать, # а человек говорит больше, меньше или в точку # Псевдокод # приветствие и объяснение правил # предложить юзеру загадать число от 1 до 100 # импортируем ГСЧ # задать начальные условия # включить ГСЧ от a до b # номер попытки приравнять к 1 # пока число не совпадет с загаданным # вывести число # спросить у юзера то ли это число # если да то # закончить игру, посчитав количество попыток # если больше # включить ГСЧ от последнего предложенного до b # если меньше # включить ГСЧ от a до последнего предложенного print(‘tWelcome to the game «PC guess the number»!’ #приветствуем ‘nnMake a number from 1 to 100. I will try to guess it.’ #объясняем правила ‘nnPlease, 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

38 Задача: Угадай случайное число ( Python )

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»!’ #приветствуем
‘nnMake a number from 1 to 100. I will try to guess it.’ #объясняем правила
‘nnPlease, 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»!’ #приветствуем ‘nnMake a number from 1 to 100. I will try to guess it.’ #объясняем правила ‘nnPlease, 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

Источник: qna.habr.com

Стартовый проект для работы скачивайте на GitHub.

Поиграть в «Угадай число» можно по ссылке.

HTML разметка

Игра: угадай число

CSS стили

JS скрипт

let input = document.querySelector(«.field__form__input»); let btn = document.querySelector(«.field__form__btn»); let check = document.querySelector(«.result__check__out»); let help = document.querySelector(«.result__help__out»); let count = document.querySelector(«.result__count__out»); let item = 0; let randNum = 1 + Math.floor(Math.random() * 100); let userNum; btn.onclick = function (evt) < evt.preventDefault(); userNum = input.value; console.log(userNum, randNum); if (userNum >randNum) < check.textContent = «Пока что не угадали»; help.textContent = «Многовато будет»; item++; count.textContent = item; >else if (userNum < randNum) < check.textContent = «Пока что не угадали»; help.textContent = «Маловато будет»; item++; count.textContent = item; >else < check.textContent = «Поздравляю! Вы угадали число»; help.textContent = «В самый раз»; item++; count.textContent = item; >>;

Источник: codelab.pro

Программирование на C, C# и Java

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

Игра на C#: Угадай число

Сегодня мы будем создавать кое-что простое, но в то же время интересное — это игра на C# под названием «Угадай число». Смысл игры заключается в том, что компьютер рандомно загадывает число от 0 до 9, а пользователь должен угадать это число, имея 3 попытки.

Читайте также:
Как создать программу генератор случайных чисел

Итак, приступаем. Создаём консольное приложение («Файл»->»Создать»->»Проект»->»Консольное приложение») и для начала задаём функцию Random вот так:

Random rand = new Random ( ) ;
int i = rand . Next ( 10 ) ;

Иными словами, мы создаём некий генератор случайных чисел rand, который каждый раз при запуске программы будет генерировать псевдослучайные числа, значение которых каждый раз будут заноситься в целочисленную переменную i. Число 10 в скобках означает, что всегда будет производиться генерация только лишь 10 первых чисел (0, 1, 2, 3, 4, 5, 6, 7, 8, 9). Если в скобках поставить 100, то рандом будет выбирать числа из диапазона от 0 до 99 и т.д.

Также мы инициализируем переменную count:

int count = 1 ;

Она нам понадобится для счёта шагов (или попыток пользователя). Мы присваиваем переменной значение 1, так как не будем считать первую попытку пользователя.

Console . WriteLine ( «Компьютер загадал число от 0 до 9. Попробуйте отгодать его за три попытки.» ) ;

Console . WriteLine ( «Введите первое число:» ) ;

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

Игра на C#: угадай число

Так как пользователь после такого предложения начнёт вводить какое-то число, то нам обязательно надо считать его, что мы делаем следующей строкой:

int k = Convert . ToInt32 ( Console . ReadLine ( ) ) ;

Теперь в переменную k запишется число, введенное пользователем.
Вводная часть позади. Теперь строим сам алгоритм, он довольно прост:

while ( count < = 3 )
Console . WriteLine ( «Да! Компьютер загадал число » + k + «!» ) ;
if ( count == 4 )
Console . WriteLine ( «Увы, вы не отгодали загаданное число. Это было число » + i + «!» ) ;
Console . WriteLine ( «Нет, это не число » + k + «! Попытка № » + count + «:» ) ;
k = Convert . ToInt32 ( Console . ReadLine ( ) ) ;
Console . ReadLine ( ) ;

Итак, мы создаем главный цикл while, в котором и будет всё считаться. Так как мы решили, что у пользователя будет 3 попытки (а первую попытку он исчерпал выше, введя число), то мы создали такое условие (count<=3). Когда счетчик count станет больше 3, значит три попытки были исчерпаны.

Затем мы создаём условие if, где говорим о том, что если сгенерированное рандомом число будет равно числу, введенному пользователем, то мы поздравляем пользователя и указываем, что значение k — правильное число. Затем срабатывает оператор break, который выведет программу из цикла while, так как больше нам в цикле делать нечего.

Если же пользователь не угадал число, что сработает код под оператором else. Счётчик увеличивается на 1 (минус одна попытка у пользователя). Далее следует ещё один оператор условия if. В нём мы «оговариваем» случай, если пользователь так и не сможет угадать число за все три попытки. В таком случае счётчик count станет равен четырём.Мы пишем пользователю сообщение, что он, увы, не смог победить и заодно покажем ему, что же за число, скрывающееся под переменной i, он не сумел отгадать.

Игра на C#: угадай число

После этого мы, опять же, ставим оператор break, так как нам опять нет смысла оставаться в главном цикле while.

Однако, если счётчик ещё не переполнен, и у пользователя есть ещё попытки, то мы напишем ему об этом с предложением ввести новое число, при этом укажем, какое неправильное число k он изначально выбрал и какая у него попытка (count) по счёту.
После того, как пользователь введёт новое число, переменная k перезапишется, и цикл while опять начнёт работу с самого начала.
Также не стоит забывать, что чтобы консоль не закрывалась раньше того, как мы хоть что-то в нём рассмотрим, в конце тела кода надо написать Console.ReadLine();

Игра на C# «Угадай число» готова! Скачать исходник, чтобы поиграть или покопаться в коде игры можно, нажав на кнопку ниже:

Источник: vscode.ru

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru