Программа для генерации викторин Python для случайных математиков, нуждаются в корректировке - PullRequest
0 голосов
/ 01 декабря 2018

Я пытаюсь изменить 3 вещи в своем коде.

  1. Сделать так, чтобы 'Ответы' соответствовали тому же набору random.randomint, который использовался для 'Вопросов'.

  2. Дайте пользователю возможность выбрать определенный оператор, который будет использоваться для теста вместо случайных операторов.

  3. Для операторов вычитания убедитесь, что первый операнд больше, чемвторой операнд, поэтому программа не дает отрицательных ответов.

Любые ответы приветствуются.Вот мой код:

import random

print("Welcome to the maths quiz creator!")
CLASS = input("Please enter the class name: ")
NAME = input("Please enter your name: ")
NoofQ = int(input("How many questions for the quiz? "))

<- ПЕРВЫЙ ФАЙЛ ДЛЯ ВОПРОСОВ ->

output_file = open('{}_quiz.txt'.format(CLASS), 'w')
print("Class:", CLASS)
print("Teacher:", NAME)

output_file.write("Class: ")
output_file.write(CLASS)
output_file.write("\nTeacher: ")
output_file.write(NAME)

for question_num in range(1,NoofQ +1):
    ops = ['*','/','+','-']
    rand=random.randint(1,12)
    rand2=random.randint(1,12)
    operation = random.choice(ops)
    maths = eval(str(rand) + operation + str(rand2))
    Questions = '\n {}: {} {} {} {} {}'.format(question_num, rand, operation, rand2, "=", "________")

    print(Questions)
    output_file.write(Questions)
output_file.close()

<- ВТОРОЙ ФАЙЛ ДЛЯ ОТВЕТОВ ->

output_file = open('{}_answers.txt'.format(CLASS), 'w')
print("Class:", CLASS)
print("Teacher:", NAME)

output_file.write("Class: ")
output_file.write(CLASS)
output_file.write("\nTeacher: ")
output_file.write(NAME)

for question_num in range(1, NoofQ +1):
    ops = ['*','/','+','-']
    rand=random.randint(1,12)
    rand2=random.randint(1,12)
    operation = random.choice(ops)
    maths = eval(str(rand) + operation + str(rand2))
    Answers = '\n {}: {} {} {} {} {}'. format(question_num, rand, operation, rand2, "=", int(maths))

    print(Answers)
    output_file.write(Answers)
output_file.close()

Я довольно новичок в Python, пишу с помощью программы Pycharm.Спасибо.

Ответы [ 2 ]

0 голосов
/ 01 декабря 2018

Для получения положительных результатов вычитания вы можете использовать функцию abs .Или вы можете отсортировать значения в первую очередь:

answer = abs(4-3)
small, big = sorted((4,3))
answer = big - small. 

Вы создаете файл xyz_quiz.txt, содержащий всю информацию, необходимую для кода ответов .Прочитайте файл викторины и для каждого вопроса используйте методы str, чтобы разделить и разбить, пока не получите математика .

>>> question = '1: 6 - 11 = ________'
>>> question, _ = question.split('=')
>>> question
'1: 6 - 11 '
>>> q_number, q = question.split(':')
>>> q_number
'1'
>>> q
' 6 - 11 '
>>> q = q.strip()
>>> q
'6 - 11'
>>>
0 голосов
/ 01 декабря 2018

1 Сделайте так, чтобы «Ответы» соответствовали тому же набору random.randomint, который использовался для «Вопросов».

Вы можете сначала создать один список, который создает числа и использовать его для вопросов и ответов.

numbers = [(random.randint(1, 12), random.randint(1,12)) for _ in range(NoofQ)]

Затем используйте его в вопросах и ответах:

for question_num in range(1,NoofQ +1): #i would prefer that question_num starts at 0
    ops = ['*','/','+','-']
    rand, rand2 = numbers[question_num-1] 

2 Дайте пользователю возможность выбрать определенный оператор, который будет использоваться для теста вместо случайных операторов.

op = input("Please enter your operator (+, -, /, or *): ")

3 Для операторов вычитания убедитесь, что первый операнд больше второго операнда, чтобы программа не давала отрицательных ответов.

if operation == "-" and rand < rand2:
    rand, rand2 = rand2, rand
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...