- Пишем простую игру на python
- Полный код:
- Читают сейчас
- Редакторский дайджест
- Похожие публикации
- Система рекомендаций фильмов с GUI на Python
- Десктопные GUI-тесты на Python. Лекция в Яндексе
- Автоматизируем десктопный GUI на Python + pywinauto: как подружиться c MS UI Automation
- Минуточку внимания
- Комментарии 8
- Trouble With Bubble Blaster Python Code? [duplicate]
- 2 Answers 2
- Игра на Python за 19 строк
- Дубликаты не найдены
- Программирование на python
- Правила сообщества
- Блогерохвостый питон
- Список бесплатных курсов, чтобы стать python-разработчиком (по направлениям)
- От продавца до Big Data Scientist #13
Пишем простую игру на python
Сегодня мы создадим всем известную игру камень, ножницы, бумага. В этом нам поможет ЯП python и библиотека tkinter, но если вы не знаете что это такое, советую почитать данную статью.
Первое, что нам нужно, это начальная структура, окошко, у меня оно будет выглядеть так:
Здесь мы создаём неизменяемое окно 500 на 500 с заголовком «Камень, ножницы, бумага» и белым фоном. Именно в это окошко мы будем добавлять кнопочки, счетчики и т.д.
Теперь в наш метод startUI добавим такие строчки:
Эти 7 строчек добавят в наше окно 3 кнопки которые нечего не делают. Мы исправим это позже.
Пользователь делает свой выбор, нажимая на одну из 3 кнопок, это круто, но нам нужен оппонент, именно для этого нужен модуль random.
А вот теперь мы добавим функцию, которая будет обрабатывать выбор, и выдавать ответ, кто же выиграл в этом раунде. Сделаем это вот таким образом:
Что тут происходит?
Всё очень просто. Грубо говоря, если игрок нажмет камень, отправится 1, если ножницы, то 2, а если бумага, то 3, причем не только отправится, но и выведется в консоль.
На счет компьютера. Он свой выбор делает, но его выбор никуда не идёт.
Перед тем, как делать логику, нам нужно передать игроку результат, и для этого мы будем использовать Label. Добавим в startUI такие строчки:
Отлично. Теперь у нас есть надпись, в которую мы будем выводить результат раунда и надпись со статистикой.
Сделаем 3 счетчика:
1. Поражений
2. Побед
3. Ничей
Для этого все в тот же startUI добавим такую строку:
Теперь в классе main создаем метод btn_click, и пишем в него следующие строки:
Недолго музыка играла. Там же, в btn_click, удаляем
Собственно всё, на этом создание закончилось. Всё работает, можно играть.
Полный код:
Ой, у вас баннер убежал!
Читают сейчас
Редакторский дайджест
Присылаем лучшие статьи раз в месяц
Скоро на этот адрес придет письмо. Подтвердите подписку, если всё в силе.
Похожие публикации
Система рекомендаций фильмов с GUI на Python
Десктопные GUI-тесты на Python. Лекция в Яндексе
Автоматизируем десктопный GUI на Python + pywinauto: как подружиться c MS UI Automation
AdBlock похитил этот баннер, но баннеры не зубы — отрастут
Минуточку внимания
Комментарии 8
Хм, не то, чтобы я хотел раскритиковать в негативном смысле, но многое тут непонятно и можно было бы описать.
Вот скажите мне, человеку, не говорящему на парселтанге, зачем нужен tkinter? (нет, я прочитал, что это библиотека для рисования окошек, но можно было бы в двух словах упомянуть про это и дальше уже сослаться на статью за деталями)
Почему координаты элементов заданы прямо в их свойствах? не разумнее ли вынести их в переменные в начале программы? и, как я понял, tkinter умеет сам располагать элементы относительно друг друга используя .pack() или .grid(), почему именно .place()? из-за задания их размера?
Зачем нужен if __name__ == ‘__main__’:? без него не заработает? (действительно не знаю)
Почему логика самой игры в том же цикле, что и создание окошечка? Можно ли вынести логику игры в отдельный цикл и перерисовывать только отдельные элементы по необходимости?
Зачем писать print(choise) для кнопки если он сразу же будет удалён? Если для отладки куда-то в консоль, то можно было бы и упомянуть об этом.
Может быть стоит скрыть полный листинг под спойлер?
P.S. я не пытаюсь разгромить пост, я действительно пытаюсь понять, почему сделано именно так: может быть есть веские причины, которые я не понимаю, а может быть просто этот код скорее proof of concept, показывающий, что такое вообще возможно сделать лёгким движением руки.
Зачем нужен if __name__ == ‘__main__’:? без него не заработает?
Зачем нужен if name == ‘main‘:? без него не заработает?
Добавлю к предыдущему оратору.
Таки да — лучше написать if main().
А просто с первой колонки не писать ничего.
Тогда при запуске программы будет выполняться это вот main().
А вот при импорте как модуля — ничего выполняться не будет.
Ну такой вот стиль хорошего тона.
Ещё не всё. В январе только прекратят работать над последним релизом, а в апреле хотят выложить этот релиз (2.7.18, если я не ошибаюсь).
Trouble With Bubble Blaster Python Code? [duplicate]
I am working on a project, and have completed the code, yet one error is still showing up, even though I am sure my code is correct.
Here is the error that keeps showing up:
Here is my python code:
2 Answers 2
That code is an unreadable mess!
You should put all your imports at the top of the script.
Next, define your global constants (and global variables, but it’s better if you can reorganize your code to minimize the use of global variables).
Next define your functions.
And then put the code that calls those functions at the end.
The reason for this is that you need to define things before you can use them. Python scans your script top down, creating various objects (including functions) by executing the definitions as it goes. Functions definitions can refer to global things (including other functions) that haven’t been defined yet. But when you actually call the function the things that it refers to must have already been defined.
Also, put (at least) one blank line around functions to make it easier to see where they begin and end. And use blank lines elsewhere to make the structure of your program more obvious.
I’ve tried to implement those changes, and the resulting code runs, but I’m not sure if it does exactly what you want.
Игра на Python за 19 строк
Хеллоу ворлд! Если вам надоели задачки из видео курсов или книг можете сделать эту игру.
Сейчас мы сделаем камень, ножницы, бумага.
Для начала импортируем рандом:
Теперь сделаем бесконечный цикл чтобы не перезапускать игру несколько раз:
Пропишем правила для игроков:
print(‘Вы играете в камень ножницы бумага. к — камень, н — ножницы, б — бумага. Чтобы выйти напишите: выход.’)
Теперь сделаем выбор для игрока:
player = input(‘Вы выбрали:’)
И вот мы подошли к тому как все-таки реализовать проверку того что написал игрок, а также выход из игры:
if player not in [‘к’, ‘н’, ‘б’, ‘выход’]:
print(‘Не правильный ввод!’)
if player == ‘выход’:
Теперь пропишем выбор для бота и тут нам поможет рандом:
comp_choice = gen[random.randint(1, 3)]
Что ж мы сделали почти все шаги в игре, но осталось сделать победные комбинации:
Последний и самый простой шаг обозначаем победу или ничью:
if player == comp_choice:
elif (player,comp_choice) in win_combination:
print(‘Вы играете в камень ножницы бумага. к — камень, н — ножницы, б — бумага. Чтобы выйти напишите: выход.’)
player = input(‘Вы выбрали:’)
if player not in [‘к’, ‘н’, ‘б’, ‘выход’]:
print(‘Не правильный ввод!’)
if player == ‘выход’:
comp_choice = gen[random.randint(1, 3)]
if player == comp_choice:
elif (player,comp_choice) in win_combination:
Вот и все вы сделали игру и можете похвастаться перед друзьями.
Телеграм-канал @featuresfordev. Там мы делимся своими мыслями в таком формате.
Дубликаты не найдены
Программирование на python
167 постов 6.1K подписчиков
Правила сообщества
Публиковать могут пользователи с любым рейтингом. Однако!
• уважение к читателям и авторам
• простота и информативность повествования
• тег python2 или python3, если актуально
• код публиковать в виде цитаты, либо ссылкой на специализированный сайт
• допускать оскорбления и провокации
• распространять вредоносное ПО
• просить решить вашу полноценную задачу за вас
Чел, ты рекламируешь свой канал, и даже не вставил свой код нормально. Я редко постам ставлю минусы, но это какое-то жуткое неуважение к читателям.
Вот полный код:
ссылка на гит.
Вы разработчик или где?
код питона без отступов выглядит идеально!
П.С. ты это сделал что бы над ньюбами поиздеваться, да?
@CookieMonster43,
«`break;«` должно быть без точки с запятой. Это ж не php. Вы код этот запускали?
И блин.. есть же gist.github.com , pastebin.com — пихайте код туда
Спасибо за внимательность ! Да моя ошибка, но программа работает и с точкой запятой.
> gen = <1:'к', 2:'н', 3:'б'>> comp_choice = gen[random.randint(1, 3)]
Смысл этого поста? Он обучает разве что копипастить код.
Как вариант (исключения не перехватываются, форматирование строк не применяется, Python 3) :
import random
player_win = 0
bot_win = 0
print(‘Это игра «Камень-ножницы-бумага.»\n1 — камень, 2 — ножницы, 3 — бумага,\n4 -выход из игры.’)
steps=<1:'Камень',2:'Ножницы',3:'Бумага',4:'Выход'>
combs=<'win':('12','23','31'),'draw':('11','22','33')>
while True:
player=int(input(‘Ваш ход: ‘))
if player == 4: break
bot=random.randint(1,3)
comb=(str(player)+str(bot))
print(steps[player],’:’,steps[bot])
if comb in combs[‘win’]: print(‘Победа ваша!’)
player_win+=1
elif comb in combs[‘draw’]:
print(‘Ничья!’)
else:
print(‘Победил бот.’)
bot_win+=1
print(‘Статистика игры:’,player_win,’:’,bot_win)
Хотя бы так тогда:
while True:
print(‘Вы играете в камень ножницы бумага. к — камень, н — ножницы, б — бумага.Чтобы выйти напишите: выход.’)
player = input(‘Вы выбрали:’)
if player not in patterns.values():
print(‘Не правильный ввод!’)
elif player == ‘выход’:
break
comp_choice = patterns.get(random.randint(1, 3))
print(f’Бот выбрал:‘)
if player == comp_choice:
print(‘Ничья’)
elif (player, comp_choice) in win_combination:
player_win += 1
print(‘Игрок победил’)
else:
bot_win += 1
print(‘Победа бота’)
print(f’Статистика игры:\n игрок —
Ты отступ забыл сделать, а так спасибо за код.
Спасибо за помощь!
Отступы нужны в коде, без них не полетишь..
Мне очень жаль, но на Pikabu не возможно сделать отступы( или я чего-то не знаю если это так, то помогите, пожалуйста) . Я не согласен с утверждением что это реклама, я разместил ссылку в самом низу и это значит что ее могут увидеть лишь заинтересованные .
Блогерохвостый питон
Специально для Telegram-канала @zen_of_python
Список бесплатных курсов, чтобы стать python-разработчиком (по направлениям)
Для тех, кто хотел стать программистом на python «с нуля», но не мог найти список курсов с более-менее внятной структурой. Мы попытались такой составить: ссылка на гугл документ.
Если коротко и одной картинкой, то получается примерно так (ссылки доступны в оригинальном гугл документе):
Предложенный план не говорит о том, что вы должны пройти все курсы, чтобы успешно устроиться в компанию. Вполне вероятно, что если вы отлично выучите язык и фреймворк (к примеру, Django), то вас с удовольствием возьмут в какую-либо фирму, однако в yandex вы вряд ли устроитесь. Таким образом, этот документ является скорее опорным планом для получения базовых знаний по своему направлению.
Материал подготовили админы и участники нашей группы изучения питон вк. В будущем материал будет дополняться.
От продавца до Big Data Scientist #13
Всем привет! Я живой 🙂 Честно говоря, мне очень стыдно писать спустя 3 месяца после последнего поста. Ща расскажу что случилось.
У меня появилась новая работа. Не считая ЗП прям работа мечты — работать приходится просто по минимуму, по сравнению с предыдущей. Я больше не продавец и моё присутствие на точке 8*6, как ранее, уже не требуется. Да что там, бывают дни, когда можно даже из дома не выходить. В общем, казалось бы, ну чего бы и не учиться? Даже с ещё большей интенсивностью. Да? А вот мои мозги решили иначе. Я впал в какую-то смесь депрессии и прокрастинации очень надолго. Я забросил вообще всё. Я не фотографировал, не занимался физическими упражнениями и, конечно же, я перестал кодить. Я ничего не делал. Днём работал или ездил по делам связанными с семьёй, а вечером тупил в сериальчики или анимешки. Кстати, уже много лет мы с женой (в прошлом заядлые анимешники) не смотрели ни одного тайтла. Но вот я уговорил посмотреть «Коносубу», ну и понеслось 🙂 За эти 3 месяца мы с десяток тайтлов просмотрели, как отличных, так и весьма посредственных. Примерно к началу января, я решил, что нужно что-то менять. Решено было возобновить физическую активность и записаться в зал, куда уже с пол года ходит супруга. Начал с индивидуальных занятий 2 раза в неделю. Постепенно вернулся некоторый интерес к своим прошлым увлечениям — провёл приятную съемку, начал снова постить фоточки (из старых), снова занялся обучением фотографии, подготовил программу обучения по обработке фотографий. В общем, жизнь закипела. Ну и как следствие, я собрал силы в кулак и решил попробовать вернуться в программирование. Ещё о этого в попытках вернуться я допрошёл тему «Регулярные выражения», но это было очень мучительно и не вызывало интереса для дальнейшего обучения. Поэтому было решено попробовать-таки написать программу, о которой я рассказывал ранее — агрохимический калькулятор. Друг мне прислал всю инфу ещё в середине декабря, и я приступил к её изучению где-то в конце февраля. Освежив в голове давно забытые термины и понятия, я начал наброску логики программы. Что делал в первые, я сначала в текстовом варианте прям пошагово написал как и что должно работать. В какой момент будут создаваться переменные, когда списки, когда прочее. Что откуда и как будет браться. В начале марта (да, я всё делал не спеша, с перерывами в пару дней) я решился и запустил пайчарм. Пайчарм встретил меня тем, что новый проект не создавал файла main.py и не привязывал интерпритатор к проекту. Кое как победив его я принялся за код.
За пару присестов я написал логическую часть с ручным вводом данных, но программа предполагала наличие интерфейса. Когда базовые функции заработали я принялся к знакомству с TKinter. Всё оказалось достаточно просто и доступно. Ещё через недельку появился простенький неказистый интерфейс. Далее привязал логическую часть, переписав дофига всего, что бы это заработало. Скинул другу видосик с примером работы. Друг похвалил и озадачил новой темой: нужно прилепить коэффициенты в зависимости от агрохимического анализа почвы, если такой имеется. Подумалось, что это на час делов, но вникнув в суть вопроса я приуныл. Нужно было как-то связать ещё 3 таблицы для просчёта коэффициентов. Я пошёл по самому тупому пути и просто накидал 150 строк If’ов. Сделав половину я понял, что можно было загрузить эти таблицы и потом сделать обход по этим таблицам, но к тому времени я чот прям устал и решил просто доделать как есть. К тому же вторая таблица повторяла коэффициенты, просто для них были другие диапазоны. Поэтому CTRL+C, CTRL+V, плюс час на исправление диапазонов. И всё заработало 🙂 После допилил некоторые вещи и всё стало работать как часики.
В общем допиливание этой программки до рабочего состояния и побудило меня к написанию этого поста. Мол, ребятки, я не сдался, я тут, я ещё что-то пишу!
Если кому интересно, могу в следующий раз сделать подробное описание логики программы 🙂
Собственно у меня остались вопросы. Как, например мне теперь сие чудо сделать экзешником и скинуть другу на пробу? Программа подтягивает инфу со сторонних файлов, можно ли сделать так что бы будучи скомпиленной она так же их и подтягивала, а не добавлять их в тело экзешника, как было у меня со скриптом для автоматического копирования. В общем, как сделать моё творение рабочим инструментом? Подскажите, если кто шарит 🙂