You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

126 lines
4.6 KiB

import random
from cfractions import Fraction
def create_number(i):
get_number = random.randint(0, int(i))
# print(get_number)
return get_number
def create_sign():
sign = ['+', '-', '*', '÷']
get_sign = random.choice(sign)
# print(get_sign)
return get_sign
def create_formula(flag_num):
total = [3, 5, 7]
flag = random.choice(total)
# 生成算式 result数组
result = []
for i in range(flag):
# print(i)
if i % 2 == 0:
number = create_number(flag_num)
result.append(number)
else:
sign = create_sign()
if (i+1) != flag:
result.append(sign)
# print(result)
# print("加入括号")
length = len(result)
brackets = [0, 1]
bracket = random.choice(brackets)
if length > 3:
# 随机加入括号
if bracket == 1:
for i in range(length):
if result[i] == '+' or result[i] == '-':
result.insert(i-1, '(')
result.insert(i+3, ')')
break
# print(result)
formula = str(str(result).replace("'", "").replace(
',', '')).replace('[', '').replace(']', '')
# 计算
while len(result) != 1:
if '(' in result:
number_sign = result.index('(')+2
if result[number_sign] == '+':
number_num = result[number_sign - 1] + result[number_sign + 1]
result[number_sign - 2] = number_num
result.remove(result[number_sign - 1])
result.remove(result[number_sign - 1])
result.remove(result[number_sign - 1])
result.remove(result[number_sign - 1])
elif result[number_sign] == '-':
number_num = result[number_sign - 1] - result[number_sign + 1]
result[number_sign - 2] = number_num
result.remove(result[number_sign - 1])
result.remove(result[number_sign - 1])
result.remove(result[number_sign - 1])
result.remove(result[number_sign - 1])
else:
if '*' in result:
number_sign = result.index('*')
# print(result)
number_num = int(
float(result[number_sign - 1]) * float(result[number_sign + 1]))
result[number_sign] = number_num
result.remove(result[number_sign - 1])
result.remove(result[number_sign])
# print('*'+str(result))
elif '÷' in result:
number_sign = result.index('÷')
if result[number_sign + 1] == 0 or result[number_sign + 1] == '0':
create_formula(flag_num)
else:
# print(result[number_sign - 1],result[number_sign + 1])
number_num = Fraction(
int(result[number_sign - 1]), int(result[number_sign + 1]))
# print(number_num)
result[number_sign] = number_num
result.remove(result[number_sign - 1])
result.remove(result[number_sign])
# print('÷'+str(result))
elif '+' in result:
number_sign = result.index('+')
number_num = int(
float(result[number_sign - 1]) + float(result[number_sign + 1]))
result[number_sign - 1] = number_num
result.remove(result[number_sign])
result.remove(result[number_sign])
# print('+'+str(result))
elif '-' in result:
number_sign = result.index('-')
number_num = int(
float(result[number_sign - 1]) - float(result[number_sign + 1]))
result[number_sign - 1] = number_num
result.remove(result[number_sign])
result.remove(result[number_sign])
# print('-'+str(result))
result = str(result).replace('[', '').replace(']', '')
# print('------------')
# print(result)
# print('+++++++++++++')
if 'Fraction' in result:
start = result.index('(')
center = result.index(',')
end = result.index(')')
if result[start + 1] == 0 or result[start + 1] == '0':
result = 0
else:
result = str(result)[start+1:center] + \
'/' + str(result)[center+1:end]
# print(result)
# print(start,center,end)
# print(formula)
return result, formula