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

В этой главе мы напишем игру «Угадай число» на Python. Помните, как в мультфильме «Алеша Попович и Тугарин змей», конь Юлий играл с деревом? Здесь будет примерно такой же алгоритм: компьютер будет загадывать число от 1 до 20. Ваша задача угадать число, которое задумал компьютер за 6 попыток. После каждой неудачной попытки, компьютер будет давать подсказку: задуманное число больше или меньше вашего ответа.

Эта игра является хорошей практикой по языку Python — в этой небольшой программе м иты будем использовать все ранее изученные функции, кроме того, рассмотрим несколько новых.Вы узнаете, как преобразовывать различные типы данных и зачем это нужно. Так как у нас игровая программа, то мы будем называть пользователя «Игрок», хотя «Пользователь» тоже является правильным определением.

Пример работы программы «Угадай число».

Ниже представлен примерный вид того, как будет выглядеть окно интерпретатора Python после запуска и выполнения программы «Угадай число»(guessesTaken.py). Данные, которые вводит игрок выделены черным цветом:

СПОРИМ, Я УГАДАЮ Угадал? пиши в комментариях какое число загадал Головоломки нравятся?

4-1

Рисунок 4-1. Работа программы «Угадай число». Данные, вводимые игроком, выделены черным цветом.

Исходный код программы «Угадай число».

Откройте окно редактора файлов IDLE, нажав меню «File»->»New Window». В открывшемся окне, внимательно перепечатайте приведенный ниже код. Сохраните файл с именем guess.py, после чего запустите выполнение программы нажатием кнопки «F5». Обратите внимание, что в начале некоторых строк необходимо добавить 4 или 8 пробелов. Вообще-то, редактор сам это сделает.

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

Важно! В очередной раз напоминаю, что данный код предназначен для версии Python 3.0 и выше. В версии Python 2.x эта программа работать не будет. Скачать необходимую версию Python можно с моего сайта (страница «Загрузки) или с официального сайта http://www.python.org.

  1. # Это программа «Угадай число»
  2. import random
  3. guessesTaken = 0
  4. print ( ‘Желаешь разбогатеть, друг? Как тебя зовут?’ )
  5. myName = input ()
  6. number = random.randint(1,20)
  7. print ( ‘Ну тогда приступим? ‘+myName+’, я загадал число от одного до 20′ )
  8. while guessesTaken < 6:
  9. print ( ‘Как ты думаешь, какое?’ ) #Перед функцией print() должно быть 4 пробела
  10. guess = input ()
  11. guess = int (guess)
  12. guessesTaken = guessesTaken+1
  13. if guess < number:
  14. print ( ‘Мое число больше твоего’ ) #Перед функцией print() должно быть 8 пробелов
  15. if guess > number:
  16. print ( ‘Мое число меньше твоего’ )
  17. if guess == number:
  18. break
  19. if guess == number:
  20. guessesTaken = str (guessesTaken)
  21. print ( ‘Превосходно ‘ +myName+ ‘! Ты угадал число с ‘ +guessesTaken+ ‘ попытки. Твой выигрыш 10 очков.’ )
  22. if guess != number:
  23. number = str (number)
  24. print ( ‘Жаль, но у тебя не осталось попыток. Я загадал число ‘ +number+ ‘. Ты проиграл… Эй! Вы! Двое! Живо! Снимите ка с него шкуру!’ )
Читайте также:
Программа как вести семейный бюджет

Хотя я настоятельно рекомендую перепечатывать код программы вручную, вы можете просто скопировать его отсюда, или скачать файл с готовой программой на странице «Загрузки«.

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

Источник: writegamepython.wordpress.com

VeronikaRomanenko/WinForms_dz_17.04

This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.

Switch branches/tags
Branches Tags
Could not load branches
Nothing to show
Could not load tags

Nothing to show

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?

Cancel Create

  • Local
  • Codespaces

HTTPS GitHub CLI
Use Git or checkout with SVN using the web URL.
Work fast with our official CLI. Learn more about the CLI.

