实验三 Python表达式

本系列博客介绍了如何将数学表达式转换为Python代码,涉及具体值表达式、数学函数、变量赋值以及解决实际问题的应用。内容涵盖了Python中的运算符、math库函数、变量定义与赋值、实际问题的数学模型建立等,通过实例展示了如何利用Python进行计算和判断。
摘要由CSDN通过智能技术生成

第1关:具体值表达式的转换

任务描述

本关主题是具体值组成的表达式的建模,实践如何将这样的数学表达式转换成Python表达式。

本关任务:仔细阅读背景知识,找到数学运算符与Python数值运算符之间的对应关系,将下面数学表达式转换为Python表达式,并用print语句打印结果。

例如,对数学表达式1+1,对应的Python表达式和结果输出语句为print(1+1)

请用print语句输出下列数学表达式的值,或实际问题的答案。

相关知识(略)

编程要求

根据提示,在右侧编辑器Begin-End处补充代码,完成如下要求:

第一题

1234除以123的余数。

第二题

某个国家的人均寿命是90岁,请问人均能活多少秒?

第三题

123/12的商。

第四题

123/12的值。

第五题

请问一个新生儿能活十亿秒吗?即计算并输出十亿秒是多少年。

第六题

33+43+53=63是否成立?

第七题

分别计算1.023651.01365,可知“多百分之一努力,得千分收成”。

第八题

计算并判断1.013∗0.992是否大于1.01,输出判断结果。可知“三天打鱼,两天晒网,终将一无所获”。

测试说明

直接输出每道题的答案,每个答案占一行,中间不能空行。

注意:请不要直接print最终数字,否则平台发现此类情况后,将一律扣掉本关经验值,并且追加处罚措施。

祝你成功!

代码:

def print_(x):
    if type(x) == float:
        print("%.4f" % x)
    else:
        print(x)
# ********** Begin ********** #
#请在每一题的print语句内完成题目所需的表达式

#第一题
print_(1234%123)

#第二题
print_(90*365*24*60*60)

#第三题
print_(int(123/12))

#第四题
print_(123/12)

#第五题
print_(1000000000/(60*60*24*365))

#第六题:要求编写两式比较的表达式,输出为True或False
print_(bool(3*3*3+4*4*4+5*5*5==6*6*6))

#第七题
print_(1.02**365)
print_(1.01**365)

#第八题:要求编写两式比较的表达式,输出为True或False
print_(bool(((1.01**3)*(0.99**2))>1.01))
# ********** End ********** #

第2关:Python数学函数

任务描述

本关任务:仔细阅读下面的相关知识,找到数学函数与Python数学函数之间的对应关系,将下面数学表达式转换为Python表达式,并用print语句打印结果。

相关知识

本关主题是对包含特殊运算符的表达式的建模,实践如何利用Python数学函数将这样的数学表达式转换成Python表达式。

Python一个很吸引人的特点是其外围库非常丰富。math模块中定义了非常丰富的数学函数,可以在命令提示符下运行下述命令查看所有预定义的数学函数:

或:

下面列出一些常用的数学函数,请仔细阅读,通过完成本关任务,了解和掌握math库中数学函数的使用。

  • abs(x):返回整数的绝对值,如abs(-10)返回10

  • ceil(x):返回数字的向上取整,如math.ceil(4.1)返回5

  • exp(x):返回ex次幂,如math.exp(1)返回2.718281828459045

  • fabs(x):返回浮点数的绝对值,如math.fabs(-10) 返回10.0

  • floor(x):返回数字的向下取整,如math.floor(4.9)返回4

  • log(x,base):如math.log(math.e,math.e)返回1.0math.log(100,10)返回2.0

  • log10(x):返回以10为基数的x的对数,如math.log10(100)返回2.0

  • max(x1,x2,...):返回给定参数的最大值,参数可以为序列。

  • min(x1,x2,...):返回给定参数的最小值,参数可以为序列。

  • modf(x):以元组的形式返回,(小数部分,整数部分)。两部分的数值符号与x相同,整数部分以浮点型表示。

  • pow(x, y)xy运算后的值。

  • round(x [,n]):返回浮点数x的四舍五入值,如给出n值,则代表舍入到小数点后的位数。

  • sqrt(x):返回数字x的平方根,返回类型为实数,如math.sqrt(4)返回2.0

  • acos(x):返回x的反余弦弧度值。

  • asin(x):返回x的反正弦弧度值。

  • atan(x):返回x的反正切弧度值。

  • atan2(y, x):返回给定的XY坐标值的反正切值。

  • cos(x):返回x的弧度的余弦值。

  • hypot(x, y):返回欧几里德范数sqrt(x2+y2)

  • sin(x):返回x弧度的正弦值。

  • tan(x):返回x弧度的正切值。

  • degrees(x):将弧度转换为角度,如degrees(math.pi/2) , 返回90.0

  • radians(x):将角度转换为弧度

