В этой главе мы напишем игру «Угадай число» на Python. Помните, как в мультфильме «Алеша Попович и Тугарин змей», конь Юлий играл с деревом? Здесь будет примерно такой же алгоритм: компьютер будет загадывать число от 1 до 20. Ваша задача угадать число, которое задумал компьютер за 6 попыток. После каждой неудачной попытки, компьютер будет давать подсказку: задуманное число больше или меньше вашего ответа.
Эта игра является хорошей практикой по языку Python — в этой небольшой программе м иты будем использовать все ранее изученные функции, кроме того, рассмотрим несколько новых.Вы узнаете, как преобразовывать различные типы данных и зачем это нужно. Так как у нас игровая программа, то мы будем называть пользователя «Игрок», хотя «Пользователь» тоже является правильным определением.
Пример работы программы «Угадай число».
Ниже представлен примерный вид того, как будет выглядеть окно интерпретатора Python после запуска и выполнения программы «Угадай число»(guessesTaken.py). Данные, которые вводит игрок выделены черным цветом:
СПОРИМ, Я УГАДАЮ Угадал? пиши в комментариях какое число загадал Головоломки нравятся?

Рисунок 4-1. Работа программы «Угадай число». Данные, вводимые игроком, выделены черным цветом.
Исходный код программы «Угадай число».
Откройте окно редактора файлов IDLE, нажав меню «File»->»New Window». В открывшемся окне, внимательно перепечатайте приведенный ниже код. Сохраните файл с именем guess.py, после чего запустите выполнение программы нажатием кнопки «F5». Обратите внимание, что в начале некоторых строк необходимо добавить 4 или 8 пробелов. Вообще-то, редактор сам это сделает.
Просто имейте ввиду, что это не ошибка, а так и должно быть.
Важно! В очередной раз напоминаю, что данный код предназначен для версии Python 3.0 и выше. В версии Python 2.x эта программа работать не будет. Скачать необходимую версию Python можно с моего сайта (страница «Загрузки) или с официального сайта http://www.python.org.
- # Это программа «Угадай число»
- import random
- guessesTaken = 0
- print ( ‘Желаешь разбогатеть, друг? Как тебя зовут?’ )
- myName = input ()
- number = random.randint(1,20)
- print ( ‘Ну тогда приступим? ‘+myName+’, я загадал число от одного до 20′ )
- while guessesTaken < 6:
- print ( ‘Как ты думаешь, какое?’ ) #Перед функцией print() должно быть 4 пробела
- guess = input ()
- guess = int (guess)
- guessesTaken = guessesTaken+1
- if guess < number:
- print ( ‘Мое число больше твоего’ ) #Перед функцией print() должно быть 8 пробелов
- if guess > number:
- print ( ‘Мое число меньше твоего’ )
- if guess == number:
- break
- if guess == number:
- guessesTaken = str (guessesTaken)
- print ( ‘Превосходно ‘ +myName+ ‘! Ты угадал число с ‘ +guessesTaken+ ‘ попытки. Твой выигрыш 10 очков.’ )
- if guess != number:
- number = str (number)
- 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’ы оформляются кнопкам…
Stars
Watchers
Forks
Releases
No releases published
Packages 0
No packages published
Languages
Footer
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 во втором варианте, чуть исправленное мной):
#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