生成两个随机整数相除表达式,其执行结果为整数

0 投票
1 回答
31 浏览
提问于 2025-04-12 05:23

代码:

import random
import re
numbuttons = ['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
operators = ['+', '-', '*', '/']
class Task:
    def __init__(self, difficulty = 1):
        c = None
        self.difficulty = difficulty
        self.task = ""
        b = ""
        if difficulty == 1:
            self.task = random.choice(numbuttons[1:])
            self.target = self.task
        if difficulty == 2:
            self.task = random.choice(numbuttons[1:]) + random.choice(numbuttons)
            self.target = self.task
        else:
            self.task = f"{random.choice(numbuttons[1:])}"
            for i in range(difficulty - (difficulty - 8)):
                if i == 0:
                    a = random.choice(random.choice([numbuttons, operators]))
                elif i == (difficulty - (difficulty - 8)) - 1:
                    a = random.choice(numbuttons[1:])
                elif b in "^+-*/,√" and c != "/":
                    if b == "/":
                        c = b
                        numfordivide = int(re.split('[+\-*/]', self.task)[-2])
                        mult = 2
                        numbers = []
                        if numfordivide != 1:
                            while mult**2 <= numfordivide:
                                while numfordivide % mult == 0:
                                    numbers.append(mult)
                                    numfordivide = numfordivide / mult
                                mult = mult + 1
                            if numfordivide > 1:
                                numbers.append(numfordivide)
                            if numbers == []:
                                numbers.append(1)
                        else:
                            numbers.append(1)
                        a = str(random.choice(numbers))
                    else:
                        a = random.choice(numbuttons[1:])
                        c = None
                elif c == "/":
                    a = random.choice(operators)
                    c = None
                else:
                    a = random.choice(random.choice([numbuttons, operators]))
                b = a
                self.task = self.task + a
                b = a
the_task = Task(14)
print(the_task.task)

这个程序会随机生成像“21*2+4-9”这样的字符串。对我来说,执行这个表达式(也就是这个字符串)时,结果必须是一个整数,而且里面所有的运算结果也都要是整数。不过,有时候程序会生成像“7+5-14/6”这样的字符串,结果显然就不是整数,尽管我已经尽量避免这种情况。请问该怎么解决这个问题呢?

1 个回答

0

如果你不使用括号的话,你可以简单地改变你的算法。也就是说,当你用到除法运算符,比如说 a/b 的时候,你可以让 b 和 a/b 都是整数。这样一来,a 就只是这两个数的倍数。你也可以用同样的方法来处理平方根。

撰写回答