生成两个随机整数相除表达式,其执行结果为整数
代码:
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 就只是这两个数的倍数。你也可以用同样的方法来处理平方根。