generate-question.py 1.86 KB
#!/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}.""")