python 实现加减乘除_Python实现四则运算

1 importrandom2 importre3 #is_mul表示是否有乘除法,0表示无(加减法),1表示有乘除法

4 is_mul = 1

5 #is_brackets表示是否有括号,0表示无,1表示有括号

6 is_brackets = 1

7 #num_min表示随机数的最小值,num_max表示随机数的最大值

8 num_min =09 num_max = 100

10 #is_positive表示结果(包括中间计算过程)是否是正数,0表示可以不为正数,1表示结果为正数,默认为1结果为正数

11 is_positive = 1

12 #is_divide表示是否是整除,0表示可以不为整除,1表示是整除,默认为整除

13 is_divide = 1

14 #list_sign符号列表

15 list_sigh = ['+', '-', '*', '/']16 #所需算式的数量,默认为100

17 amount = 5

18 #是否保证结果在100以内,0表示不需在100以内,1表示结果保证在100以内

19 is_within =020 #打印方式,0表示只打印题目,1表示打印题目加答案

21 print_type =022 #一行打印几道题

23 print_num = 3

24

25

26 #添加括号函数,当在第二项添加括号时,返回值为2

27 defadd_brackets(num1, num2, num3, sign1, sign2):28 #print(str(num1)+list_sigh[sign1]+str(num2)+list_sigh[sign2]+str(num3))

29 #如果都为加减法

30 if (sign1 < 2 and sign2 < 2) or (sign1 > 2 and sign2 > 2):31 #print("同号")

32 s = str(num1)+list_sigh[sign1]+'('+str(num2)+list_sigh[sign2]+str(num3)+')'

33 else:34 #print("异号")

35 #异号时在+-时加括号

36 if sign1 < 2:37 s = '('+str(num1)+list_sigh[sign1]+str(num2)+')'+list_sigh[sign2]+str(num3)38 else:39 s = str(num1)+list_sigh[sign1]+'('+str(num2)+list_sigh[sign2]+str(num3)+')'

40 returns41

42

43 #判断减法

44 defjudge_subtraction(num1, num2):45 if is_positive == 0: #当结果可以为负数时,不需要判断直接返回True

46 returnTrue47 else:48 r = num1 -num249 if r <0:50 #print('减法出现负数')

51 returnFalse52 else:53 #print('减法为正数')

54 returnTrue55

56

57 #判断除法

58 defjudge_division(num1, num2):59 if num2 ==0:60 #print('除数为0')

61 returnFalse62 if is_divide == 0: #表示除法可以不为整除,直接返回True

63 returnTrue64 else:65 r = num1 %num266 if r ==0:67 #print('整除')

68 returnTrue69 else:70 #print('有余数')

71 returnFalse72

73

74 #含单个运算符的运算

75 defcalculate_single(num1, num2, sign):76 if sign == '-':77 returnjudge_subtraction(num1, num2)78 elif sign == '/':79 returnjudge_division(num1, num2)80 else:81 returnTrue82

83

84 #按顺序从前向后算

85 defcalculate_order(num_list, sign_list):86 if calculate_single(num_list[0], num_list[1], sign_list[0]):87

88 t = eval(str(num_list[0]) + sign_list[0] + str(num_list[1]))89 if calculate_single(t, num_list[2], sign_list[1]):90 returnTrue91 else:92 returnFalse93 else:94 returnFalse95

96

97 #先算后项,在算前项

98 defcalculate_exchange(num_list, sign_list):99 if calculate_single(num_list[1], num_list[2], sign_list[1]):100 t = eval(str(num_list[1]) + sign_list[1] + str(num_list[2]))101 #print(t)

102 ifcalculate_single(num_list[0], t, sign_list[0]):103 returnTrue104 else:105 returnFalse106 else:107 returnFalse108

109

110 #判断生成的算式是否符合要求

111 defjudge_function(ss):112 #提取算式中的数字

113 num_list = re.findall(r'\d+', ss)114 num_list = [int(x) for x innum_list]115 #提取算式中的+-*/符号

