#!/usr/bin/env python3 ''' Example of a question generator. Arguments are read from stdin. ''' from random import randint import sys # read two arguments from the field `args` specified in the question yaml file a, b = (int(n) for n in sys.argv[1:]) x = randint(a, b) y = randint(a, b) r = x + y print(f"""--- type: text title: Geradores de perguntas text: | As perguntas podem ser estáticas (como as que vimos até aqui), ou serem geradas dinâmicamente por um programa externo. Para gerar uma pergunta, o programa deve escrever texto no `stdout` em formato `yaml` tal como os exemplos das perguntas estáticas dos tipos apresentados anteriormente. Pode também receber argumentos de linha de comando para parametrizar a pergunta. Aqui está um exemplo de uma pergunta gerada por um script python: ```python #!/usr/bin/env python3 from random import randint import sys a, b = (int(n) for n in sys.argv[1:]) # argumentos da linha de comando x = randint(a, b) # número inteiro no intervalo a..b y = randint(a, b) # número inteiro no intervalo a..b r = x + y # calcula resultado correcto print(f'''--- type: text title: Contas de somar text: | Calcule o resultado de ${{x}} + {{y}}$. correct: '{{r}}' solution: | A solução é {{r}}.''') ``` Este script deve ter permissões para poder ser executado no terminal. Podemos testar o programa no terminal `./gen-somar.py 1 100` e verificar que o output é uma pergunta válida em formato `yaml`. Agora é necessário indicar que este script deve ser usado para gerar uma pergunta. Uma pergunta gerada por um programa externo é declarada com ```yaml - type: generator ref: gen-somar script: gen-somar.py # argumentos opcionais args: [1, 100] ``` O programa pode receber uma lista de argumentos de linha de comando declarados em `args`. --- Calcule o resultado de ${x} + {y}$. Os números foram gerados aleatoriamente no intervalo de {a} a {b}. correct: '{r}' solution: | A solução é {r}.""")