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
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
|