Интерпретатор hq9+

Сегодня мы напишем интерпретатор ещё одного эзотерического языка программирования, под названием hq9+.

До этого я уже писал интерпретатор brainfuck, поэтому эзотерические языки уже не так нам страшны.

Итак, что же из себя представляет язык hq9+ ?

Это всего лишь 4 команды:

  • H - выводит "Hello, world!".
  • Q - выводит текст исполняемой программы.
  • 9 - выводит текст песни "99 Bottles of Beer".
  • + - увеличивает никому не нужный счётчик.

Зная это, мы можем написать свой интерпретатор 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+.

Введите программу на hq9+

Обсуждение вопросов, не связанных со статьёй (в т.ч. комментарии типа "Помогите!"), ведётся на форуме pythonworld.club, а не в комментариях.

Для вставки кода на Python в комментарий заключайте его в теги <pre><code class="python3">Ваш код</code></pre>
Опечатка в тексте:
Послать сообщение об ошибке автору?