源码已上传至GitHub:https://github.com/lkx1237/-/tree/master
小学生四则运算的自动生成
一、项目需求:实现一个自动生成小学四则运算题目的命令行程序。
1. 生成的题目中计算过程不能产生负数,也就是说算术表达式中如果存在形如e1 − e2的子表达式,那么e1 ≥ e2。
2. 生成的题目中如果存在形如e1 ÷ e2的子表达式,那么其结果应是真分数。
3. 程序一次运行生成的题目不能重复,即任何两道题目不能通过有限次交换+和×左右的算术表达式变换为同一道题目。例如,23 + 45 = 和45 + 23 = 是重复的题目,6 × 8 = 和8 × 6 = 也是重复的题目。3+(2+1)和1+2+3这两个题目是重复的,由于+是左结合的,1+2+3等价于(1+2)+3,也就是3+(1+2),也就是3+(2+1)。但是1+2+3和3+2+1是不重复的两道题,因为1+2+3等价于(1+2)+3,而3+2+1等价于(3+2)+1,它们之间不能通过有限次交换变成同一个题目。
4. 程序应能支持一万道题目的生成。
5. 程序能及时判断对错并给出正确答案
二.Psp表格:
三、项目的代码实现
import random import fractions import string import profile def main(): i=0 result=0 temp=0 print("请输入想要生成的题目数量:") n=input() n=int(n) while i<n: first_num=random.randint(1,10) second_num=random.randint(1,10) third_num=random.randint(1,10) fourth_num=random.randint(1,10) a = random.choice("+-*/") if second_num==1: x=first_num else: f,s=min(first_num,second_num),max(first_num,second_num) x=fractions.Fraction(f,s) if fourth_num==1: y=third_num else: assert isinstance(fourth_num, object) #判断a的数据类型是否为b,isinstance(a,b) 成立则通过,否则失败,控制分母非0条件 th,fo = min(third_num, fourth_num), max(third_num, fourth_num) y = fractions.Fraction(th, fo) if a == "+": result = x + y faker = str(result) print(x, a, y, "=") elif a == "-": x1,y1=max(x,y),min(x,y) result = x1 - y1 faker = str(result) # 生成字符型 print(x1, a, y1, "=") elif a == "*": result = x * y faker = str(result) print(x, "x", y, "=") elif a == "/": result = x / y faker = str(result) print(x, "÷", y, "=") answer = input() if answer=='exit': break elif faker == answer: # 正确 temp = temp + 1 print("right!") else: # 错误 print('error. the right answer is %s' % result) i += 1 print("您答对%d题" % temp) if __name__=="__main__": profile.run("main()")
四、运行测试:
用pofile进行性能测试的结果如下:
4352 function calls (4300 primitive calls) in 0.140 seconds
Ordered by: standard name
ncalls tottime percall cumtime percall filename:lineno(function)
8 0.000 0.000 0.000 0.000 :0(__enter__)
8 0.000 0.000 0.000 0.000 :0(__exit__)
4 0.000 0.000 0.016 0.004 :0(__import__)
17 0.000 0.000 0.000 0.000 :0(__new__)
20 0.000 0.000 0.000 0.000 :0(_abc_instancecheck)
11/5 0.000 0.000 0.000 0.000 :0(_abc_subclasscheck)
4 0.000 0.000 0.000 0.000 :0(_compare_digest)
95 0.000 0.000 0.000 0.000 :0(acquire)
32 0.000 0.000 0.000 0.000 :0(acquire_lock)
4 0.000 0.000 0.000 0.000 :0(add)
4 0.000 0.000 0.000 0.000 :0(all)
32 0.000 0.000 0.000 0.000 :0(allocate_lock)
139 0.000 0.000 0.000 0.000 :0(append)
8 0.000 0.000 0.000 0.000 :0(b2a_hex)
15 0.000 0.000 0.000 0.000 :0(bit_length)
4 0.000 0.000 0.000 0.000 :0(callable)
28 0.000 0.000 0.000 0.000 :0(copy)
8 0.000 0.000 0.000 0.000 :0(count)
24 0.000 0.000 0.000 0.000 :0(decode)
8 0.000 0.000 0.000 0.000 :0(digest)
24 0.000 0.000 0.000 0.000 :0(encode)
32 0.000 0.000 0.000 0.000 :0(end)
1 0.000 0.000 0.140 0.140 :0(exec)
12 0.000 0.000 0.000 0.000 :0(extend)
4 0.000 0.000 0.000 0.000 :0(format)
9 0.000 0.000 0.000 0.000 :0(gcd)
32 0.000 0.000 0.000 0.000 :0(get)
16 0.000 0.000 0.000 0.000 :0(get_ident)
80 0.000 0.000 0.000 0.000 :0(getattr)
38 0.000 0.000 0.000 0.000 :0(getpid)
17 0.000 0.000 0.000 0.000 :0(getrandbits)
2 0.000 0.000 0.000 0.000 :0(gt)
52 0.000 0.000 0.000 0.000 :0(hasattr)
8 0.000 0.000 0.000 0.000 :0(hexdigest)
4 0.000 0.000 0.000 0.000 :0(index)
12 0.000 0.000 0.000 0.000 :0(is_finite)
4 0.000 0.000 0.000 0.000 :0(is_frozen)
56 0.000 0.000 0.000 0.000 :0(isalpha)
140 0.000 0.000 0.000 0.000 :0(isdigit)
340 0.000 0.000 0.000 0.000 :0(isinstance)
8 0.000 0.000 0.000 0.000 :0(isoformat)
16 0.000 0.000 0.000 0.000 :0(isspace)
12 0.000 0.000 0.000 0.000 :0(items)
12 0.000 0.000 0.000 0.000 :0(iter)
40 0.000 0.000 0.000 0.000 :0(join)
143 0.000 0.000 0.000 0.000 :0(len)
4 0.000 0.000 0.000 0.000 :0(ljust)
4 0.000 0.000 0.000 0.000 :0(locals)
8 0.000 0.000 0.000 0.000 :0(lock_held)
48 0.000 0.000 0.000 0.000 :0(lower)
2 0.000 0.000 0.000 0.000 :0(lt)
56 0.000 0.000 0.000 0.000 :0(match)
12 0.000 0.000 0.000 0.000 :0(max)
8 0.000 0.000 0.000 0.000 :0(min)
4 0.000 0.000 0.000 0.000 :0(now)
28 0.000 0.000 0.000 0.000 :0(pop)
8 0.000 0.000 0.000 0.000 :0(print)
112 0.016 0.000 0.016 0.000 :0(read)
8 0.000 0.000 0.000 0.000 :0(release)
32 0.000 0.000 0.000 0.000 :0(release_lock)
24 0.000 0.000 0.000 0.000 :0(replace)
20 0.000 0.000 0.000 0.000 :0(rpartition)
40 0.016 0.000 0.016 0.000 :0(rstrip)
48 0.000 0.000 0.000 0.000 :0(setattr)
1 0.000 0.000 0.000 0.000 :0(setprofile)
8 0.000 0.000 0.000 0.000 :0(split)
16 0.000 0.000 0.000 0.000 :0(startswith)
4 0.000 0.000 0.000 0.000 :0(stat)
4 0.000 0.000 0.000 0.000 :0(sum)
40 0.000 0.000 0.000 0.000 :0(update)
4 0.000 0.000 0.000 0.000 :0(urandom)
4 0.000 0.000 0.000 0.000 :0(utcnow)
16 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:1009(_handle_fromlist)
8 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:103(release)
8 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:143(__init__)
8 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:147(__enter__)
8 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:151(__exit__)
8 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:157(_get_module_lock)
8 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:176(cb)
4 0.000 0.000 0.016 0.004 <frozen importlib._bootstrap>:211(_call_with_frames_removed)
20 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:222(_verbose_message)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:369(__init__)
8 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:416(parent)
8 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:58(__init__)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:719(find_spec)
8 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:78(acquire)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:792(find_spec)
16 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:855(__enter__)
16 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:859(__exit__)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap>:873(_find_spec_legacy)
4 0.000 0.000 0.016 0.004 <frozen importlib._bootstrap>:882(_find_spec)
8/4 0.000 0.000 0.016 0.004 <frozen importlib._bootstrap>:948(_find_and_load_unlocked)
8/4 0.000 0.000 0.016 0.004 <frozen importlib._bootstrap>:978(_find_and_load)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:1203(_path_importer_cache)
4 0.000 0.000 0.016 0.004 <frozen importlib._bootstrap_external>:1240(_get_spec)
4 0.000 0.000 0.016 0.004 <frozen importlib._bootstrap_external>:1272(find_spec)
4 0.000 0.000 0.016 0.004 <frozen importlib._bootstrap_external>:1356(find_spec)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:36(_relax_case)
20 0.000 0.000 0.016 0.001 <frozen importlib._bootstrap_external>:56(_path_join)
20 0.000 0.000 0.016 0.001 <frozen importlib._bootstrap_external>:58(<listcomp>)
4 0.000 0.000 0.000 0.000 <frozen importlib._bootstrap_external>:74(_path_stat)
1 0.016 0.016 0.140 0.140 <ipython-input-1-66baf3a5bb0a>:6(main)
1 0.000 0.000 0.140 0.140 <string>:1(<module>)
16 0.000 0.000 0.000 0.000 __init__.py:183(dumps)
16 0.000 0.000 0.000 0.000 __init__.py:299(loads)
4 0.000 0.000 0.000 0.000 _factories.py:9(__call__)
8 0.000 0.000 0.000 0.000 _parser.py:1008(_find_hms_idx)
8 0.000 0.000 0.000 0.000 _parser.py:1058(_could_be_tzname)
8 0.000 0.000 0.000 0.000 _parser.py:1063(<genexpr>)
4 0.000 0.000 0.000 0.000 _parser.py:1100(_parse_min_sec)
4 0.000 0.000 0.000 0.000 _parser.py:1112(_parsems)
4 0.000 0.000 0.000 0.000 _parser.py:1169(_build_tzaware)
4 0.000 0.000 0.000 0.000 _parser.py:1209(_build_naive)
12 0.000 0.000 0.000 0.000 _parser.py:1242(_to_decimal)
4 0.000 0.000 0.016 0.004 _parser.py:1258(parse)
4 0.000 0.000 0.000 0.000 _parser.py:192(__iter__)
52 0.000 0.000 0.016 0.000 _parser.py:195(__next__)
4 0.000 0.000 0.016 0.004 _parser.py:205(split)
56 0.000 0.000 0.000 0.000 _parser.py:209(isword)
124 0.000 0.000 0.000 0.000 _parser.py:214(isnum)
16 0.000 0.000 0.000 0.000 _parser.py:219(isspace)
4 0.000 0.000 0.000 0.000 _parser.py:227(__init__)
4 0.000 0.000 0.000 0.000 _parser.py:239(__len__)
52 0.000 0.000 0.000 0.000 _parser.py:240(<genexpr>)
8 0.000 0.000 0.000 0.000 _parser.py:325(jump)
8 0.000 0.000 0.000 0.000 _parser.py:328(weekday)
12 0.000 0.000 0.000 0.000 _parser.py:335(month)
12 0.000 0.000 0.000 0.000 _parser.py:342(hms)
8 0.000 0.000 0.000 0.000 _parser.py:348(ampm)
4 0.000 0.000 0.000 0.000 _parser.py:360(tzoffset)
4 0.000 0.000 0.000 0.000 _parser.py:366(convertyear)
4 0.000 0.000 0.000 0.000 _parser.py:386(validate)
4 0.000 0.000 0.000 0.000 _parser.py:400(__init__)
4 0.000 0.000 0.000 0.000 _parser.py:407(has_year)
12 0.000 0.000 0.000 0.000 _parser.py:433(append)
4 0.000 0.000 0.000 0.000 _parser.py:479(resolve_ymd)
4 0.000 0.000 0.000 0.000 _parser.py:487(<dictcomp>)
4 0.000 0.000 0.016 0.004 _parser.py:577(parse)
4 0.000 0.000 0.000 0.000 _parser.py:62(__init__)
4 0.000 0.000 0.016 0.004 _parser.py:668(_parse)
52 0.000 0.000 0.016 0.000 _parser.py:83(get_token)
8 0.000 0.000 0.000 0.000 _parser.py:877(_parse_numeric_token)
20 0.000 0.000 0.000 0.000 abc.py:137(__instancecheck__)
11/5 0.000 0.000 0.000 0.000 abc.py:141(__subclasscheck__)
4 0.000 0.000 0.000 0.000 adapter.py:368(adapt)
16 0.000 0.000 0.000 0.000 decoder.py:332(decode)
16 0.000 0.000 0.000 0.000 decoder.py:343(raw_decode)
16 0.000 0.000 0.000 0.000 encoder.py:104(__init__)
16 0.000 0.000 0.000 0.000 encoder.py:182(encode)
16 0.000 0.000 0.000 0.000 encoder.py:204(iterencode)
4 0.000 0.000 0.000 0.000 error.py:100(__init__)
4 0.000 0.000 0.000 0.000 error.py:26(__init__)
10 0.000 0.000 0.000 0.000 fractions.py:274(numerator)
10 0.000 0.000 0.000 0.000 fractions.py:278(denominator)
11 0.000 0.000 0.000 0.000 fractions.py:287(__str__)
3 0.000 0.000 0.000 0.000 fractions.py:374(forward)
1 0.000 0.000 0.000 0.000 fractions.py:401(_add)
2 0.000 0.000 0.000 0.000 fractions.py:409(_sub)
4 0.000 0.000 0.000 0.000 fractions.py:588(_richcmp)
2 0.000 0.000 0.000 0.000 fractions.py:610(__lt__)
2 0.000 0.000 0.000 0.000 fractions.py:614(__gt__)
9 0.000 0.000 0.000 0.000 fractions.py:84(__new__)
8 0.000 0.000 0.000 0.000 hmac.py:104(copy)
8 0.000 0.000 0.000 0.000 hmac.py:117(_current)
8 0.000 0.000 0.000 0.000 hmac.py:136(hexdigest)
32 0.000 0.000 0.000 0.000 hmac.py:99(update)
55 0.031 0.001 0.062 0.001 iostream.py:195(schedule)
34 0.000 0.000 0.000 0.000 iostream.py:307(_is_master_process)
34 0.000 0.000 0.000 0.000 iostream.py:320(_schedule_flush)
8 0.000 0.000 0.062 0.008 iostream.py:334(flush)
34 0.000 0.000 0.000 0.000 iostream.py:382(write)
55 0.000 0.000 0.000 0.000 iostream.py:93(_event_pipe)
16 0.000 0.000 0.000 0.000 jsonapi.py:31(dumps)
16 0.000 0.000 0.000 0.000 jsonapi.py:47(loads)
12/4 0.000 0.000 0.000 0.000 jsonutil.py:109(json_clean)
12 0.000 0.000 0.000 0.000 jsonutil.py:34(_ensure_tzinfo)
24 0.000 0.000 0.016 0.001 jsonutil.py:47(parse_date)
32/8 0.000 0.000 0.016 0.002 jsonutil.py:62(extract_dates)
8 0.000 0.000 0.000 0.000 jsonutil.py:87(date_default)
4 0.000 0.000 0.125 0.031 kernelbase.py:839(raw_input)
4 0.000 0.000 0.125 0.031 kernelbase.py:856(_input_request)
1 0.000 0.000 0.140 0.140 profile:0(main())
0 0.000 0.000 profile:0(profiler)
4 0.000 0.000 0.000 0.000 py3compat.py:12(no_code)
12 0.000 0.000 0.000 0.000 py3compat.py:188(iteritems)
8 0.000 0.000 0.000 0.000 py3compat.py:19(encode)
12 0.000 0.000 0.000 0.000 random.py:174(randrange)
12 0.000 0.000 0.000 0.000 random.py:218(randint)
15 0.000 0.000 0.000 0.000 random.py:224(_randbelow)
3 0.000 0.000 0.000 0.000 random.py:256(choice)
16 0.000 0.000 0.000 0.000 session.py:102(<lambda>)
16 0.000 0.000 0.000 0.000 session.py:105(<lambda>)
4 0.000 0.000 0.000 0.000 session.py:121(new_id)
12 0.000 0.000 0.000 0.000 session.py:132(<genexpr>)
4 0.000 0.000 0.000 0.000 session.py:169(utcnow)
4 0.000 0.000 0.000 0.000 session.py:236(msg_header)
4 0.000 0.000 0.000 0.000 session.py:242(extract_header)
4 0.000 0.000 0.000 0.000 session.py:509(msg_id)
4 0.000 0.000 0.000 0.000 session.py:561(msg_header)
4 0.000 0.000 0.000 0.000 session.py:564(msg)
8 0.000 0.000 0.000 0.000 session.py:583(sign)
4 0.000 0.000 0.000 0.000 session.py:598(serialize)
4 0.000 0.000 0.016 0.004 session.py:657(send)
4 0.000 0.000 0.000 0.000 session.py:739(<listcomp>)
4 0.000 0.000 0.031 0.008 session.py:786(recv)
4 0.000 0.000 0.000 0.000 session.py:820(feed_identities)
4 0.000 0.000 0.000 0.000 session.py:857(_add_digest)
4 0.000 0.000 0.016 0.004 session.py:881(deserialize)
4 0.000 0.000 0.000 0.000 session.py:936(<listcomp>)
4 0.000 0.000 0.000 0.000 six.py:184(find_module)
83 0.031 0.000 0.031 0.000 socket.py:334(send)
4 0.000 0.000 0.016 0.004 socket.py:394(send_multipart)
8 0.016 0.002 0.031 0.004 socket.py:441(recv_multipart)
63 0.016 0.000 0.016 0.000 threading.py:1038(_wait_for_tstate_lock)
63 0.000 0.000 0.016 0.000 threading.py:1080(is_alive)
8 0.000 0.000 0.000 0.000 threading.py:216(__init__)
8 0.000 0.000 0.000 0.000 threading.py:240(__enter__)
8 0.000 0.000 0.000 0.000 threading.py:243(__exit__)
8 0.000 0.000 0.000 0.000 threading.py:249(_release_save)
8 0.000 0.000 0.000 0.000 threading.py:252(_acquire_restore)
8 0.000 0.000 0.000 0.000 threading.py:255(_is_owned)
8 0.000 0.000 0.000 0.000 threading.py:264(wait)
8 0.000 0.000 0.000 0.000 threading.py:499(__init__)
63 0.000 0.000 0.000 0.000 threading.py:507(is_set)
8 0.000 0.000 0.000 0.000 threading.py:534(wait)
140 0.000 0.000 0.000 0.000 traitlets.py:526(get)
140 0.000 0.000 0.000 0.000 traitlets.py:545(__get__)
4 0.000 0.000 0.000 0.000 tz.py:69(utcoffset)
五、项目小结
程序仍有一处不足之处是只能进行一个运算符的四则运算,初次接触python编程有许多不会,但是根据老师提供的资料和大神舍友的帮忙,成功写出程序学到了新的知识。