四则运算

源码已上传至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编程有许多不会,但是根据老师提供的资料和大神舍友的帮忙,成功写出程序学到了新的知识。

 

转载于:https://www.cnblogs.com/lkx1237/p/10575010.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值