除了上述常用的数学函数,math库中还定义了两个常用的数学常量:

  • pi——圆周率,一般以π来表示。

  • e——自然常数。

一般有两种常用方法来使用math中的函数:

import math
print(math.abs(3))

或:

from math import *
print(abs(3))

编程要求

根据提示,在右侧编辑器Begin-End处补充代码,本关需要你编程计算的数学表达式或实际问题包括以下五题。

第一题

分别计算并输出π4+π5e6的值,以及二者的差。

第二题

分别计算4π​4arctan(51​)−arctan(2391​)的值,并观察其差异。

第三题

分别计算并输出cos(172π​)161​[−1+17​+2(17−17​)​+217+317​−2(17−17​)​−22(17+17​)​​],及二者的差。

第四题

计算21+5​​+2​−21+5​​

第五题

分别计算并输出sinh(0.25)2(e0.25−e−0.25)​的值,查看并比较二者的大小。

测试说明

右侧代码编辑区已设置好具体输出格式,你只需要在指定位置填写Python代码即可。

注意:请不要直接print最终数字,否则平台发现此类情况后,将一律扣掉本关经验值,并且追加处罚措施。

祝你成功!

代码:

from math import *

def print_(x):
    if type(x) == float:
        print("%.4f" % x)
    else:
        print(x)
# ********** Begin ********** #
#请在每一题的print语句内完成题目所需的表达式

#第一题
print_(pi**4+pi**5)
print_(exp(6))
print_(pi**4+pi**5-exp(6))

#第二题
print_(pi/4)
print_(4*atan(1/5)-atan(1/239))

#第三题
print_(cos((2*pi)/17))
a = cos((2*pi)/17)
b = (-1) + pow(17,1/2)
c = pow(2*(17-pow(17,1/2)),1/2)
d = 2*pow(2*(17+pow(17,1/2)),1/2)
e = 17+3*pow(17,1/2)
f = 2*pow((e-c-d),1/2)
g = (1/16)*(b+c+f)
h = a-g
print_(g)
print_(h)
#第四题
i = (1+pow(5,1/2))/2
j = pow(i+2,1/2)-i
print_(j)
#第五题
print_(sinh(0.25))
k = exp(0.25)-exp(-0.25)
l = k/2
print_(l)

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

第3关:变量与赋值

任务描述

仔细阅读下面的介绍,理解变量的定义、其与值的关联关系,以及赋值语句的语法与功能,将下面数学表达式转换为Python表达式,并用print语句打印结果。

相关知识

本关主题是实践和体验Python变量的用途,学会使用Python赋值语句实现表达式值的传递。

在前面两关中,所有表达式都由具体值构成,如17172π​等,这些值又称为常量,因为其值在程序运行过程中不能再被改变。与此对应,Python的变量的值在程序运行过程中是可被修改的。

现实世界中大部分表达式中的运算数是可变的,并不是固定成一个值的。如求圆面积公式s=πr2,其中的r是可变的,对不同半径的圆,求面积的方法是一样的,只是r的值有差别。那么,需要变量和赋值语句的帮助,来这类表达式转换为Python表达式和语句。

此外,需要主要的是,数学公式s=πr2中,πr之间省略了乘号,在数学上这是允许的,但是转换成Python表达式时,不能省略,否则会产生语法错。

可将变量看作是为某个对象起的名字,它提供了名字与对象关联的方式。考虑下面的代码:

  1. mypi=3.1415926
  2. r=1.2
  3. length=2*mypi*radius
  4. r=24.3

这段代码首先用名字pir分别与不同的float类型对象3.14159261.2关联。然后,用名字length与第三个float类型对象2*mypi*radius关联,如下图(a)所示。如果该程序继续执行语句r=24.3,则名字r将与另一个float类型对象24.3关联,如下图(b)所示。

请记住,在Python中,变量是而且仅是一个名字而已。赋值语句用赋值运算符=将右边符号(常量、变量、表达式、函数调用等)所代表的对象与左边的名字进行关联。这种关联不是一对一的,因此,一个对象可以有一个、多个,甚至没有名字与它关联。

Python语法规定变量名(又称为标识符)可以包含大写字母、小写字母和数字(但不能以数字开头),以及特殊字符_(下划线)。Python中标识符是区分大小写的,例如,Rr是不同的标识符。

Python保留了一些标识符作为保留关键字,这些关键字具有特定含义,不能被用作变量名,包括:andasassertbreakclasscontinuedefdelelifelseexceptexecfinallyforfromglobalifimportinislambdanotorpassprintraisereturntrywithwhileyield等。