Sign In Required

Please sign in to use Codespaces.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching GitHub Desktop

If nothing happens, download GitHub Desktop and try again.

Launching Xcode

If nothing happens, download Xcode and try again.

Launching Visual Studio Code

Your codespace will open once ready.

There was a problem preparing your codespace, please try again.

Latest commit

Git stats

Files

Failed to load latest commit information.

Latest commit message
Commit time

About

Написать функцию, которая «угадывает» задуманное пользователем число от 1 до 2000. Для запроса к пользователю использовать MessageBox. После того, как число отгадано, необходимо вывести количество запросов, потребовавшихся для этого, и предоставить пользователю возможность сыграть еще раз, не выходя из программы (MessageBox’ы оформляются кнопкам…

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

Stars

Watchers

Forks

Releases

No releases published

Packages 0

No packages published

Languages

You can’t perform that action at this time.

Источник: github.com

Упражнение из книги Страуструпа. Программа угадай число. Можно ли написать лучше?

Напишите программу, угадывающую число. Пользователь должен задумать
число от 1 до 100, а программа должна задавать вопросы, чтобы выяснить, какое
число он задумал (например, “Задуманное число меньше 50”). Ваша программа
должна уметь идентифицировать число после не более семи попыток. Подсказ-
ка: используйте операторы < и


Мое решение такое:

#include using namespace std; int main() < setlocale(LC_ALL, «Russian»); double curr =50; double shift =50; char answer = ‘ ‘; bool equal_check = false; for(int i=0;i<8;i++)< cout << «Число равно» << static_cast(curr + 0.5) > answer; if (answer==’y’) < equal_check = true; break; >cout (curr + 0.5) > answer; cout else if(answer==’n’) < shift=shift/2; curr += shift; >> if (!equal_check) < cout system(«pause»); return 0; >

Вроде работает, но есть подозрение, что я не до конца понял суть упражнения и что еще можно написать как-то проще и эффективней. Подскажите, пожалуйста, можно ли написать лучше? И правильно ли я понял задачу?

upd.Короче сам похоже нашел решение, которое подходит условиям упражнения:

#include using namespace std; int main() < setlocale(LC_ALL, «Russian»); double curr =50, shift =50; char answer = ‘ ‘; cout (curr + 0.5) > answer; if (answer==’y’) < shift=shift/2; curr -= shift; >else if(answer==’n’) < shift=shift/2; curr += shift; >if ( (curr = 99.5) )< cout (curr + 0.5) ; if ( shift <= 0.5)< cout (curr) > system(«pause»); return 0; >

upd.Еще раз перепроверил.
Оказалось тоже есть недочет. На 99 не работает. В первый раз проглядел.
Поправил перестала работать как решение снизу от teugen во втором варианте (при выборе 100, до 100 не доходит ).
В итоге получается, что с исходным вопросом “Задуманное число меньше X”, если его не менять и включить 100 в возможный выбор числа, а не брать от 1 до 99 , работать в семь итерации при варианте 100 не будет никак, а только в восемь. Поэтому склоняюсь к тому, что в тексте вопроса неправильный перевод на русский и предполагалось, что интервал будет от 1 до 99. Либо второй вариант такой, что вопрос (“Задуманное число меньше X”) можно видоизменять и тогда вариант такой как у teugen получился в третий раз (финальный). Я лично считаю, что все таки ошибка переводчика или Бьерн неточно написал и ожидалась, что интервал будет от 1 до 99.
Вот думаю какая реализация имелась ввиду (решение от teugen во втором варианте, чуть исправленное мной):

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

#include #include using namespace std; int main() < setlocale(LC_ALL, «Russian»); int min = 1, max = 100; cout > ans; if (ans == ‘y’) < max = guess; >else < min = guess; >guess = (min + max) / 2; if (max — min < 2) < cout > cout

Думаю вопрос закрыт.

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

4 комментария

Оценить 4 комментария

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

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