Сегодня мы напишем интерпретатор ещё одного эзотерического языка программирования, под названием hq9+. До этого я уже писал интерпретатор brainfuck, поэтому эзотерические языки уже не так нам страшны. Итак, что же из себя представляет язык hq9+ ? Это всего лишь 4 команды:
Зная это, мы можем написать свой интерпретатор hq9+. Ввод мы будем осуществлять из файла, вывод на консоль. Для простоты, любые другие символы мы будем просто игнорировать. f = open(input('Enter file name: ')) s = f.read() f.close() И, собственно, сам интерпретатор: template = '''{} bottles of beer on the wall. Take one down and pass it around, {} bottles of beer on the wall.''' count = 0 # Никому не нужный счётчик for i in s.upper(): # Игнорируем регистр if i == 'H': print('Hello, world!') # Выводим 'Hello, world!' elif i == 'Q': print(s) # Выводим саму программу elif i == '9': for i in range(99, 1, -1): print(template.format(i, i-1)) # Выводим текст песни print('1 bottle of beer on the wall.\nTake one down and pass it around, no more bottles of beer on the wall.') print('No more bottles of beer on the wall.\nGo to the store and buy some more, 99 bottles of beer on the wall.') elif i == '+': count += 1 Самое "сложное" здесь - вывод текста песни "99 Bottles of Beer". Можно было запихнуть весь текст, но тогда файл получился бы довольно объёмный. Поэтому вместо этого я использую форматирование строк, и вывожу песню с помощью цикла. У меня на этом всё, и в конце - онлайн-интерпретатор hq9+. |
Сегодня я разберу одну из олимпиадных задач, довольно простую. Суть задачи в том, чтобы из англо-латинского словаря сделать латино-английский. Примеры тестов Входные данные 3 apple - malum, pomum, popula fruit - baca, bacca, popum punishment - malum, multa Выходные данные 7 baca - fruit bacca - fruit malum - apple, punishment multa - punishment pomum - apple popula - apple popum - fruit Входные данные черпаются из input.txt, вывод сбрасывается в output.txt. Довольно стандартное требование, про работу с файлами в python я недавно писал. Входные данные лексикографически отсортированы, и выходные данные тоже требуются отсортированными. Вначале я покажу своё решение, потом начну объяснять. Итак, моё решение: f = open('input.txt') N = f.readline() d = {} for line in f: words = line.strip().split(' - ') en = words[0] lat = words[1].split(', ') for key in lat: if key in d: d[key].append(en) else: d[key] = [en] f.close() for key in d: d[key].sort() g = open('output.txt', 'w') g.write(str(len(d)) + '\n') for lat in sorted(d): g.write(lat + ' - ' + ', '.join(d[lat]) + '\n') g.close() А теперь объяснение. Приготовились... :) Открываем файл, читаем число N (оно нам не понадобится); создаём пустой ... Читать дальше » |
Сегодня я решил что-нибудь написать на python. Что-нибудь простенькое, но не очень. Решил остановиться на интерпретаторе brainfuck. Для тех, кто не знает, о чем это я говорю, поясняю: язык brainfuck для хранения данных использует ячейки (по-хорошему бесконечное число ячеек) и состоит всего из восьми команд, поэтому выучить его будет легко. Вот эти команды:
Итак, вернемся к интерпретатору. Программный код будем считывать со стандартного ввода (если кто захочет, может переделать на считывание из файла). Итак, будем считать, что прочитали (с помощью встроенной функции input()), затем обработаем строки, удалив все нежелательные символы. def parse(code): new = '' for c in code: if c in '><+-.,[]': new += c return new Или проще: def parse(code): return '' ... Читать дальше » |
Ну, точнее, не блэкджек, а его мини-вариант под названием очко. Для реализации нам понадобится колода карт, из которой каждый раз мы будем вынимать по карте и прибавлять к результату. Далее, сами "карты": шестерка, семерка, восьмерка, девятка, десятка, валет (достоинством 2), дама (3), король (4), и туз (11). koloda = [6,7,8,9,10,2,3,4,11] * 4 Случайным образом перемешаем карты, используя функцию shuffle из модуля random. 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('До новых встреч!') Изначально у пользователя 0 очков. Мы его спрашиваем, будет ли он брать карту, на что он должен ответить y или n. Если пользователь ответил n, то мы говорим ему, сколько очков он набрал, и завершаем программу. Если он изъявил желание взять карту (ух, какой нехороший пользователь :)), то мы снимаем ему карту из списка (с помощьюметода pop). Мы снимаем последнюю карту, хотя вообще без разницы, какую снимать, ведь они перемешаны. ... Читать дальше » |
Всем привет обьявляется конкурс самый активный пользователь сайта Призы
|