https://habr.com/ru/post/455910/К «Питону» приходят по-разному: кто-то увлекается ИИ, кто-то начинает изучать веб-разработку на «Питоне» взамен уже надоевшего PHP; у меня получилось по-другому – я стал замечать, что этот язык используется довольно часто в современном программировании не только среди энтузиастов, но и в среде крупных компаний. В общем, язык набирает популярность в массах, поэтому я решил к нему «присмотреться», ну, то есть, изучить.
Изучение нового алгоритмического языка, не сказать, что процесс уж очень увлекательный, если ты уже знаком с несколькими… Можно выбрать книгу, можно какой-нибудь онлайн-курс, а можно вообще «ролики-мультики» и … «сиди-читай-изучай». — Скука!
Набрёл я в Сети на самоучитель по «Питону», в принципе, неплохой, но не сказать, что претендующий на полноту изложения синтаксиса и наткнулся там на «Примеры программ». Среди нескольких других, был там один очень любопытный пример, который буквально «повернул время вспять», и я оказался в тех временах, когда «деревья были больше, а трава зеленее»… Его название: «Пишем блэкджек».
Всё началось с компьютерных игр, когда вместо использования «по назначению» выпукло-экранного телевизора его умудрялись «заюзать» в качестве монитора ко всяким «ZX spectrum» и прочим «корветам», а на уроках информатики, вместо того, чтобы программировать, молодая поросль того и гляди, норовила запустить какие-нибудь «гонки» или космическую «стрелялку» с учительского компьютера, загрузив её на все ученические по некому подобию локальной сети.
А в тиши лаборатории какого-нибудь кабинета химии обязательно гнездилась какая-нибудь ЕС ЭВМ, на которой более взрослые товарищи запускали «Принца Персии» или, о, самую крутую игру всех времён и народов, — «Metal mutant»! Да, были времена… А потом всех накрыло волной «Денди» и «Сеги».
Да, это было лирическое отступление, чтобы пояснить, что дети очень падки на всевозможные игрища. Поэтому, очень хороший ход — обучать их программированию на примере написания какой-нибудь игры. В своё время в ВУЗе я написал космическую стрелялку на Turbo Pascal, в то время «великий и ужасный» С++ ещё только начинал входить в программу обучения студентов и по «крутости» его опережал только Ассемблер.
А тут подвернулась такая возможность люто понастальгировать… В общем, загрузил я исходник в «Анаконду» и стал изучать (возможно, кто-то предпочитает IDLE, но мне нравится «Анаконда» за разнообразие инструментов). Так, что тут у нас… Ну, вроде ничего сложного. Давай проверим работоспособность кода. — Работает.
koloda = [6,7,8,9,10,2,3,4,11] * 4
import random
random.shuffle(koloda)
print('Поиграем в очко?')
count = 0
while True:
choice = input('Будете брать карту? y/n\n')
if choice == 'y':
current = koloda.pop()
print('Вам попалась карта достоинством %d' %current)
count += current
if count > 21:
print('Извините, но вы проиграли')
break
elif count == 21:
print('Поздравляю, вы набрали 21!')
break
else:
print('У вас %d очков.' %count)
elif choice == 'n':
print('У вас %d очков и вы закончили игру.' %count)
break
print('До новых встреч!')
Работает-то он работает… Да только вот не нравится мне такая игра. А где статистика, что сыграл один раунд – и по новой?! – Нет, так не годится! Я стал быстренько править код, убирая ненужные «бреки», добавляя цикл и счётчики побед и поражений. Ну вот, уже лучше. Ах да, в игре всего четыре колоды и они быстро закончатся, если сесть и начать активно «шпилить». Тогда пусть будет тысяча, нет — десять тысяч! Уж этого количества должно хватить до того момента, как программа завершится и скажет «Извини, друг, -Error».
import random
koloda = [6,7,8,9,10,2,3,4,11] * 10000
random.shuffle(koloda)
count = 0
looses = 0
wins = 0
while True:
if count == 0 :
print("------------")
print("Новый раунд!")
print("------------")
choice = input('Будете брать карту? y/n\n')
if choice == 'y':
current = koloda.pop()
print("")
print('Вам попалась карта достоинством %d.' %current)
count += current
if count > 21:
print('Итого %d очков.\n' %count)
print('Извините, но вы проиграли. :-(\n')
elif count == 21:
print('Поздравляю, вы набрали 21!\n')
else:
print('Итого %d очков.' %count)
if count >= 21:
if count == 21: wins = wins + 1
if count > 21: looses = looses + 1
print("Статистика: %d побед," %wins, " %d поражений.\n" %looses)
count = 0
elif choice == 'n':
print("Статистика: %d побед," %wins, " %d поражений.\n" %looses)
break
print('До новых встреч!')
Да, всё замечательно… Только вот мне не нравится запускать сию программулину из под интерпретатора, а если я обычный юзер и не хочу ставить себе эти «Питоны»?! — Экзешник давай, говорю! Ну что же, и этому горю помочь… И вдруг откуда-то взялся Федя, который молвил своё слово:
— Шурик, а может не надо?!
— Надо, Федя… Надо!
Но об этом во второй части.