Python允许多重赋值,语句x, y = 2, 3表示将x2关联,y3关联。多重赋值带来很多方便,例如可用一条语句实现两个变量值的交换,运行下面的代码,可以看到变量xy的值进行了交换:

  1. x, y = 2, 3
  2. x, y = y, x
  3. print('x =', x)
  4. print('y =', y)

编程要求

根据提示,在右侧编辑器Begin-End处补充代码,请编程输出以下数学表达式或实际问题的最终答案:

第一题

根据下面将摄氏温度转换为华氏温度的公式,在指定的位置编写程序,计算华氏温度值:F=59​C+32。

第二题

钟形高斯函数如下所示,请在指定位置编写程序,计算不同参数下的结果。 f(x)=2πs​1​e[−21​(sx−m​)2]

第三题

请在指定位置编写程序,按下面公式计算sinh(x)的值。 sinh(x)=2ex−e−x​

第四题

垂直向上抛出小球,设小球初始速度为v0​,则小球运动过程中离抛出点的高度距离公式为: y=v0​t−21​gt2 其中g是重力加速度,值为9.8t表示时间。请在指定位置编写程序,计算在给定初速度下,所给时刻,小球的高度。

测试说明

右侧代码编辑区已设置好具体输出格式,你只需要在指定位置填写Python代码即可。

注意:请不要直接print最终数字,否则平台发现此类情况后,将一律扣掉本关经验值,并且追加处罚措施。

祝你成功!

代码:

from math import *

def print_(x):
    if type(x) == float:
        print("%.4f" % x)
    else:
        print(x)
# ********** Begin ********** #
#第一题
for temperature in [-271, -100, 0, 100, 1000]:
    #请在下面编写代码
    F = (9/5)*temperature+32
    #请不要修改下面的代码
    print_(F)

print('\n***********************\n')

#第二题
for (m, s, x) in [(0,2,1),(1,2,2),(1,3,4),(1,10,100)]:
    # 请在下面编写代码
    fx = (1/sqrt(2*pi*s))*exp((-1/2)*((x-m)/s)**2)
    # 请不要修改下面的代码
    print_(fx)

print('\n***********************\n')

#第三题
for x in [0.0, pi/2, pi, 3*pi/2, 2*pi, 5*pi/2, 3*pi]:
    # 请在下面编写代码
    sinh = (exp(x)-exp(-x))*(1/2)
    # 请不要修改下面的代码
    print_(sinh)


print('\n***********************\n')

#第四题
g = 9.8
for v0 in [10, 15, 20, 25, 30]:
    for t in [0.0, 0.5, 1, 1.5, 2, 2.5, 3]:
        # 请在下面编写代码
        y  = v0*t-(1/2)*9.8*t*t
        # 请不要修改下面的代码
        print_(y)
    print('***********************')
# ********** End ********** #

第4关:解决实际问题※

任务描述

本关主题是综合利用前三关掌握的知识,解决实际问题。这些问题来源于实际生活的各个方面,通过问题的解决,希望对计算思维有一定的体验和感悟。

本关任务:完成编程要求的相关题目。

相关知识

数据类型

对象是Python程序操作的核心,每个对象都有一个类型,它规定了程序可以对该类型对象进行哪些操作。类型分为标量的和非标量的。标量对象是不可分割的单个对象。非标量对象——例如字符串(String)——通常不是单个的整体,而是有可分解的内部结构的。

Python4种类型的标量对象:

  • int对象用来表示整数。int类型的对象可通过字面直接看出,如39001-72等。

  • float对象用于表示实数。float类型的对象也可通过字面很容易地看出来,如23.09.48-72.28。也可用科学计数法表示float类型的对象,例如,3.9E3代表3.9×103,等同于3900

  • bool是用来表示布尔值,即“真”或“假”,在Python中分别用常量TrueFalse表示。

  • None对象表示空值。

对象和运算符可以构成表达式,表达式运算后会得到一个值,称为表达式的值,这个值就是具有某种类型的一个对象。例如,表达式7+2表示int类型的对象9,而表达式7.0+2.0表示float类型的对象9.0Python==运算符用于比较两个表达式的值是否相等,而!=运算符用于比较两个表达式的值是否不相等。

算术运算符

intfloat类型的运算符及其说明如下所示:

  • i+j:表示对象i和j的和。如果ij都是int类型,运算结果为int类型,如果至少有一个为float类型,结果为float类型。

  • i-j:表示对象ij的差。如果ij都是int类型,运算结果为int类型,如果至少有一个为float类型,结果为float类型。

  • i*j:表示对象ij的乘积。如果ij都是int类型,运算结果为int类型,如果至少有一个为float类型,结果为float类型。

  • i//j:表示整数除法。例如8//2的值为int类型49//4的值为int类型2。即整数除法只取整数商,去掉小数部分。

  • i/j:表示对象i除以对象j,无论ij的类型是int还是float,结果都为float,如10/4结果为2.5

  • i%j:表示int对象i除以int对象j的余数,即数学的“模”运算。

  • i**j:表示对象ij次方。如果ij都是int类型,运算结果为int类型,如果至少有一个为float类型,结果为float类型。

  • 比较运算符>(大于)、>=(大于等于)、<(小于)和<=(小于等于)的含义与其在数学上的含义一样。

