第一阶段 Python初体验
实验一 欢迎进入Python世界--Hello world
第1关:Hello Python,我来了!
任务描述
Python 编程语言具有简洁、易读等特点,并提供了交互式编程以及脚本编程两种不同的模式,学习者很容易上手。 本关的任务是: (1)完成打印Hello world
、整数加减法以及利用Help
命令查询相应内置函数的使用等; (2)利用 Python 提供的print()
内置函数打印输出Hello world
。
# coding=utf-8
# 请在此处添加代码完成输出“Hello Python”,注意要区分大小写!
########## Begin ##########
print('Hello Python')
########## End ##########
实验二 python初探
第1关:基本输入输出
任务描述
本关任务:编写一个程序,依次输入用户的学号,姓名和手机号码 再依次输出相关信息。为了完成本关任务,你需要掌握: 1.如何输入数据 2.如何输出
x = input("请输入学号")
y = input("请输入姓名")
h = input("请输入电话")
print("学号"+" "+x)
print("姓名"+" "+y)
print("电话"+" "+h)
第2关:计算长方形的周长和面积
任务描述
本关任务:输入长方形的长和宽,计算并输出长方形的周长和面积。
相关知识
为了完成本关任务,你需要掌握: 1.如何将字符数据转换为数值 2.赋值语句
c=eval(input('请输入长'))
k=eval(input('请输入宽'))
circle=2*int(c)+2*int(k)
area=int(c)*int(k)
#代码结束
print('长方形的周长是',circle)
print('长方形的面积是',area)
第3关:基本的原油金额计算
任务描述
本关任务: 石油桶数是常见的原油数量单位。 欧佩克组织和英美等西方国家原油数量单位通常用桶来表示,中国及俄罗斯等国则常用吨作为原油数量单位。 吨和桶之间的换算关系是:1桶(bbl)=0.14吨(t) 编写程序输入原油的价格和带有单位的数量,计算并显示其需要的美元金额。输入时价格以美元/桶为单位,数量可以以桶或吨为单位,10bbl表示10桶,2t表示2吨。
#油气产量换算程序
jg=input("请输入原油价格")
sy=input("请输入原油数量")
#代码开始
if sy[-3:]=="bbl":
print("{:.2f}".format(int(jg)*int(sy[:-3])))
elif sy[-1]=="t":
t=float(sy[:-1])/0.14
print("{:.2f}".format(eval(jg)*t))
else:
print("输入格式错误")
第4关:循环原油金额换算
任务描述
本关任务:编写一个循环实现原油金额计算的程序。用户输入原油价格和带有单位的数量,计算并显示金额。用户可连续输入带有单位的字符,直到用户输入n或N。
相关知识
为了完成本关任务,你需要掌握: 如何执行循环语句
jg= eval(input("请输入原油价格"))
sy = input("请输入原油数量")
#代码开始
while sy != 'N' and sy != 'n':
if sy[-1] == 't':
print("{:.2f}".format(eval(sy[:-1])/0.14*jg))
elif sy[-3:] == "bbl":
print("{:.2f}".format(eval(sy[:-3])*jg))
else:
print("输入格式错误")
sy = input("请输入原油数量")
#代码结束
第5关:BMI指数判断
任务描述
BMI指数(身体质量指数,简称体质指数又称体重指数,英文为Body Mass Index,简称BMI),是用体重公斤数除以身高米数平方得出的数字,是目前国际上常用的衡量人体胖瘦程度以及是否健康的一个标准。 bmi小于18.5,为体重过低;bmi18.5-24(包含24),为体重正常;bmi为24-28(包含28),为体重超重;bmi超过28,为体重肥胖。
输入身高和体重,显示其分类
sg=eval(input("身高"))
tz=eval(input("体重"))
#代码开始
bmi=tz/(sg*sg)
if bmi<18.5:
print("体重过低")
elif 18.5<bmi<=24:
print("体重正常")
elif 24<bmi<=28:
print("体重超重")
else:
print("体重肥胖")
#代码结束
第6关:黄金价值计算
任务描述
编写程序,输入黄金价格(美元/盎司),美元兑人民币的汇率,黄金的数量(以克为单位),计算并输出黄金的人民币价值。(1盎司(oz) =31.1034768 克)。
jg=eval(input("黄金价格"))
hl=eval(input("美元汇率"))
zl=eval(input("黄金重量"))
#代码开始
jz=jg*zl*h1/31.1034768
#代码结束
print("黄金价值{:.2f}".format(jz))
第7关:股票代码判断
任务描述
证券代码采用6位数字编码,编码规则定义如下:
编写程序,根据用户输入的6位股票编码判断其所属的版块。若代码不符合以上规则,显示错误编码。要求能循环输入判断,直到用户输入000000为止。
dm=input("股票代码")
###代码开始
while(dm!="000000"):
if dm[:2]=="60":
print('沪市A股')
elif dm[:3]=='688':
print('科创板')
elif dm[:3]=='000':
print('深市A股')
elif dm[:3]=='002':
print('中小板')
elif dm[:3]=='300':
print('创业板')
else:
print("错误编码")
dm=input("股票代码")
###代码结束
第8关:计算物业费
任务描述
某物业公司收取物业费的标准如下:楼梯房每月每平米0.8元,电梯房每月每平米1.8元,商业门面每月每平米3元。 若一次性缴纳12个月及以上,给予95折优惠。 编写程序,输入房屋类型(1代表楼梯房,2代表电梯房,3代表商业门面)和房屋面积、缴纳月数,计算客户应该缴纳的物业费。
x=eval(input("类型")
s=eval(input("面积"))
m=eval(input("月数"))
#代码开始
while True:
while x==1:
if m<12:
f=(0.8)*s*m
print("物业费{:.2f}".format(f))
else:
f=0.8*s*0.95*m
print("物业费{:.2f}".format(f))
break
while x==2:
if m<12:
f=1.8*s*m
print("物业费{:.2f}".format(f))
else:
f=1.8*s*0.95*m
print("物业费{:.2f}".format(f))
break
while x==3:
if m<12:
f=1.8*s*m
print("物业费{:.2f}".format(f))
else:
f=3*s*0.95*m
print("物业费{:.2f}"format(f))
break
break
第二阶段 数据类型
实验一 数字类型及其操作
第1关:计算普通年金终值
任务描述
本关任务:编写一个计算普通年金终值的小程序。 普通年金终值是指最后一次支付时的本利和,它是每次支付的复利终值之和。按复利换算到最后一期期末的终值,然后加总,就是该年金终值。
#计算普通年金终值
A=eval(input("请输入每年本金"))
i=eval(input("请输入利率"))
n=eval(input("请输入年限"))
#代码开始
F=(((1+i)**n-1)/i)*A
#代码结束
print("普通年金终值是{:.2f}".format(F))
第2关:计算三角形的周长和面积
任务描述
本关任务:编写一个计算三角形的周长和面积的小程序。
相关知识
为了完成本关任务,你需要掌握:海伦公式
海伦公式
海伦公式是利用三角形的三条边的边长直接求三角形面积的公式。 假设在平面内,有一个三角形,边长分别为a、b、c,三角形的面积S可由以下公式求得:
a=eval(input(""))
b=eval(input(""))
c=eval(input(""))
#代码开始
Z=a+b+C
p=Z/2
S=(p*(p-a)*(p-b)*(p-c))**0.5
print('三角形周长%.2f三角形面积%.2f'%(z,S))
#代码结束
第3关:计算四边形的周长和面积
任务描述
本关任务:编写一个能计算四边形的周长和面积的小程序。 输入四边形的四条边长和一对对角之和(角度值),计算其周长和面积。 四边形四个边的长度为 a,b,c,d,一对对角之和为 m,x是周长的一半, 其面积为
相关知识
为了完成本关任务,你需要掌握:如何使用math库的函数
from math import
a=eval(input("请输入边长一"))
b=eval(input("请输入边长二"))
c=eval(input("请输入边长三"))
d=eval(input("请输入边长四"))
m=eval(input("请输入对角之和"))
#代码开始
z=a+b+c+d
x=z/2
s=((x-a)*(x-b)*(x-c)**c*d*(cos(radians(m/2)))**2)**0.5
#代码结束
print("四边形周长{:.2f}面积{:.2f}".format(z,s))
第4关:水仙花数
任务描述
本关任务:编写一个程序,显示所有的水仙花数 水仙花数是一个三位数,其百位、十位、个位的数字的立方之和为其数本身。 例如 153的各数立方之和为1+125+27=153
相关知识
为了完成本关任务,你需要掌握:1.如何循环,2.如何获取三位数的各位数字。
#代码开始
for i in range(100,999,1):
a=i//100
b=i//10%10
c=i%10
if a**3+b**3+c**3==i:
print(i)
#代码结束
第5关:计算投资收益
任务描述
本关任务:编写一个能计算投资收益的程序。 某客户有本金 500000 元,有两个投资方案。 一是某银行大额存单,三年期的存款年利息是 每年4%, 该客户存款到期后将利息和本金再存入。 二是购买公寓出租,每月租金 1000 元,该客户每年年底将租金采取一年期定期存款的形式,年利率为 1.75% 计算30年中每三年该客户两种投资方案的投资收益。
相关知识
为了完成本关任务,你需要掌握:for循环语句
#代码开始
ental income =0
desposite interest=500000
for i in range(1,31):
rental income=1000*12 + rental income*(1+0.0175)
if i%3==0:
desposite interest=desposite interest+desposite interest*0.04*3
print('第{:2}年公寓方案{:.2f}大额存单投资收益{:.2f}'.format(i,rental income,desposite interest-500000))
#代码结束
第6关:采用年度总和法计算固定资产折旧
任务描述
本关任务:编写一个使用年度总和法计算固定资产折旧的小程序。 某企业有一项固定资产。该项固定资产原始价值x元,预计使用年限为n年,预计净残值为y元 输入x,n,y,要求计算采用年数总和法计提各年的折旧额
相关知识
为了完成本关任务,你需要掌握:1.固定资产折旧的方法2.for循环
#年度息和法固定资产折旧
x=eval(input("固定资产原始价值"))
y=eval(input("预计净残值"))
n=eval(input("使用年限"))
i=0
b=x
for s in range(1,n+1):
i=i+s
if s==n:
for h in range(1,n+1):
z=(x-y)*((n+1-h)/i)
b=b-z
print('第{:1}年折旧额{:.2f}剩余价值{:.2f}'.format(h,z,b))
#代码结束
第7关:无收益资产远期合约价值
任务描述
无收益资产是指在远期到期前,不产生现金流的资产,如贴现债券。 无收益资产远期合约价值等于资产现货价格与交割价格现值的差额,如下图所示。
S为资产现货价格,K为远期合约的交割价格,r为无风险年利率,T为远期合约的到货时间,t是现在的时间,T-t代表远期合约距离到期时间的剩余时间,均以年为单位, 例如,6个月期的无风险年利率为4.17%。市场上正在交易一份标的证券为一年期贴现债券、剩余期限为6个月的远期合约多头,其交割价格为970元,该债券的现价为960元。其远期价值为 S=960,K=970,r=4.17%,T-t=0.5 该远期合约多头的远期价值为:
输入现货价格,交割价格,利率和剩余时间(月数),输出其远期价值
提示:math库中计算e指数的函数是exp(n)
from math import*
s=eval(input("现货价格"))
k=eval(input("远期价格"))
r=eval(input("利率"))
t=eval(input("剩余时间"))
#代码开始
f=s-k*exp(-r*(t/12))
#代码结束
print("远期价值{:.2f}".format(f))
第8关:小球落下距离和
任务描述
本关任务: 一个球从100米高处自由落下,每次落地后反跳回原高度的一半,再落下,再反弹。 本关任务:编写一个小程序,求第n次落地时,共经过多少米。。
n=eval(input())
#开始
s=100
y=100
for i in range(1,n+1):
if i>1:
y=y/2
S=s+y*2
if i==n:
print("{:.6f}".format(s))
else:
S=S
if i==n:
print("{:.6f}".format(s))
实验二 运算符的使用
第1关:算术、比较、赋值运算符
任务描述
在编程时,我们常常需要对数值或对象进行算术、比较运算和赋值运算,以此来实现我们的功能需求。本关介绍 Python 中的一些基本运算符,并要求对给定的苹果和梨的数量进行算术运算、比较、赋值运算,然后输出相应的结果。
相关知识
要实现上述功能,需要用到 Python 中的各种运算符。Python 中的运算符包括:
-
算术运算符;
-
比较(关系)运算符;
-
赋值运算符;
-
逻辑运算符;
-
位运算符;
-
成员运算符;
-
身份运算符。
本关先介绍前三种运算符。
# 定义theOperation方法,包括apple和pear两个参数,分别表示苹果和梨子的数量
def theOperation(apple,pear):
# 请在此处填入计算苹果个数加梨的个数的代码,并将结果存入sum_result变量
########## Begin ##########
sum_result = (apple+pear)
########## End ##########
print(sum_result)
# 请在此处填入苹果个数除以梨的个数的代码,并将结果存入div_result变量
########## Begin ##########
div_result = (apple/pear)
########## End ##########
print(div_result)
# 请在此处填入苹果个数的2次幂的代码,并将结果存入exp_result变量
########## Begin ##########
exp_result = (apple**2)
########## End ##########
print(exp_result)
# 请在此处填入判断苹果个数是否与梨的个数相等的代码,并将结果存入isequal变量
########## Begin ##########
isequal = apple==pear
########## End ##########
print(isequal)
# 请在此处填入判断苹果个数是否大于等于梨的个数的代码,并将结果存入ismax变量
########## Begin ##########
ismax = apple>pear
########## End ##########
print(ismax)
# 请在此处填入用赋值乘法运算符计算梨个数乘以2的代码,并将结果存入multi_result变量
########## Begin ##########
multi_result = (pear*2)
########## End ##########
print(multi_result)
第2关:逻辑运算符
任务描述
本关介绍运算符中的逻辑运算符,逻辑运算符能够将语句连接成更加复杂的复杂语句。逻辑运算符要求操作数的类型为逻辑型,其运算结果也为逻辑型的值。
以下为逻辑运算的现实场景: 假设没有说谎代表逻辑真,说了谎代表逻辑假。tom 没有说谎,jerry 也没有说谎,则逻辑与表示 tom 与 jerry 都没有说谎,逻辑与的值为真。tom 没有说谎,jerry 说谎了,则逻辑与的值为假。
本关的任务就是让学习者运用 Python 中的逻辑运算符来得出 tom 与 jerry 是否有说谎。
# 定义逻辑运算处理函数theLogic,其中tom与Jerry分别代表两个输入参数
def theLogic(tom,jerry):
# 请在此处填入jerry的布尔“非”代码,并将结果存入到not_result这个变量
########## Begin ##########
not_result = not jerry
########## End ##########
print(not_result)
# 请在此处填入tom,jerry的逻辑与代码,并将结果存入到and_result这个变量
########## Begin ##########
and_result = tom and jerry
########## End ##########
print(and_result)
第3关:位运算符
任务描述
程序中所有的数都是以二进制形式存储在计算机中的。例如,a = 13
转化成二进制就是a = 1101
,每一个数称为一位。位运算就是对二进制按位进行运算。本关的任务就是让学习者了解并能运用 Python 中的位运算符来进行运算。
# 定义位运算处理函数bit, 其中bitone和bittwo两个参数为需要进行位运算的变量,由测试程序读入。
def bit(bitone,bittwo):
# 请在此处填入将bitone,bittwo按位与的代码,并将运算结果存入result变量
########## Begin ##########
result = bitone&bittwo
########## End ##########
print(result)
# 请在此处填入将bitone,bittwo按位或的代码,并将运算结果存入result变量
########## Begin ##########
result = bitone|bittwo
########## End ##########
print(result)
# 请在此处填入将bitone,bittwo按位异或的代码,并将运算结果存入result变量
########## Begin ##########
result = bitone^bittwo
########## End ##########
print(result)
# 请在此处填入将bitone按位取反的代码,并将运算结果存入result变量
########## Begin ##########
result = ~bitone
########## End ##########
print(result)
# 请在此处填入将bittwo左移动两位的代码,并将运算结果存入result变量
########## Begin ##########
result = bittwo<<2
########## End ##########
print(result)
# 请在此处填入将bittwo右移动两位的代码,并将运算结果存入result变量
########## Begin ##########
result = bittwo>>2
########## End ##########
print(result)
第4关:成员运算符
任务描述
如果我们想知道自己是否是篮球队成员,我们就要在成员名单中查找,如果名单中有一百人,最坏的情况下我们需要查找一百次,这需要多久的时间呀!与此同理,当我们在编程时判断一个元素是否存在于一大堆数据中,如果通过遍历一一对比,则大大增加了运行时间。而成员运算符就可以轻松解决这个问题,它能很快地判断某一元素是否存在于大量数据中。
本关的任务就是学习并运用成员运算符。
# 定义成员片段函数member,参数me为待判断的人名,member_list为成员名单
def member(me,member_list = []):
# 请在if后面的括号中填入判断变量me是否存在于list中的语句
########## Begin ##########
if(me in member_list):
print("我是篮球社成员")
else:
print("我不是篮球社成员")
########## End ##########
# 请在if后面的括号中填入判断变量me是否存在于list中的语句
########## Begin ##########
if(me not in member_list):
print("我不是篮球社成员")
else:
print("我是篮球社成员")
########## End ##########
第5关:身份运算符
任务描述
变量是存储在内存中的值。在 Python 中,变量不需要声明的,变量的赋值操作就是变量的声明和定义过程,这个过程会在内存中为我们开辟一段存储空间存放我们所声明的变量。本关的任务是学习并掌握身份运算符,这个运算符可以判断两个变量的存储单元是否相同。
# 定义addressone和addresstwo两个变量,并为其赋值
addressone = 20
addresstwo = 20
addressthree = 12
# 在if后面的括号中填入判断变量addressone与变量addresstwo是否有相同的存储单元的语句
########## Begin ##########
if(addressone is addresstwo):
print("变量addressone与变量addresstwo有相同的存储单元")
else:
print("变量addressone与变量addresstwo的存储单元不同")
########## End ##########
# 在if后面的括号中填入判断变量addresstwo与变量addressthree是否没有相同的存储单元的语句
########## Begin ##########
if(addresstwo is not addressthree):
print("变量addresstwo与变量addressthree的存储单元不同")
else:
print("变量addresstwo与变量addressthree有相同的存储单元")
########## End ##########
第6关:运算符的优先级
任务描述
运算符的优先级是不同的,并且存在高低之分,所以并不是所有的计算语句都是从左至右运算的。在编写程序时,若在一个计算语句中出现了多个运算符,那就要根据运算符的优先级来排列规划数值计算顺序,不然就会得到错误的计算结果。本关的任务是让学习者掌握运算符的优先级,并能根据要求写出运算语句。
相关知识
运算符优先级
要实现上述功能,需要掌握运算符的优先级。下表列出了优先级由高到低的所有运算符:
类别 | 类型名 |
---|---|
** | 指数(最高优先级) |
~ + - | 按位翻转,一元加号和减号(最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,取模和取整除 |
+ - | 加法,减法 |
>> << | 右移,左移运算符 |
& | 位 (AND ) |
^ | 位运算符 |
<= < > >= | 比较运算符 |
<> == != | 等于运算符 |
= % = /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not or and | 逻辑运算符 |
如果您想了解更多运算符的相关知识,请参考:[美] Katie Cunningham 著《 Python 入门经典》
第二章。
## 定义并实现优先级运算函数theProirity
def thePriority(var1,var2,var3,var4):
# 先将var1左移两位,然后计算var1与var2的和,最后后将这个值乘以var3,并将最终结果存入result变量
########## Begin ##########
result=((var1<<2)+var2)*var3
########## End ##########
print(result)
# 先将var1与var2按位与,然后计算得到的值与var3的和,最后后将这个值乘以var4,并将最终结果存入result变量
########## Begin ##########
result=((var1&var2)+var3)*var4
########## End ##########
print(result)
实验三 Python表达式
第1关:具体值表达式的转换
任务描述
本关主题是具体值组成的表达式的建模,实践如何将这样的数学表达式转换成Python
表达式。
本关任务:仔细阅读背景知识,找到数学运算符与Python
数值运算符之间的对应关系,将下面数学表达式转换为Python
表达式,并用print
语句打印结果。
例如,对数学表达式1+1
,对应的Python
表达式和结果输出语句为print(1+1)
。
请用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_(123//12)
#第四题
print_(123/12)
#第五题
print_((((((1000000000)/60)/60)/24)/365))
#第六题:要求编写两式比较的表达式,输出为True或False
print_(3**3 + 4**3 +5**3 ==6**3)
#第七题
print_(1.02**365)
print_(1.01**365)
#第八题:要求编写两式比较的表达式,输出为True或False
print_(1.01**3 * 0.99**2 > 1.01)
# ********** End ********** #
第2关:Python数学函数
任务描述
本关任务:仔细阅读下面的相关知识,找到数学函数与Python
数学函数之间的对应关系,将下面数学表达式转换为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))
print_((1/16)*((-1)+sqrt(17)+sqrt(2*(17-sqrt(17)))+2*(sqrt(17+3*sqrt(17)-sqrt(2*(17-sqrt(17)))-2*sqrt(2*(17+sqrt(17)))))))
print_(cos((2*pi)/17)-(1/16)*((-1)+sqrt(17)+sqrt(2*(17-sqrt(17)))+2*(sqrt(17+3*sqrt(17)-sqrt(2*(17-sqrt(17)))-2*sqrt(2*(17+sqrt(17)))))))
#第四题
print_(sqrt((1+sqrt(5))/2+2)-(1+sqrt(5))/2)
#第五题
print_(sinh(0.25))
print_((e**0.25 - e**(-0.25))/2)
# ********** End ********** #
第3关:变量与赋值
任务描述
仔细阅读下面的介绍,理解变量的定义、其与值的关联关系,以及赋值语句的语法与功能,将下面数学表达式转换为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))/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 - 0.5 * 9.8 * t**2
# 请不要修改下面的代码
print_(y)
print('***********************')
# ********** End ********** #
第4关:解决实际问题※
任务描述
本关主题是综合利用前三关掌握的知识,解决实际问题。这些问题来源于实际生活的各个方面,通过问题的解决,希望对计算思维有一定的体验和感悟。
本关任务:完成编程要求的相关题目。
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 = (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)]:
# 请在下面编写代码
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//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)
x2=radians(x2)
y1=radians(y1)
y2=radians(y2)
R=69.1105 * 1.609
a=sin(x1)
b=sin(x2)
c=cos(x1)
d=cos(x2)
e=cos(y1-y2)
dist=R*degrees(acos(a*b+c*d*e))
# 请不要修改下面的代码
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 ********** #
实验四 字符串的基本操作
第1关:字符串的拼接:名字的组成
任务描述
本关任务是将两个不同的字符串,拼接形成一个字符串,并将新字符串输出来。字符串或串(String)是由数字、字母、下划线组成的一串字符。在 Python 中,字符串用单引号或者双引号括起来。在很多情况下,我们需要将两个字符串拼接起来,形成一个字符串。
# coding=utf-8
# 存放姓氏和名字的变量
first_name = input()
last_name = input()
# 请在下面添加字符串拼接的代码,完成相应功能
########## Begin ##########
full_name = first_name + " "+last_name
print(full_name)
########## End ##########
第2关:字符转换
任务描述
本关任务:对给定的字符串进行处理,包括字符串长度计算、大小写转换以及去除字符串前后空格等。
在字符串处理中,经常需要统计字符串的长度、进行大小写转换以及去除字符串前后空格等操作。例如,在基于关键词的搜索引擎中,要查询关键词是否在文档或者网页中出现,搜索引擎并不需要区分关键词中字符的大小写以及关键词前后的空格等。这时就需要对字符串进行处理,将其中的大写字符都转换为小写,并剔除字符串开头和结尾处的空格,然后再统一进行字符串匹配。
相关知识
Python 标准库提供了一系列关于字符串处理的函数。本关的小目标是让大家学习并掌握 Python 常用字符串方法中的len()
、lower()
和strip()
函数的用法,并完成相应字符串处理任务。
# coding=utf-8
# 获取待处理的源字符串
source_string = input()
# 请在下面添加字符串转换的代码
########## Begin ##########
strip_string = source_string.strip()
title_string = strip_string.title()
print(title_string)
length = len(source_string)
print(len(title_string))
########## End ##########
第3关:字符串查找与替换
任务描述
本关的任务是,给定一个字符串,要利用 Python 提供的字符串处理方法,从该字符串中,查找特定的词汇,并将其替换为另外一个更合适的词。例如,给定一个字符串Where there are a will, there are a way
,我们发现这句话中存在语法错误,其中are
应该为is
,需要通过字符串替换将其转换为Where there is a will, there is a way
。
在大家日常工作使用 Word 编写文档的过程中,经常会遇到一个问题,发现前面写的文档中某个词用错了,需要换为另外一个词来表达。Word 提供了全文查找与替换的功能,可以帮助用户很方便的处理这一问题。那么,这一功能最基础和核心的就是字符替换,如果我们要自己基于 Python 来实现,该怎么做呢?
相关知识
本关的小目标:学习并掌握 Python 中常用的字符串方法,包括字符串查找、字符串切分、字符串替换等。
# coding = utf-8
source_string = input()
# 请在下面添加代码
########## Begin ##########
print(source_string.find('day'))
print(source_string.replace('day','time'))
source_string1 = source_string.replace('day','time')
print(source_string1.split(' '))
######### End ##########
实验五 字符类型及其应用
第1关:判断回文数
任务描述
本关任务:输入一个整数,判断其是否回文数。 回文数是指该数翻转后也等于该数本身。例如12321就是回文数,12345不是回文数。
相关知识
为了完成本关任务,你需要掌握:1.如何获判断字符串是否都是数字字符,2.如何得到翻转后的字符串。
x=input("请输入一个数字")
#代码开始
a=str.isnumeric(x)
d=""
if a:
b=len(x)
for i in range(1,b+1,1):
c=x[-i]
d=d+c
if d==x:
print(d+"是回文数")
else:
print(x+"不是回文数")
else:
print("不是数字")
#代码结束
第2关:凯撒密码解密
任务描述
本关任务:编写一个能对凯撒密码执行解密的小程序。
相关知识
为了完成本关任务,你需要掌握:1.凯撒密码加密的规则,2.字符的编码;3.如何遍历字符串。
mw = input("")
#代码开始
ming=""
for i in mw:
a=ord(i)
if 68<=a<=90:
b=chr(a-3)
ming=ming+b
elif 65<=a<68:
b=chr(a+23)#b=a-65-3+90+1
ming=ming+b
else:
ming=ming+i
#代码结束
print(ming)
第3关:简单密码加密
任务描述
某用户在存储自己的密码时(密码由大小写英文字母和数字组成),为了不被别人知晓,将其按下列规则加密 数字字符0用9替换,1用8替换,2用7替换,3用6替换,4用5替换,5用4替换,6用3替换,7用2替换,8用1替换 英文字母a用z替换,b用y替换,c用x替换,d用w替换,e用v替换,f用u替换,g用n替换,以此类推 英文字母A用Z替换,B用Y替换,C用X替换,D用W替换,E用V替换,F用U替换,G用N替换,以此类推 编写程序,输入用户的密码,输出其加密后的密码 例如输入0012xyzM 输出9987cbaN
p=input("")
y=""
#代码开始
for i in p:
a=ord(i)
if 48<=a<=57:
b=57-a+48
c=chr(b)
y=y+C
elif 65<=a<=90:
b=65-a+90
c=chr(b)
y=y+C
else:
b=97-a+122
c=chr(b)
y=y+c
#代码结束
print(y)
第4关:信用卡号校验
任务描述
本关任务:编写一个能判断信用卡号是否合法的小程序。
信用卡号必须通过lun算法进行校验,其过程: 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 2、从卡号倒数第二位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。 例如,卡号是:5432123456788881 逆向奇数位为 4 2 2 4 6 8 8 1 和 = 35 逆向偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和 = 35。 最后 35 + 35 = 70 可以被10整除,认定校验通过。 注意:信用卡的卡号长度是根据输入来确定的。
提示: <字符串>[结尾字符:开始字符:<负整数>]
可以逆序间隔地取字符 例如 x="hello world"
则x[-1::-2]
表示从结尾字符每隔2个字符取子串,即"drwolh"
cardid=input("请输入信用卡号")
#代码开始
a=0
b=0
for i in cardid[-1::-2]:
a=a+int(i)
for i in cardid[-2::-2]:
c= int(i)*2
if c>=10:
C=C-9
b=b+C
if(a+b)%10==0:
print("合法卡号")
else:
print("非法卡号")
#代码结束
第5关:ISBN校验
任务描述
本关任务: 国际标准书号(ISBN)用10位数字唯一标识的一本书。 最后一位数字为校验位,可以由其他9位数字计算出来,且d1+2d2+3d3+……+10d10必须是11的倍数(di的下标表示从右边起第i个数)。 校验位必须是介于0到10中的一个数字,用字母X表示10. 例如,020131452的校验和是5 10*0+9*2+8*0+7*1+6*3+5*1+4*4+3*5+2*2+1*5
为88,是11的倍数
编写一个python程序,将9位整数作为输入,计算校验和并打印isbn号 例如,输入020131452,输出0201314525
x=input("")
#代码开始
b=0
for i in range(0,9,1):
a=int(x[i])
b=b+a*(10-i)
c=b%11
d=11-c
if d==10:
print(x+"X")
else:
print(x+str(d))
第6关:打印田字格
任务描述
本关任务:编写一个能打印田字格的小程序。
输入整数(大于2小于10),输出该整数对应的由星号和空格组成的田字格图形(注意:每一个星号后面有一个空格)
假设输入x,第一行,第x行和第2x-1行输出2x-1个星号空格“* “ 其余行输出星号空格和2x-4个空格和星号空格和2x-4空格和星号空格
相关知识
为了完成本关任务,你需要掌握:1.如何连接和重复字符串,2.如何循环。3.if多条件的组合
#打印田字格
x=eval(input())
#代码开始
for i in range(1,2*x,1):
if i==1:
print((2*x-1)*"* ")
elif i==x:
print((2*x-1)*"* ")
elif i==2*x-1:
print((2*x-1)*"* ")
else:
print("* "+(x-2)*" "+"* "+(x-2)*" "+"* ")
#代码结束
第7关:数字汉字转换
任务描述
不管是阿拉伯数字(1、2、3……), 还是所谓汉字小写数码(一、二、三……), 由于笔画简单,容易被涂改伪篡。所以一般文书和商业财务票据上的数字都要采用汉字数码大写: 壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、(“万、亿”本身笔画已经比较复杂,使用机会也少,没有必要再用别的字代替)。如“ 3564 元”写作“叁仟伍佰陆拾肆元” 。
x=input("")
hz='零壹贰叁肆伍陆柒捌玖'
dw='拾佰仟万拾佰仟'
y=""
#代码开始
a=len(x)
for i in range(-a,-1,1):
a=hz[int(x[i])] #中文数字
b=dw[-i-2]#单位
if i<-5: #万以上
if int(x[i])!=0 :#数字不等于零
y=y+a+b
elif int(x[i])==0:#数字等于零
if int(x[i+1])==0 :#下一位数字也为零
y=y
else:
y=y+'零'
elif i==-5:
if int(x[i])!=0:
y=y+a+b
else:
y=y+"万"
else:
if int(x[i])!=0 :
y=y+a+b
elif int(x[i])==0:#数字等于零
if int(x[i+1])==0:
y = y
else:
y = y+'零'
if int(x[-1])==0:
y = y+'元'
else:
a = hz[int(x[-1])]
y = y+a+'元'
print(y)
第8关:日期汉字格式转换
任务描述
本关任务: 编写程序,用户输入阿拉伯数字的日期,转换为汉字的日期。 例如,输入2021/2/25,输出二零二一年二月二十五日
相关知识
为了完成本关任务,你需要掌握:如何返回字符c在字符s中的位置
x=input("")
hz="零一二三四五六七八九"
#代码开始
zwnf=""
a=x.find('/')
b=x.rfind('/')
for i in x[0:a:1]:
c=hz[int(i)]
zwnf=zwnf+C
if b-a==2:
c = hz[int(x[a+1])]
zwyf=c
else:
if int(x[b-1])!=0:
c=hz[int(x[b-1])]
zwyf="十"+C
else:
Zwyf="十"
y=int(x[b+1:])
if y<10:
c=hz[y]
zwrh=c
elif y==10:
zwrh="十"
elif 10<y<20:
c=hz[int(x[b+2])]
zwrh="十"+C
elif y==20:
zwrh="二十"
elif 20<y<30:
c=hz[int(x[b+2])]
zwrh="二十"+c
elif y==30:
zwrh="三十"
#代码结束
print(zwnf+"年"+zwyf+"月"+zwrh+"日")
第9关:输出格式化字符
任务描述
本关任务:输入表示武力、速度、智力、统治的四个整数(10的倍数,小于等于200),输出相应结果(使用format函数)
注意: 输出第一行为 武力是空格30空格空格3星号 输出第三行为 智力是空格110空格11星号 数字前面一个空格 数字后的空格个数与数字位数有关 提示: 是后面有一个固定的空格 数值部分指定4个输出宽度左对齐 *
号重复的次数必须为整数 /运算的结果是实数 //运算的结果是整数
相关知识
为了完成本关任务,你需要掌握:格式化字符串
gl=eval(input("请输入武力"))
sd=eval(input("请输入速度"))
zl=eval(input("请输入智力"))
tzl=eval(input("请输入统治"))
#代码开始
print("武力是 {:<3} {}".format(gl,"*"*(gl//10)))
print("速度是 {:<3} {}".format(sd,"*"*(sd//10)))
print("智力是 {:<3} {}".format(zl,"*"*(zl//10)))
print("统治是 {:<3} {}".format(tzl,"*"*(tzl//10)))
#代码结束
第三阶段 控制结构
实验一 顺序与选择结构
第1关:顺序结构
任务描述
程序最基本的结构就是顺序结构,顺序结构就是程序按照语句顺序,从上到下依次执行各条语句。
本关要求学习者理解顺序结构,并对输入的三个数changeone
、changetwo
、plus
先交换changeone
、changetwo
值,然后再计算changeone + plus
的值。
相关知识
要实现上述功能,需要严格按照顺序来实现每一个步骤。如果顺序错误,那么便会得出错误的结果。
changeOne = int(input())
changeTwo = int(input())
plus = int(input())
# 请在此添加代码,交换changeOne、changeTwo的值,然后计算changeOne、plus的和result的值
########## Begin ##########
temp=changeOne
changeOne=changeTwo
changeTwo=temp
result=changeOne+plus
########## End ##########
print(result)
第2关:选择结构:if-else
任务描述
程序的第二大结构就是选择结构。在此结构中,程序通过对一个代码块或者几个代码块的判断来决定接下来运行哪一个代码块。以下场景还原了选择结构的现实场景: 某公司根据员工的工龄来决定员工工资的涨幅,如下所示:
- 工龄大于等于
5
年并小于10
年时,涨幅是现工资的5%
; - 工龄大于等于
10
年并小于15
年时,涨幅是现工资的10%
; - 工龄大于等于
15
年时,工资涨幅为15%
。
本关的任务是让学习者理解选择结构,学会使用最基本的选择语句:if-else
语句。
workYear = int(input())
# 请在下面填入如果workYear < 5的判断语句
########## Begin ##########
if workYear<5:
########## End ##########
print("工资涨幅为0")
# 请在下面填入如果workYear >= 5 and workYear < 10的判断语句
########## Begin ##########
elif 5<=workYear<10:
########## End ##########
print("工资涨幅为5%")
# 请在下面填入如果workYear >= 10 and workYear < 15的判断语句
########## Begin ##########
elif 10<=workYear<15:
########## End ##########
print("工资涨幅为10%")
# 请在下面填入当上述条件判断都为假时的判断语句
########## Begin ##########
else:
########## End ##########
print("工资涨幅为15%")
第3关:选择结构 : 三元操作符
任务描述
程序中的选择结构中除了if-else
、elif
之外,还有一个三元操作符。三元操作符也是根据条件判断执行哪一个代码块,但它的最大特点是不需要像if-else
语句那样写多行代码,而是只需一行代码。
本关要求学习者能够学会并使用三元操作符来判断谁才是射击比赛的赢家。
相关知识
三元操作符
三元操作符的基本格式为:
result = x if x < y else y
其中,x < y
为判断语句。若x < y
为真则result = x
,否则result = y
。
如果您想了解更多选择结构的相关知识,请参考:[美] Katie Cunningham 著《 Python 入门经典》
第三章。
jimscore = int(input())
jerryscore = int(input())
# 请在此添加代码,判断若jim的得分jimscore更高,则赢家为jim,若jerry的得分jerryscore更高,则赢家为jerry,并输出赢家的名字
########## Begin ##########
winner='jim' if jimscore>jerryscore else 'jerry'
########## End ##########
print(winner)
实验二 分支结构
第1关:判断三角形类型
任务描述
本关任务:编写一个能判断三角形类型的小程序。 输入三个数值,判断其是否能构成三角形的三条边。如果能构成,判断其是否等边三角形、直角三角形还是普通三角形。
相关知识
为了完成本关任务,你需要掌握:1.如何写条件,2.多分支语句。
x=eval(input("边长一"))
y=eval(input("边长二"))
z=eval(input("边长三"))
#代码开始
if x+y>z and x+z>y and y+z>x:
if x==y==z:
print('等边三角形')
elif x**2!=y**2+z**2:
print('普通三角形')
elif x**2==y**2+z**2:
print('直角三角形')
else:
print('无法构成三角形')
#代码结束
第2关:分段函数
任务描述
有一分段函数如图所示
本关任务:编写一个能根据x的值计算y值的小程序。
相关知识
为了完成本关任务,你需要掌握:多分支结构
x=eval(input())
#代码开始
if x<1:
y=x
elif 1<=x<10:
y=2*x-1
else:
y=3*x-1
#代码结束
print("{:.2f}".format(y))
第3关:阶梯电价计算电费
任务描述
本关任务:长沙市按照阶梯电价计算电费,第一档是200度及以下的0.588/度。第二,三档分季节,春秋季:第二档是200度以上-350度的0.638/度,第三档是350度以上0.888/度。冬夏季:第二档是200度以上-450度的0.638/度,第三档是450度以上0.888/度。根据输入的上月电表度数、本月电表度数和月份来计算电费。3-5月份为春季,6-8月份为夏季,9-11为秋季,12-2月份为冬季。 输入居民的上月和本月的电表度数,计算用电度数和电费。
sy=eval(input("输入上月电表度数"))
by=eval(input("输入本月电表度数"))
yf=eval(input("输入月份"))
#代码开始
ds=by-sy
if ds<=200:
df=ds*0.588
elif ds>200:
if 3<=yf<=5 or 9<=yf<=11:
if 200<ds<=350:
df=(ds-200)*0.638+200*0.588
else:
df=200*0.588+150*0.638+(ds-350)*0.888
else:
if 200<ds<=450:
df=200*0.588+(ds-200)*0.638
else:
df=(ds-450)*0.888+200*0.588+250*0.638
#代码结束
print("用电度数{:.2f}电费{:.2f}".format(ds,df))
第4关:阶梯水价计算水费
任务描述
本关任务:编写一个计算水费的小程序。 长沙市水费计量实施阶梯式水价制度:对四口之家及以下以户为单位进行计量,五口之家及以上按人均计量办法。 对四口之家及以下户:第一级水价为15吨及以下,按2.58元每吨计费;第二级水价为22吨及以下,按3.34元每吨计费;第二级水价为超过22吨,按4.09元每吨计费。 对五口之家及以上户:第一级水价为每人每月4吨及以下,按2.58元每吨计费;第二级水价为每人每月5吨及以下,按3.34元每吨计费;第二级水价为超过每人每月5吨,按4.09元每吨计费。 此外,对于低保居民,每户每月减免6立方米的水费
sy=eval(input("输入上月水表吨数"))
by=eval(input("输入本月水表吨数"))
rs=eval(input("输入家庭人数"))
db=input("是否低保(y/n)")
#代码开始
if db=='y':
sl=by-sy-6
if sl>0:
if rs<=4:
if sl<=15:
sf=sl*2.58
elif 15<sl<=22:
sf=(sl-15)*3.34+15*2.58
else:
sf=(sl-22)*4.09+7*3.34+15*2.58
else:
if sl<=rs*4:
sf=sl*2.58
elif rs*4<sl<=rs*5:
sf=(rs*5-rs*4)*3.34+rs*4*2.58
else:
sf=(rs*5-rs*4)*3.34+rs*4*2.58+(sl-rs*5)*4.09
else:
sf=0
elif db=='n':
sl=by-sy
if sl>0:
if rs<=4:
if sl<=15:
sf=sl*2.58
elif 15<sl<=22:
sf=(sl-15)*3.34+15*2.58
else:
sf=(sl-22)*4.09+7*3.34+15*2.58
else:
if sl<=rs*4:
sf=sl*2.58
elif rs*4<sl<=rs*5:
sf=(rs*5-rs*4)*3.34+rs*4*2.58
else:
sf=(rs*5-rs*4)*3.34+rs*4*2.58+(sl-rs*5)*4.09
else:
sf=0
#代码结束
print("用水吨数(减免后){:.2f}水费{:.2f}".format(sl,sf))
第5关:手机话费计算
任务描述
本关任务:编写一个能计算手机话费的小程序。 某用户办理了中国移动128元的5g套餐,套餐内包含每月30g流量和500分钟的通话时间。通话超出时间,按0.15元每分钟计算。套餐流量超出后,5元1GB.满15元后,按照3元1G进行计费。 输入该用户使用的流量和通话时间,计算其费用
ll=eval(input("流量"))
thsj=eval(input("通话时间"))
#代码开始
if thsj<=500 and ll<=30:
f=128
elif thsj>500 and ll<=30:
f=(thsj-500)*0.15+128
elif thsj<=500 and ll>30:
if 30<ll<=33:
f=128+(ll-30)*5
else:
f=128+3*5+(ll-33)*3
else:
if 30<ll<=33:
f=128+(ll-30)*5+(thsj-500)*0.15
else:
f=128+3*5+(ll-33)*3+(thsj-500)*0.15
#代码结束
print('费用{:.2f}'.format(f))
第6关:血压判断
任务描述
。 成年人血压的正常范围是60mmHg<舒张压<90mmHg 90mmHg<收缩压<140mmHg。 若舒张压大于等于90或收缩压大于等于140为高血压。 若舒张压小于60或收缩压小于90为低血压。 输入舒张压和收缩压,判断其属于高血压、低血压或正常血压。 例如,输入70 100显示正常血压 输入100 130 显示高血压 输入50 100显示低血压。
本关任务:编写一个程序,输入舒张压和收缩压,判断其属于高血压、低血压或正常血压。
x=eval(input())
y=eval(input())
#代码开始
if x>=90 or y>=140:
print('高血压')
elif x<60 or y<90:
print('低血压')
else:
print('正常血压')
#代码结束
第7关:党费计算
任务描述
对于在职党员,工资收入在3000元及以下,交纳月工资收入的0.5%; 3000元以上至5000元(含5000元)者,交纳1%; 5000元以上至10000元(含10000元)者,交纳1.5%; 10000元以上者,交纳2%。 对于离退休党员,离退休费总额5000元以下(含5000元)的按0.5%交纳党费,5000元以上的按1%交纳党费。
本关任务:编写程序,输入是否退休(y或Y表示退休)和收入,输出应缴纳党费
注意:党费不是累进计算,而是直接按比例收取,例如,在职党员,收入8000,直接按1.5%收取 离退休党员,收入6000,直接按1%收取
ch=input("")
s=eval(input(""))
#代码开始
if ch=='y' or ch=='Y':
if s<=5000:
df=s*0.005
else:
df=s*0.01
else:
if s<=3000:
df=s*0.005
elif 3000<s<=5000:
df=s*0.001
elif 5000<s<=10000:
df=s*0.015
else:
df=s*0.02
#代码结束
print("{:.2f}".format(df))
第8关:周薪计算
任务描述
某公司按小时计费工资。规定每周5个工作日,每天工作8小时。工作日超时工作工资为正常工资的1.5倍。休息日工资,4小时内为正常工资的2倍,超过4小时的部分为正常工资的3倍。 输入每小时工资,员工每周的工作日工作小时数和休息日工作小时数,计算其该周工资 例如每小时工资30元。工作日50小时,休息日8小时,其工资为2250.00元 40*30+10*30*1.5+4*30*2+4*30*3=2250
本关任务:输入每小时工资,员工每周的工作日工作小时数和休息日工作小时数,计算其该周工资
gzbz=eval(input("工资标准"))
gzr=eval(input("工作日工作时间"))
xxr=eval(input("休息日工作时间"))
#代码开始
if gzr<=40 and xxr==0:
gz=gzbz*gzr
elif gzr>40 and xxr==0:
gz=40*gzbz+(gzr-40)*gzbz*1.5
elif gzr<=40 and xxr!=0:
if xxr<=4:
gz=gzbz*gzr+xxr*gzbz*2
else:
gz=gzbz*gzr+4*gzbz*2+(xxr-4)*gzbz*3
else:
if xxr<=4:
gz=40*gzbz+(gzr-40)*gzbz*1.5+xxr*gzbz*2
else:
gz=40*gzbz+(gzr-40)*gzbz*1.5+4*gzbz*2+(xxr-4)*gzbz*3
#代码结束
print("工资{:.2f}".format(gz))
实验三 循环结构
第1关:斐波那契数列
任务描述
本关任务:编写一个能计算斐波那契数列中第x个数的小程序。
相关知识
为了完成本关任务,你需要掌握:1.什么是斐波那契数列,2.for循环
x=eval(input(""))
#代码开始
f1=1
f2=1
n=1
if x>=3:
for i in range(1,x-1):
f1=f1+f2
f2=f1+f2
n+=1
if i==x-n and x%2!=0:
print(f1)
elif i==x-n-1 and x%2==0:
print(f2)
elif x==2:
print(f2)
else:
print(f1)
#代码结束
第2关:统计一段英文语句中的单词数和句子数
任务描述
本关任务:编写一个小程序,输入一段英文短语,统计其中的单词数目和句子数目。
相关知识
为了完成本关任务,你需要掌握:1.如何判断英文语句中的单词数和句子数,2.如何遍历字符串。
x=input()
#代码开始
x=" "+x
#单词
a=" "
cy=0
jz=0
for i in x:
if str.isalpha(i) is True and a in' .!?,;"':
cy=cy+1
a=i
for i in x:
if i in'.!?':
jz=jz+1
print("单词{}句子{}".format(cy,jz))
第3关:密码判断
任务描述
本关任务:输入用户名和密码,根据密码文件中所记录的用户名和密码信息,判断登录信息是否正确
密码文件的信息如下所示,每行显示逗号分隔的姓名和密码 甲乙,11111111 陈二,76895409 张三,12345678 李四,87654321 王五,88888888 赵六,99999999 欧阳小七,42110198
相关知识
为了完成本关任务,你需要掌握:1.如何打开文件,2.如何遍历文件,3.如何截取字符串。
f1=open("sy5/密码.txt","r",encoding="utf-8")
x=str(input("用户名"))
y=str(input("密码"))
#代码开始
e=0
for line in f1:
a=line.strip("\n")
b=a.find(',')
c=a[:b]
d=a[b+1:]
if x==c:
if y==d:
print('密码正确')
else:
print('用户名或密码错误')
else:
e=e+1
if e==7:
print('用户名或密码错误')
第4关:通过数列求自然常数e
任务描述
本关任务: 编写程序,根据近似公式 e≈1+1/(1!)+1/(2!)+1/(3!)+… +1/(n!) 计算 e 的近似值,要求直至最后一项的值小于 1e-7 次方为止
相关知识
为了完成本关任务,你需要掌握:while循环
s=1
#代码开始
num=1
for i in range(1,100):
for j in range(1,i+1):
num=num*j
if j==i:
num_1=1/num
s=s+num_1
if num_1<10**(-7):
print("e值为{:.8}".format(s))
break
num=1
第5关:双倍余额递减法计算固定资产折旧
任务描述
本关任务:编写一个使用双倍余额递减法计算固定资产折旧的小程序。
相关知识
为了完成本关任务,你需要掌握:双倍余额递减法进行固定资产折旧的规则
双倍余额递减法是在不考虑固定资产预计净残值的情况下,根据每年年初固定资产净值和双倍的直线法折旧率计算固定资产折旧额的一种方法。它的基本规则是:以固定资产使用年数倒数的2倍作为它的年折旧率,以每年年初的固定资产账面余额作为每年折旧的计算基数,但由于在固定资产折旧的初期和中期时不考虑净残值对折旧的影响,为了防止净残值被提前一起折旧,因此现行会计制度规定,在固定资产使用的最后两年中,折旧计算方法改为平均年限法,即在最后两年将固定资产的账面余额减去净残值后的金额除以2作为最后两年的应计提的折旧。 例:某医院有一台机器设备原价为600000元,预计使用寿命为5年,预计净残值24000元。 年折旧率=2/5=40%
第一年应提的折旧额=600000*40%=240000元
第二年应提的折旧额=(600000-240000)*40%=144000元
第三年应提的折旧额=(600000-240000-144000)*40%=86400元
第四、五年每年应提的折旧额=(600000-240000-144000-86400-24000)/2=52800元
yj=eval(input("原价"))
cz=eval(input("残值"))
n=eval(input("年限"))
#代码开始
zje1=0
nzjl=2/n
for i in range(1,n-1):
zje=(yj-zje1)*nzjl
zje1=zje+zje1
print('第{:2}年折旧{:.2f}'.format(i,zje))
if i==n-2:
for j in range(n-1,n+1):
zje2=(yj-zje1-cz)/2
print('第{:2}年折旧{:.2f}'.format(j,zje2))
#代码结束
第6关:销售统计
任务描述
本关任务:循环输入商品编号、数量和价格,进行累加。 只到输入商品编号为0000为止。 输出商品种类、数量总计和金额总计。
s=0
c=0
sl=0
#代码开始
for i in range(1,10):
spbh=input("输入商品代码")
if spbh!='0000':
spjg=eval(input("输入商品价格"))
spsl=eval(input("输入商品数量"))
jg=spjg*spsl
sl=spsl+sl
s=s+jg
c=i
else:
print("商品种类{}数量总计{}金额总计{:.2f}".format(c,sl,s))
break
第7关:投资年限计算
任务描述
本关任务:编写一个计算投资年限的小程序 某客户每年年初在银行存入一笔固定金额的钱m,在年底,将本金和利息取出.在第二年年初,将该笔钱与新存入的钱m一起,再存入银行。输入每年存款m、年利率r,再输入用户要得到的金额x,计算该客户需要存放多少年y才能得到需要的金额。 例如,输入存款10000,年利率0.1,金额100000,输出7 输入存款50000,年利率0.05,金额500000,输出8。
m=eval(input("存款"))
r=eval(input("年利率"))
x=eval(input("金额"))
#代码开始
s=0
for n in range(1,100):
s=(s+m)*(1+r)
if s>=x:
print(n)
break
第8关:诗人作品统计
任务描述
本关任务: 在唐诗.txt文件,如下图所示。每首诗的标题为序号诗人冒号诗名。
编写程序,输入诗人姓名,显示该诗人所写的诗的标题,以及作品数,如图所示。 如果该诗人没有作品,显示无作品。
f1=open("sy5//唐诗.txt","r")
x=input("输入作者")
#代码开始
ct=0
for line in f1:
line=line.strip("\n") #去掉空格
a=line.find(":") #找到冒号的位置
b=line[3:a]
if b==x:
ct=ct+1
print(line)
if ct==0:
print("无作品")
else:
print("作品数 {}".format(ct))
#代码结束
实验四 多重循环
第1关:显示输入数字之内的完全数
任务描述
本关任务:显示输入数字之内的完全数。 一个数整等于其所有因子之和(不含这个数本身),则称这个数为完全数。例如 6=1+2+3,所以 6 是完全数。
x=eval(input())
#代码开始
l=[]
for i in range(1,x+1):
for n in range(1,i):
if i%n==0:
l.append(n)
if sum(l)==i:
print(i)
l=[]
#代码结束
第2关:输出阶乘等式
任务描述
本关任务:输入x 输出从1!到x!等式 例如输入10 输出
x=eval(input())
#代码开始
l=[]
num=1
for i in range(1,x+1):
for n in range(1,i+1):
l.append(str(n))
num=num*n
b="*".join(l)
if n==i:
print(str(i)+'!='+b+'='+str(num))
num=1
l=[]
#代码结束
第3关:输出符合要求的数字
任务描述
本关任务: 输入一个数字x(1-9之间),输出所有每个数位上的数字不超过x,各个数位的数字互不相同的三位数,每行显示10个数 注意:每个数后面有空格 提示:可以在print中设置end=" ",在输出表达式后显示空格 例如,输入5,输出如下图
x=eval(input())
#代码开始
j=0
for i in range(100,1000):
a=i%10
b=(i%100-i%10)/10
c=(i%1000-i%100)/100
if a<=x and b<=x and c<=x and a!=b and b!=c and a!=c:
print(i,end=" ")
j+=1
if j%10==0:
print('')
#代码结束
第4关:鸡兔同笼问题
任务描述
本关任务:鸡和兔子关在一个笼子里,输入头的个数和脚的个数,求笼内关了多少只兔子和多少只鸡? 如果没有符合条件的数目,显示无解
t=eval(input())
j=eval(input())
n=0
for i in range(1,t):
c=t-i
if i*2+c*4==j:
print("鸡{}只兔子{}只".format(i,c))
n=1
if n==0:
print("无解")
#代码结束
第5关:剩余最短木料
任务描述
本关任务:求剩余最短木料的切割方案。 输入一根材料的长度,需要截成长度为19米和23米的短料。求两种短料各截多少根时,剩余的材料最少?(每种短料必须大于等于一根)
s=eval(input())
#代码开始
for i in range(1,s//19+1):
for j in range(1,s//23+1):
temp=s-i*19-j*23
if(temp>=0 and temp<zx):
zx=temp
n1,n2=i,j
#代码结束
print("19米{}段,23米{}段,剩余{}米".format(n1,n2,zx))
第6关:打印图形
任务描述
本关任务:编写一个能计打印图形的小程序。 输入大写字母,打印一个相关图形 例如,输入E 打印图形如下
相关知识
为了完成本关任务,你需要掌握:1.ord和chr函数,2.如何控制换行。
zm=input("")
#代码开始
a=ord(zm)
for i in range(65,a+1):
b=(a-i)*' '
print(b,end='')
for j in range(65,i+1):
print(chr(j),end='')
if (i-j+1)==1:
if i!=65:
for k in range(66,i+1):
print(chr(i-k+65),end='')
print()
#代码结束
第7关:逻辑推断
任务描述
本关任务: 一位法官在审理一起盗窃案时,对涉及到的四名嫌疑犯A、B、C、D进行了审问。 四人分别供述如下: A:“罪犯在B、C、D三人之中。” B:“我没有作案,是C偷的。” C:“在A和D中间有一个是罪犯。” D:“B说的是事实” 经过充分的调查,证实四人中只有两人说了真话,并且罪犯只有一个。 请输出真正罪犯的编码 例如,如果A是罪犯,输出A是罪犯
提示:可以用变量a为0表示a不是罪犯,a为1表示a是罪犯 然后对每个人的两种可能循环
#代码开始
for a in (0,1):
for b in (0,1):
for c in (0,1):
for d in (0,1):
x=(b==1 or c==1 or d==1)
y=(b==0 and c==1)
z=(a==1 or d==1)
if ((x and not y and z)or(y and not x and not z))and a+b+c+d==1:
if a==1:
print('A是罪犯')
elif b==1:
print('B是罪犯')
elif c==1:
print('C是罪犯')
else:
print('D是罪犯')
#代码结束
第8关:多人唐诗作品标题
任务描述
本关任务: 在唐诗.txt文件,如下图所示。每首诗的标题为序号诗人冒号诗名。
编写程序,输入诗人姓名,显示该诗人所写的诗的标题,以及作品数,如图所示。 如果该诗人没有作品,显示无作品。 要求能够循环输入诗人姓名进行查找,直到输入空串为止。
提示: 查询完一位诗人后需要通过f1.seek(0)将文件指针移到文件的开始处
f1=open("sy6//唐诗.txt","r",encoding="utf-8")
#代码开始
while True:
x=input("诗人姓名")
if x=='':
break
f1.seek(0) #将文件指针移到文件的开始处
ct=0
for line in f1:
#line=line.strip()
a=line.find(':')
b=line[3:a]
if x==b:
ct+=1
print(line,end='')
if ct==0:
print('无作品')
else:
print('一共{}首' .format(ct))
#代码结束
f1.close()
实验五 异常处理
第1关:学习-Python异常处理之try…except…finally…
任务描述
本关任务:已知 with open 语句在任何情况下都会关闭文件,请补充右侧代码实现该功能。
相关知识
为了完成本关任务,你需要掌握 try…except…finally… 语句。
try…except…finally…
try...except... 语句之后除了可以添加 esle 语句之外,还可以添加 finally 语句,try...except...finally... 语句无论是否发生异常都将执行的代码。如图 1 所示。
图 1
# 请在下面的 Begin-End 之间按照注释中给出的提示编写正确的代码
########## Begin ##########
f = open("src/step1/test.txt","r")
try:
eval(input())
# 补充代码使普通的 open 语句具有 with open 的功能
except Exception as e:
print("错误信息为%s"%e)
finally:
########## End ##########
if f.closed:
print("文件未关闭")
else:
print("文件已关闭")