116 sign_list = re.findall(r"[\-\*\+\/]", ss)117 if is_positive == 0 and is_divide ==0:118 #当结果可以不为正数,除法可以不为整除时,直接返回true

119 returnTrue120 else:121 #当需要判断时,进行判断,先判断是否含有减法以及除法,再根据计算顺序进行判断

122 if (ss.find('-') == -1) and (ss.find('/') == -1):123 #算式中不包含除法和减法时,直接返回true

124 #print('不需判断')

125 returnTrue126 else:127 #当要进行减法,除法判断时,分带不带括号,以及运算级来判断先算前项还是先算后项

128 #print('需判断')

129 if ss.endswith(')'):130 #print('括号在后')

131 returncalculate_exchange(num_list, sign_list)132 elif ss.startswith('('):133 #print('括号在前')

134 returncalculate_order(num_list, sign_list)135 elif (sign_list[0] == '-' or sign_list[0] == '+') and (sign_list[1] == '*' or sign_list[1] == '/'):136 #print('先计算二')

137 returncalculate_exchange(num_list, sign_list)138 else:139 #print('先计算一')

140 returncalculate_order(num_list, sign_list)141

142

143 #打印输出函数

144 defprint_function(question_list, answer_list):145 if print_type ==0:146 for i inrange(amount):147 print(question_list[i], end=" ")148 if (i + 1) % print_num ==0:149 print('\n')150 else:151 for i inrange(amount):152 print(question_list[i], "=", answer_list[i], end=" ")153 if (i + 1) % print_num ==0:154 print('\n')155

156

157 #num1,num2,num3表示生成的三个随机数

158 defmain():159 i =0160 question_list =[]161 answer_list =[]162 globalis_mul, is_brackets, num_min, num_max, is_positive, is_divide, amount, is_within, print_type, print_num163 is_mul = int(input("是否需要乘除法?0表示不需要,1表示需要:"))164 is_brackets = int(input("是否需要括号?0表示不需要,1表示有括号:"))165 num_min = int(input("请输入运算数的最小值:"))166 num_max = int(input("请输入运算数的最大值:"))167 amount = int(input("请输入需要运算式的数量:"))168 is_within = int(input("结果是否需要保证在100以内?0表示不需要,1表示需要:"))169 is_positive = int(input("结果(包括中间运算结果)是否都>=0?0表示可以为负数,1表示都为>=0:"))170 is_divide = int(input("是否都为整除?0表示可以不为整除,1表示都为整除:"))171 print_type = int(input("打印方式?0表示只打印题目,1表示打印题目和结果:"))172 print_num = int(input("一行打印几道题?"))173

174 while i <175 num1="random.randint(num_min," num_max num2="random.randint(num_min," num3="random.randint(num_min,">

179 if is_mul ==0:180 sign1 = random.randint(0, 1)181 sign2 = random.randint(0, 1)182 else:183 sign1 = random.randint(0, 3)184 sign2 = random.randint(0, 3)185 #print(list_sigh[sign1],list[sign2])

186 #判断是否加括号:条件is_brackets为1表示有括号,1/3的概率随机生成括号

187 if is_brackets == 1 and (random.randint(0, 3) % 3) ==0:188 str_form =add_brackets(num1, num2, num3, sign1, sign2)189 else:190 str_form = str(num1)+list_sigh[sign1]+str(num2)+list_sigh[sign2]+str(num3)191 #print(str_form)

192 #print(judge_function(str_form))

193 ifjudge_function(str_form):194 result =eval(str_form)195 #当需要保证结果在100以内且结果在0-100以内,或者不需结果在100以内时,将结果加入列表中

196 if (is_within == 1 and 100 >= result >= 0) or is_within ==0:197 question_list.append(str_form)198 answer_list.append(result)199 i = i+1

200 print_function(question_list, answer_list)201

202

203 if __name__ == '__main__':204 main()

175>