generate-question.py 1.64 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.
  Este programa deve escrever no `stdout` uma pergunta em formato `yaml` como
  os anteriores. Pode também receber argumentos para parametrizar a geração da
  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)
      y = randint(a, b)
      r = x + y

      print(f'''---
      type: text
      title: Contas de somar
      text: |
        bla bla bla
      correct: '{{r}}'
      solution: |
        A solução é {{r}}.''')
  ```

  Este script deve ter permissões para poder ser executado no terminal. Dá
  jeito usar o comando `gen-somar.py 1 100 | yamllint -` para validar o `yaml`
  gerado.

  Para indicar que uma pergunta é gerada externamente, esta é declarada com

  ```yaml
      - type: generator
        ref: gen-somar
        script: gen-somar.py
        # opcional
        args: [1, 100]
  ```

  Os argumentos `args` são opcionais e são passados para o programa como
  argumentos da linha de comando.

  ---

  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}.""")