数据类型不对,你已经转为 int 和 float 了,而在函数中,你用的是字符串比较
任务描述
本关主题是综合利用前三关掌握的知识,解决实际问题。这些问题来源于实际生活的各个方面,通过问题的解决,希望对计算思维有一定的体验和感悟。
本关任务:完成编程要求的相关题目。
相关知识
数据类型
对象是Python程序操作的核心,每个对象都有一个类型,它规定了程序可以对该类型对象进行哪些操作。类型分为标量的和非标量的。标量对象是不可分割的单个对象。非标量对象——例如字符串(String)——通常不是单个的整体,而是有可分解的内部结构的。
Python有4种类型的标量对象:
int对象用来表示整数。int类型的对象可通过字面直接看出,如3、9001或-72等。
float对象用于表示实数。float类型的对象也可通过字面很容易地看出来,如23.0、9.48或-72.28。也可用科学计数法表示float类型的对象,例如,3.9E3代表3.9×10
3
,等同于3900。
bool是用来表示布尔值,即“真”或“假”,在Python中分别用常量True和False表示。
None对象表示空值。
对象和运算符可以构成表达式,表达式运算后会得到一个值,称为表达式的值,这个值就是具有某种类型的一个对象。例如,表达式7+2表示int类型的对象9,而表达式7.0+2.0表示float类型的对象9.0。Python中==运算符用于比较两个表达式的值是否相等,而!=运算符用于比较两个表达式的值是否不相等。
算术运算符
int和float类型的运算符及其说明如下所示:
i+j:表示对象i和j的和。如果i和j都是int类型,运算结果为int类型,如果至少有一个为float类型,结果为float类型。
i-j:表示对象i与j的差。如果i和j都是int类型,运算结果为int类型,如果至少有一个为float类型,结果为float类型。
i*j:表示对象i与j的乘积。如果i和j都是int类型,运算结果为int类型,如果至少有一个为float类型,结果为float类型。
i//j:表示整数除法。例如8//2的值为int类型4,9//4的值为int类型2。即整数除法只取整数商,去掉小数部分。
i/j:表示对象i除以对象j,无论i和j的类型是int还是float,结果都为float,如10/4结果为2.5。
i%j:表示int对象i除以int对象j的余数,即数学的“模”运算。
i**j:表示对象i的j次方。如果i和j都是int类型,运算结果为int类型,如果至少有一个为float类型,结果为float类型。
比较运算符>(大于)、>=(大于等于)、<(小于)和<=(小于等于)的含义与其在数学上的含义一样。
算术运算符通常有优先级。例如,表达式x+y*2的计算过程是先算y乘以2,然后将结果与x相加。计算的顺序可以使用括号来改变,例如,(x+y)*2表示先计算x加y,然后将结果乘以2。
bool类型上的运算有:
a and b:与(and)运算,如果bool类型对象a和b都为True,结果为True,否则结果为False。
a or b:或(or)运算,如果bool类型对象a和b至少有一个为True,结果为True,否则结果为False。
not a:非(not)运算,如果bool类型对象a为True,结果为False;如果为False,结果为True。
)
N
′
=
1200
r
,N’=N*12)。
第四题
请在指定位置编写程序,将日期作为输入并打印该日期是一周当中的周几。用户输入有三个:m(月)、d(日)、y(年)。对于m,用1表示一月,2表示二月,以此类推。对于输出,0表示周日,1表示周一,2表示周二,以此类推。
对于阳历,如果给定m,d,y,则计算步骤大致如下(注意其中的除法是整数除法,详见下面的相关知识):
y
0
=y−(14−m)/12
x=y
0
+
4
y
0
−
100
y
0
+
400
y
0
m
0
=m+12(
12
(14−m)
)−2
d
0
=(d+x+
12
31∗m
0
)%7
例如:2000年2月14日是周几?
y
0
=2000−1=1999
x=1999+1999/4−1999/100+1999/400=2483
m
0
=2+12∗1−2=12
d
0
=(14+2483+(31∗12)/12)%7=2500%7=1
答案:周一
第五题
编写一个计算并打印地球上两点的大圆弧距离的Python程序。该程序接收用户的4个输入x
1
,y
1
,x
2
,y
2
(分别表示地球上两个点的维度和经度,单位是度)。大圆弧距离计算公式为(单位是英里):
d=R∗arccos(sin(x
1
)∗sin(x
2
)+cos(x
1
)∗cos(x
2
)∗cos(y
1
−y
2
))
其中R=69.1105英里,1英里=1.609公里。请在指定位置编写程序,所给坐标之间的大圆弧距离,单位是公里。(注意,sin、cos函数输入是弧度值,而程序中给的是角度值,需要转换。arccos结果是弧度值,需要转化成角度值)。
第六题
根据给定的温度t(华氏温度)和风速v,可以计算出风寒指数,公式如下:
w =35.74+0.6215 t +(0.4275 t −35.75) v
0.16
请在指定位置编写程序,根据所给的温度和风速,计算风寒指数。
测试说明
右侧代码编辑区已设置好具体输出格式,你只需要在指定位置填写Python代码即可。
请不要直接print最终数字,否则平台发现此类情况后,将一律扣掉本关经验值,并且追加处罚措施。
import math
def print_(x):
if type(x) == float:
print("%.4f" % x)
else:
print(x)
# ********** Begin ********** #
#第一题
for (vin, rin, rout) in [(10, 10, 5), (10, 10, 10), (20, 20, 5), (20, 20, 10)]:
#请在下面编写代码
vout=vin*(rin/rout)**2#注意乘号
#请不要修改下面的代码
print_(vout)
print('\n***********************\n')
#第二题
for (d, p, S) in [(7,300,10000),(7,400,15000),(10,400,12000),(15,400,12000)]:
# 请在下面编写代码
r=(d*p/(math.pi*S))**(1/3)#如何转换三次方
# 请不要修改下面的代码
print_(r)
print('\n***********************\n')
#第三题
for (P, N, r) in [(300000,10,6.5), (300000,20,6.5),(300000,30,6.5)]:
# 请在下面编写代码
r1=r/1200
N1=N*12
payPerMonth=(P*r1*(1+r1)**N1)/((1+r1)**N1-1)
# 请不要修改下面的代码
print_(payPerMonth)
print('\n***********************\n')
#第四题
for (m,d,y) in [(1,1,2017), (2,14,2017), (5,1,2017), (6,1,2017),(7,1,2017),(12,25,2017)]:
# 请在下面编写代码
y0=y-(14-m)//12
x=y0+y0//3-y0//100+y0//400
m0=m+12*((14-m)//12)-2
d0=(d+x+31*m0//12)%7
# 请不要修改下面的代码
print_(d0)
print('\n***********************\n')
#第五题
for (x1,y1,x2,y2) in [(48.87,-2.33,37.8,-122.4),(40.89,116.50,37.8,-122.4),(40.89,116.50,48.87,-2.33)]:
# 请在下面编写代码
#sin(x弧度)
#x/180*math.pi
#s1=math.sin(x1/180*math.pi)
#s2=math.sin(x2/180*math.pi)
R=69.1105*1.609
#c1=math.cos(x1/180*math.pi)
#c2=math.cos(x2/180*math.pi)
#c12=math.cos((y1-y2)/180*math.pi)
x1=x1*math.pi/180
x2=x2*math.pi/180
y1=y1*math.pi/180
y2=y2*math.pi/180
dist=R*math.acos(math.sin(x1)*math.sin(x2)+math.cos(x1)*math.cos(x2)*math.cos(y1-y2))
dist=dist*180/math.pi
# 请不要修改下面的代码
print_(dist)
print('\n***********************\n')
#第六题
for (t, v) in [(32,10), (32, 100), (40, 10), (40, 100)]:
# 请在下面编写代码
w=35.74+0.6215*t+(0.4275*t-35.75)*(v**0.16)#hh又忘了乘号
# 请不要修改下面的代码
print_(w)
# ********** End ********** #