Python 计算思维训练——输入和错误处理练习(二)答案

第1关:读取用户输入的公式参数

def Eval():
    #读取用户输入的公式参数,并输出计算结果
    #   请在此添加实现代码   #
    # ********** Begin *********#
    g=9.81
    t=int(input())
    v0=int(input())
    print("t=?",end='')
    print("v0=?",end='')

    yt=v0*t-g*(t**2)*1/2
    
    print(yt)
测试输入:
10
0

—— 预期输出 ——
t=?v0=?-490.5  

第2关:异常处理 - 测试输入数据的有效性

def Eval():
    #读取用户输入的公式参数,检查有效性,并输出计算结果
    #   请在此添加实现代码   #
    # ********** Begin *********#
    g=9.81
    t=int(input())
    v0=int(input())
    print("t=?",end='')
    print("v0=?",end='')
    
    if 0>t or t>2*v0/g:
        raise ValueError('t必须在0到2v0/g之间')


    yt=v0*t-g*(t**2)*1/2
    
    print(yt)
测试输入:
-1
10

—— 预期输出 ——
t=?v0=?t必须在0到2v0/g之间

第3关:读取文件中的数据计算公式

def Eval(path):
    output = "step3/out.txt"
    g = 9.81
    #读取数据
    ifile = open(path,'r')
    ls = ifile.readlines()
    v0 = float(ls[0].split()[-1])
    t=[]
    for i in range(2,len(ls)):
        for k in ls[i].split():
            t.append(float(k))
    ifile.close();
    #排序
    t.sort()
    #计算
    ofile = open(output,'w')
    ofile.write('v0 = %.10f\n' % v0)
    ofile.write('t\t\ty\n')
    for k in t:
        if(k < 0 or k > 2*v0/g):
            ofile.write('%.10f\tInvalid\n' % (k))
        else:
            y = v0*k-0.5*9.81*k*k
            ofile.write('%.10f\t%.10f\n' % (k,y))
    ofile.close()

    # ********** End **********#
测试输入:
step3/data.txt

—— 预期输出 ——

v0 = 3.0000000000
t		y
0.0420000000	0.1173475800
0.0519085000	0.1425090149
0.1559200000	0.3485143174
0.2134261900	0.4168521973
0.2700000000	0.4524255000
0.2807500000	0.4556351409
0.3500000000	0.4491375000
0.3680788900	0.4396971203
0.5062001700	0.2617501176
0.5280000000	0.2165644800
0.5768150188	0.0984752057
0.7500000000	Invalid
1.0000000000	Invalid

第4关:根据测试函数写出原函数

#assert+空格+判断语句+','+“报错语句”
def halve(a):
    #针对test_halve测试函数
    #   请在此添加实现代码   #
    # ********** Begin *********#
#halve函数返回它的参数x的一半。
#整除5.0/2 = 2.5 ;(//代表向下取整):5.0//2 = 2.0

#判断a的类型
    if isinstance(a,int):#isinstance() 函数来判断一个对象是否是一个已知的类型
        return a//2
    return a/2
'''
>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
True
'''
    # ********** End **********#
    
def add(a,b):
    #针对test_add测试函数
    #   请在此添加实现代码   #
    # ********** Begin *********#

    return a+b


    # ********** End **********#
    
def equal(a,b):
    #针对test_equal测试函数
    #   请在此添加实现代码   #
    # ********** Begin *********#
    if a==b:
        return True,a
    r=''
    lens = max(len(a),len(b))
    for i in range(lens):
        try:
            x=a[i]
        except IndexError:
            x='*'
        try:
            y=b[i]
        except IndexError:
            y='*'
        if x==y:
            r = r+x
        else:
            r=r+x+'|'+y
    return False,r

    
#try,except函数
 


    # ********** End **********#

第5关:计算汽车停止所需的距离

def Eval():
    #读取用户输入的公式参数,并输出计算结果
    #   请在此添加实现代码   #
    # ********** Begin *********#
    g=9.81

    u=int(input("u=?"))
    v0=float(input("v0=?"))
    v0=v0/3.6
    d=v0**2/(2*u*g)
    print(d)
    #不要用format输出,测试集2会报错

    # ********** End **********#
测试输入:
120
0.3

—— 预期输出 ——

u=?v0=?2.9495601615887035e-06
  • 12
    点赞
  • 44
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值