算术运算符通常有优先级。例如,表达式x+y*2的计算过程是先算y乘以2,然后将结果与x相加。计算的顺序可以使用括号来改变,例如,(x+y)*2表示先计算xy,然后将结果乘以2

bool类型上的运算有:

  • a and b:与(and)运算,如果bool类型对象ab都为True,结果为True,否则结果为False

  • a or b:或(or)运算,如果bool类型对象ab至少有一个为True,结果为True,否则结果为False

  • not a:非(not)运算,如果bool类型对象aTrue,结果为False;如果为False,结果为True

编程要求

根据提示,在右侧编辑器Begin-End处补充代码,完成如下要求:

第一题

在指定地方编写Python程序来计算、显示通过如下图所示的管道的水流速率。进入管道的水流速率的单位为英尺/秒,管道入口半径和出口半径的单位为英寸。

出口速率的计算公式为:vout​=vin​(rout​rin​​)2,其中vout​为出口速率,vin​为入口速率,rout​为管道出口半径,rin​为管道入口半径。

第二题

圆杆(如下图所示的自行车踏板)的最小半径(能够支撑一个人的脚所施加的压力,而不至于超过附着在曲柄臂链轮的压力)的计算公式为:r3=πSdp​,其中r为圆杆的半径(inches),d为曲柄臂的长度(inches),p为施加在踏板上的重量(lbs),S为每 lbs/in2上的压力。基于上述信息,在右侧指定位置编写一个Python程序根据用户输入来计算r的值。

基于上述信息,在指定位置编写一个Python程序根据用户输入来计算r的值。

第三题

编写出一个Python程序,在给定年限N和复合利率r的情况下,计算当贷款金额为P时,每月需还贷的金额,每月还贷公式为(1+r′)N′−1Pr′(1+r′)N′​,其中r'为月利息。(提示:r′=1200r​N'=N*12)。

第四题

请在指定位置编写程序,将日期作为输入并打印该日期是一周当中的周几。用户输入有三个:m(月)、d(日)、y(年)。对于m,用1表示一月,2表示二月,以此类推。对于输出,0表示周日,1表示周一,2表示周二,以此类推。

对于阳历,如果给定mdy,则计算步骤大致如下(注意其中的除法是整数除法,详见下面的相关知识):

y0​=y−(14−m)/12 x=y0​+4y0​​−100y0​​+400y0​​ m0​=m+12(12(14−m)​)−2 d0​=(d+x+1231∗m0​​)%7

例如:2000214日是周几? y0​=2000−1=1999 x=1999+1999/4−1999/100+1999/400=2483 m0​=2+12∗1−2=12 d0​=(14+2483+(31∗12)/12)%7=2500%7=1 答案:周一

第五题

编写一个计算并打印地球上两点的大圆弧距离的Python程序。该程序接收用户的4个输入x1​,y1​,x2​,y2​(分别表示地球上两个点的维度和经度,单位是度)。大圆弧距离计算公式为(单位是英里):

d=R∗arccos(sin(x1​)∗sin(x2​)+cos(x1​)∗cos(x2​)∗cos(y1​−y2​))

其中R=69.1105英里,1英里=1.609公里。请在指定位置编写程序,所给坐标之间的大圆弧距离,单位是公里。(注意,sincos函数输入是弧度值,而程序中给的是角度值,需要转换。arccos结果是弧度值,需要转化成角度值)。

第六题

根据给定的温度t(华氏温度)和风速v,可以计算出风寒指数,公式如下:

w =35.74+0.6215 t +(0.4275 t −35.75) v0.16

请在指定位置编写程序,根据所给的温度和风速,计算风寒指数。

测试说明

  • 右侧代码编辑区已设置好具体输出格式,你只需要在指定位置填写Python代码即可。

  • 请不要直接print最终数字,否则平台发现此类情况后,将一律扣掉本关经验值,并且追加处罚措施。


祝你成功!

代码:

from math import *

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 = pow((d*p)/(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)]:
    # 请在下面编写代码
    payPerMonth = (P*(r/1200)*(1+r/1200)**(N*12))/((1+r/1200)**(N*12)-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//4-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)]:
    # 请在下面编写代码
    x1=radians(x1)
    y1=radians(y1)
    x2=radians(x2)
    y2=radians(y2)
    R=69.1105*1.609
    dist=R*acos(sin(x1)*sin(x2)+cos(x1)*cos(x2)*cos(y1-y2))*180/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)
    # 请不要修改下面的代码
    print_(w)
# ********** End ********** #

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值