#!/usr/bin/env python3 ''' Example of a question generator. Arguments are read from stdin. ''' from random import randint import sys 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: | Existe a possibilidade da pergunta ser gerada por um programa externo. O programa deve escrever no `stdout` uma pergunta em formato `yaml` tal como os exemplos anteriores. Pode também receber argumentos 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 50` 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 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}.""")