Распечатайте разные строки, используя один и тот же цикл - PullRequest
0 голосов
/ 27 мая 2020

Итак, я делаю этот генератор математических задач. Он выбирает 2 случайных числа от 1 до 20 и случайный математический оператор. Я хочу, чтобы он напечатал это:

num1 symbol num2 (например, 5 * 2)

Но я не могу понять, как это сделать. Вот что я получаю со своим кодом:

символ num1 символ num2 (например, 5 * 2 *)

Вот мой код:

import random

def problem():

    randsymbol = random.randint(1,4)

    if randsymbol == 1:
        symbol = "+"
    elif randsymbol == 2:
        symbol = "-"
    elif randsymbol == 3:
        symbol = "*"
    else:
        symbol = "/"

    for count in range (0, 2):
        num = random.randint(1,20)
        print(num,symbol)

problem()

Я знаю проблему потому что я печатаю как числа, так и символ внутри l oop, но если я этого не сделаю, я не смогу напечатать 2 разных числа. Итак, если я возьму код из l oop, я получу что-то вроде этого: num1 symbol num1 (например, 5 * 5)

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

Спасибо!

Ответы [ 3 ]

0 голосов
/ 27 мая 2020

Попробуйте следующее:

import random

def problem():
    randsymbol = random.choice(["+", "-", "*", "/"])
    num1 = random.randint(1,20)
    num2 = random.randint(1,20)
    print(f"{num1} {randsymbol} {num2}")

problem()
0 голосов
/ 27 мая 2020
def problem():
    randsymbol = random.choice('+-*/')
    nums = random.sample(list(range(1,21)), 2)
    print('{} {} {}'.format(nums[0], randsymbol, nums[1]))

Примеры

>>> problem()
14 * 6
>>> problem()
4 / 10
>>> problem()
7 / 10

Затем вы можете использовать словарь этих символов для функций в operator, чтобы оценить это выражение и вернуть значение (например, для проверки ввода пользователя )

import operator
import random

def problem():
    randsymbol = random.choice('+-*/')
    nums = random.sample(list(range(1,21)), 2)
    print('{} {} {}'.format(nums[0], randsymbol, nums[1]))

    ops = {'+' : operator.add,
           '-' : operator.sub,
           '*' : operator.mul,
           '/' : operator.truediv}

    return ops[randsymbol](nums[0], nums[1])

Примеры

>>> problem()
15 + 16
31
>>> problem()
15 - 8
7
>>> problem()
8 - 16
-8
0 голосов
/ 27 мая 2020

Измените это:

    for count in range (0, 2):
        num = random.randint(1,20)
        print(num,symbol)

На это:

    num1 = random.randint(1,20)
    num2 = random.randint(1,20)
    print(num1,symbol,num2)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...