Python第一周周报

上机题目题解

圆台体积计算

参考代码:

Pi=3.14159265358979323846
r=float(input())
R=float(input())
h=float(input())
V=1/3*Pi*h*(r**2+R**2+R*r)
print("%.2f"%V)

按照公式直接计算

%.2f和round的效果是一样的

小明的实验数据

参考代码:

a,b,c=map(float,input().split())
x=(a+b+c)/3
s=(a-x)**2+(b-x)**2+(c-x)**2
s=(s/2)**0.5
print("%.2f %.2f"%(x,s))

这里使用的是%格式化输出,当输出多个变量时需要()把变量括起来.

简单密码

参考代码:

x=int(input())
a=int(input())
b=int(input())
c=int(input())
d=int(input())
print('The cyphertext is %d.'%((x*a-b)*c+d))

按照公式直接计算

ASCLL码

print(chr(ord(input())+32))

因为'a'的ASCLL码'比A'的ASCLL码大32,而且字母的ASCLL码的值是连续的,所以就可以通过ASCLL码+32的方式直接完成转换.上面是简化版写法.

打点计时器

参考代码:

s=[0 for i in range(6)]
v=[0 for i in range(4)]
for i in range(6):
    s[i]=float(input())/100
v_=0
vt_=0
for i in range(4):
    v[i]=(s[i+2]-s[i])/0.1
    v_+=v[i]
    vt_+=v[i]*(0.1+0.05*i)
v_/=4
vt_/=4
t=(0.1+0.15+0.2+0.25)/4
tt=(0.1**2+0.15**2+0.2**2+0.25**2)/4
g=(t*v_-vt_)/(t**2-tt)
print("%.3f"%g)
print("%.5f"%(abs(g-9.8)/9.8))

因为数据有点多,涉及到取平均等计算,这里使用了list(不了解的同学可以自己看一下之后的课件).在计算中间四个点速度的时候,同时也在计算速度的均值以及速度乘以时间的均值.然后带进回归方程中计算即可.

注意平均速度是拿距离差算的,还需要注意的是相对误差的公式,是实际值与理论值之差的绝对值再除以理论值.很多人都WA在了这里.

知识拓展

花式Input

在做题的过程中,可能会碰到各种各样的输入格式,下面列举几种常见的形式作为参考.

a=input("Hello World:")             #单行读入字符串a,并给出一句输入提示
a,b=input().split()                 #单行读入含有一个空格的字符串,并按照空格分隔开,存进a,b中
b=int(input())                      #单行读入单个整数b
b=float(input())                    #单行读入单个浮点数b
a,b=map(int,input().split())        #单行读入用空格隔开的两个整数a,b
a,b=map(float,input().split())      #单行读入用空格隔开的两个浮点数a,b
a=list(map(int,input().split()))    #单行读入不定个整数,从0开始存入列表a中

上面列出的语句基本上可以满足这个学期的做题需求了.请熟练掌握.

Print的参数详解

print()函数是Python的输出函数,也是写代码时最常用的函数之一。下面将介绍一下print函数的完整参数:

print(objects,sep,end,file,flush)

第一个参数是被输出的对象.最后两个参数为一组,与文件输出有关.file控制的是输出到哪个文件中,flush控制的是是否立刻将输出语句输入到参数file指向的对象中.在学习了文件的输入输出操作后会详细解释.

第三个参数end表示输出以什么字符结尾,默认是以换行符/n结尾,也就是说平时在输出完给定的内容之后会自动换行.当然也可以设置成别的形式,比如:

print('123',end=' ')
print('456',end=' ')

大家可以自行尝试一下上面的语句,输出的结果位于同一行.原因是把end默认的换行符改成了给定的一个空格.这种操作通常使用于题目要求的格式化输出中.比方说题目要求你输出计算得出的三个整数,输出到一行中并用加号隔开,就可以写成下面的形式:

print(a,end='+')
print(b,end='+')
print(c)

第二个参数sep表示输出的各个结果之间用什么进行分隔,默认为空格.还是上面那个例子,觉得写三个print太麻烦的话也可以尝试下面这种写法:

print(a,b,c,sep='+')

就可以通过一句print完成输出了.

print的完整形态如下:

f=open('output.txt','w')
print('123','456',sep='+',end=' ',file=f,flush=True)

可以在自己电脑上执行一下上面的语句,然后在代码所在的文件夹里找到output.txt,查看输出结果.

技巧&注意事项补充

  1. 在任何OJ上做题时,不要写任何输入提示,严格按照输入输出格式来.否则一定会被判为WA.

  2. 我校OJ不支持numpy等常用的库(math除外),所以提交的代码里尽量不要调库.(也请不要尝试通过调库等骚操作关掉OJ的服务器,这类危险操作都是被Ban掉的)

  3. Python的int类型其实是有储存上限的,一般取决于你的内存大小.但是在计算的过程中请避免出现太过巨大的数据,因为即使内存够用,你的代码也可能因为大整数计算过于缓慢而超时.

  4. 刷题的话,推荐去洛谷的训练场,一个模块一个模块挨着做就行了.认真刷完新手村所有模块,AK期中考试肯定没有任何问题.
  5. 如果问代码问题的话,强烈推荐使用这个网站贴代码:https://paste.ubuntu.com. Poster随便写,Syntax选Python,Expiration随便选个保留时间,代码复制到下面的框里,然后点最下面的Paste,跳转到一个新的网址,这时把这个网址复制给别人,别人就能看到你的代码了.如果发截图的话,助教有时候一时半会看不出Bug需要自己调试,截图就会很麻烦.
  6. 很多人问为什么样例能过,但是OJ上过不去.通过样例并不能说明任何问题,一个好的样例的标准是无论别人的代码错的多离谱,都能让他算出正确答案.所以在测试完样例后需要自己造3-5组数据自测,自测也没有问题后再在OJ上提交.
  7. 如果通过了自测数据发现OJ上还是过不去,需要自己调试程序.调试的常见方法放到下周的周报里配合循环,if等语句一块讲.
说点什么
支持Markdown语法
好耶,沙发还空着ヾ(≧▽≦*)o
Loading...