湖南大学python头歌实训-分支语句
Posted 勤奋努力的野指针
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了湖南大学python头歌实训-分支语句相关的知识,希望对你有一定的参考价值。
文章目录
第二章-Python语言基础-2.2条件分支(一)
第1关:顺序结构
任务描述
本关介绍顺序结构,程序最基本的结构就是顺序结构,顺序结构就是程序按照语句顺序,从上到下依次执行各条语句。
本关要求读者理解顺序结构,对输入的三个数changeone,changetwo,plus能够先交换changeone,cahngetwo值,然后计算changeone + plus的值。
相关知识
要实现上述功能,需要严格按照顺序来实现每一个步骤。如果顺序错误,那么便会得出错误结果。
顺序结构
顺序结构如下图所示:
假设存在a,b,c三个整数,如果按照以下顺序执行:
c = a + b
b = c - a
a = b + c
与按照顺序
b = c - a
a = b + c
c = a + b
得出的a,b,c的结果是不同的。
#####交换数值
假设存在整数a = 10,b = 20,交换a,b数值的语句如下:
tmp = a
a = b
b = tmp
编程要求
本关的编程任务是补全inTurn.py文件中的函数部分,程序中给出a,b,c三个整数,要求实现先交换a,b的值,然后计算a + c的值并输出。
本关涉及的代码文件inTurn.py的代码框架如下:
changeOne = int(input())
changeTwo = int(input())
plus = int(input())
#请在此添加代码,交换changeOne,changeTwo的值,然后计算changeOne和plus的和result的值
#********** Begin #
#* End **********#
print(result)
测试说明
本关的测试文件是src/step1/inTurn.py。
读者将 src/step1/inTurn.py 中的代码补充完毕,然后点击评测,平台自动编译运行 inTurn.py ,并以标准输入方式提供测评输入;
平台获取程序的输出,然后将其与预期输出对比,如果一致则测试通过;否则测试失败。
以下是平台对src/step1/inTurn.py的样例测试集:
测试输入:
2
5
10
预期输出:
15
changeOne = int(input())
changeTwo = int(input())
plus = int(input())
#请在此添加代码,交换changeOne,changeTwo的值,然后计算changeOne和plus的和result的值
#********** Begin *********#
changeOne,changeTwo=changeTwo,changeOne
result=plus+changeOne
#********** End **********#
print(result)
第2关:选择结构:if-else
任务描述
程序的第二大结构就是选择结构,在此结构中,程序通过对一个代码块或者几个代码块的判断来决定接下来运行哪一个代码块。
以下场景还原了选择结构的现实场景:某公司根据员工的工龄来决定员工工资的涨幅,当员工的工龄大于等于5年并小于10年时,涨幅是现工资的5%;当员工的工龄大于等于10年并小于15年时,涨幅是现工资的10%;工龄大于等于15年时工资涨幅为15%。
本关的任务是让读者理解选择结构,学会使用最基本的选择语句:if-else语句。
相关知识
选择结构
选择结构如下图所示:
if-else语句
在python中,if-else语句用于控制程序执行,基本形式为:
if 判断语句1:
step1
else:
step2
当判断语句1为真时,执行step1,不成立执行step2。
例如:
name = ‘choose’
#判断变量name是否为’choose’
if name == ‘choose’
print(“条件成立”)
else
print(“条件不成立”)
elif语句
当判断条件有多个时,则用elif语句,基本形式为:
if 判断语句1:
step1
elif 判断语句2:
step2
elif 判断语句3:
step3
……
else:
step
当判断语句1为真时,执行step1,判断语句1为假,判断语句2为真时执行step2,……,最后判断语句都为假时执行step。
例如:
userId = 43
#判断员工号
if userId == 10:
print(“这是10号员工”)
elif userId == 22:
print(“这是22号员工”)
elif userId == 18:
print(“这是18号员工”)
else:
print(“员工ID为:”,userId)
如果你想了解更多运算符相关知识,请参考[美]Katie Cunningham著《Python入门经典》第三章。
编程要求
本关的编程任务是补全choose.py文件中的判断语句部分,具体要求如下:
填入如果workYear < 5的判断语句
填入如果workYear >= 5 and workYear < 10的判断语句
填入如果workYear >= 10 and workYear < 15的判断语句
填入当上述条件判断都为假时的判断语句
本关涉及的代码文件choose.py的代码框架如下:
workYear = int(input())
#请在下面填入如果workYear < 5的判断语句
#********** Begin #
#* End #
print(“工资涨幅为0”)
#请在下面填入如果workYear >= 5 and workYear < 10的判断语句
# Begin #
# End #
print(“工资涨幅为5%”)
#请在下面填入如果workYear >= 10 and workYear < 15的判断语句
# Begin #
# End #
print(“工资涨幅为10%”)
#请在下面填入当上述条件判断都为假时的判断语句
# Begin #
# End ***********#
print(“工资涨幅为15%”)
测试说明
本文的测试文件是src/step2/choose.py,具体测试过程如下:
读者将 src/step2/choose.py 中的代码补充完毕,然后点击评测,平台自动编译运行 choose.py ,并以标准输入方式提供测评输入;
平台获取程序的输出,然后将其与预期输出对比,如果一致则测试通过;否则测试失败。
以下是平台对src/step2/choose.py的样例测试集:
测试输入:10
预期输出:工资涨幅为10%
第3关:选择结构 - 三元操作符
任务描述
程序中的选择结构中除了if-else,elif之外,还有一个三元操作符。三元操作符也是根据条件判断执行哪一个代码块,但三元操作符的最大特点是不需要像if-else语句那样写多行代码,三元操作符只需一行代码。
本关要求读者能够学会并使用三元操作符来判断谁才是射击比赛的赢家。
相关知识
三元操作符
三元操作符的基本格式为:
result = x if x < y else y
其中,x < y为判断语句,若x < y为真则result = x,否则result = y。
如果你想了解更多运算符相关知识,请参考[美]Katie Cunningham著《Python入门经典》第三章。
编程要求
本关的编程任务是补全isWin.py文件中的判断语句部分,具体要求如下:
根据输入的jim与jerry的射击得分,若jim得分更高,则赢家为jim,输出jim的名字;若jerry得分更高,则赢家为jerry,输出jerry的名字。
本关涉及的代码文件isWin.py的代码框架如下:
jimscore = int(input())
jerryscore = int(input())
#请在此添加代码,判断若jim的得分jimscore更高,则赢家为jim。若jerry的得分jerryscore更高,则赢家为jerry并输出赢家的名字。
#********** Begin #
#* End **********#
print(winner)
测试说明
本文的测试文件是src/step3/isWin.py,具体测试过程如下:
读者将 src/step3/isWin.py中的代码补充完毕,然后点击评测,平台自动编译运行 isWin.py ,并以标准输入方式提供测评输入;
平台获取程序的输出,然后将其与预期输出对比,如果一致则测试通过;否则测试失败。
以下是平台对src/step3/isWin.py的样例测试集:
测试输入:
13
15
预期输出:
jerry
workYear = int(input())
#请在下面填入如果workYear < 5的判断语句
#********** Begin *********#
if workYear<5:
#********** End ***********#
print("工资涨幅为0")
#请在下面填入如果workYear >= 5 and workYear < 10的判断语句
#********** Begin *********#
elif workYear>=5 and workYear<10:
#********** End ***********#
print("工资涨幅为5%")
#请在下面填入如果workYear >= 10 and workYear < 15的判断语句
#********** Begin *********#
elif workYear>=10 and workYear<15:
#********** End ***********#
print("工资涨幅为10%")
#请在下面填入当上述条件判断都为假时的判断语句
#********** Begin *********#
else:
#********** End ***********#
print("工资涨幅为15%")
第4关:选择结构-入门实训
任务描述
本关任务:本关主题是通过解决简单问题,实践Python分支结构基础。
仔细阅读背景知识,学习Python分支结构的语法构成及语义,学会分支结构如何编排语句的执行顺序,以及实际问题哪些解决方案需要用分支结构来表达。完成下面的实训。
这些实训中,请在指定的位置编写程序,得到正确的输出。
相关知识
(略)
编程要求
根据提示,在右侧编辑器Begin-End处补充代码,完成如下要求:
第一题
有31天的月份为[1,3,5,7,8,10,12]月
请编写程序,输入1~12的整数,若它对应的月份为31天则输出yes,否则输出no。
第二题
气象预报时,一般按照风速对飓风进行分级,下表给出对应关系。
风速 74-95 96-110 111-130 131-154 155及以上
级别 1 2 3 4 5
请编写程序,根据用户输入的风速,输出对应的飓风等级。
jimscore = int(input())
jerryscore = int(input())
#请在此添加代码,判断若jim的得分jimscore更高,则赢家为jim。若jerry的得分jerryscore更高,则赢家为jerry并输出赢家的名字。
#********** Begin *********#
winner='jim' if jimscore>jerryscore else 'jerry'
#注意字符串的表达
#********** End **********#
print(winner)
# -*- coding: utf-8 -*-
"""
Created on Sat Aug 29 09:49:20 2020
@author: hzh
"""
# 第一题
month = int(input())
# 31天的月份:1~7之间的奇数月、8~12之间的偶数月
# 如果是31天的月份输出yes
####### begin #######
if (1<=month<=7 and month%2==1) or (8<=month<=12 and month%2==0):
print('yes')
####### end #########
# 如果不是31天的月份,输出no
####### begin #######
else:
print('no')
####### end #########
print('\\n***********************\\n')
#第二题
# 从测试集得到风速
velocity = int(input())
# 默认是0级
rank = 0
# 如果风速在74到95之间,输出1
####### begin #######
if 74<=velocity<=95:
rank=1
####### end #########
# 如果风速在96到110之间,输出2
####### begin #######
elif 96<=velocity<=110:
rank=2
####### end #########
# 如果风速在111到130之间,输出3
####### begin #######
elif 111<=velocity<=130:
rank=3
####### end #########
# 如果风速在131到154之间,输出4
####### begin #######
elif 131<=velocity<=154:
rank=4
####### end #########
# 如果风速大于155,输出5
####### begin #######
elif velocity>=155:
rank=5
else:
rank=0
####### end #########
print(rank)
第二章-Python语言基础-2.2条件分支(理科)
第1关:python分支入门基础
任务描述
本关任务:掌握python单分支、多分支程序设计基本入门。
相关知识
为了完成本关任务,你需要掌握:1.if–else二分支,2.if–else多分支
#####if-else语句
在python中,if-else语句用于控制程序执行,基本形式为:
if 判断语句1:
step1
else:
step2
当判断语句1为真时,执行step1,不成立执行step2。
elif语句
当判断条件有多个时,则用elif语句嵌套解决,基本形式为:
if 判断语句1:
step1
elif 判断语句2:
step2
elif 判断语句3:
step3
……
else:
step
当判断语句1为真时,执行step1,判断语句1为假,判断语句2为真时执行step2,……,最后判断语句都为假时执行step。
编程要求
根据提示,在右侧编辑器补充代码,完成分支程序设计。
第1题:
闰年的判断:判断某一年是否是闰年,是则输出yes,否则输出no。
第2题:
月份天数判断:从键盘输入月份,判读该月份是否是30天,是则输出yes,否则输出no。
第3题:
成绩等级判断:从键盘输入学生成绩,如果学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下的用C表示。
第4题:
气象预报时,一般按照风速对飓风进行分级,下表给出对应关系。
风速 74-95 96-110 111-130 131-154 155及以上
级别 1 2 3 4 5
请编写程序,根据用户输入的风速,输出对应的飓风等级。
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 8 06:29:54 2020
@author: hzh
"""
#第1题:
year = int(input())
# 如果是闰年输出yes
####### begin #######
if (year%4==0 and year%100!=0) or year%400==0:
print('yes')
####### end #########
# 如果不是闰年,输出no
####### begin #######
else:
print('no')
####### end #########
#第2题:
month = int(input())
# 30天的月份:4,6,9,11
# 如果是30天的月份输出yes
####### begin #######
if month==4 or month==6 or month==9 or month==11:
print('yes')
####### end #########
# 如果不是30天的月份,输出no
####### begin #######
else:
print('no')
####### end #########
#第3题:
# 从键盘输入成绩,等级默认为0级
scores = int(input())
grade = '0'
#如果成绩>=90分的输出'A'
####### begin #######
if scores>=90:
garde='A'
####### end #########
#否则成绩60-89分之间的用B表示
elif 60<=scores<=89:
grade='B'
####### end #########
#60分以下的用C表示
else:
grade='C'
####### end #########
print(grade)
#第4题:
# 从键盘输入风速
velocity = int(input())
# 默认是0级
rank = 0
# 如果风速在74到95之间,输出1
####### begin #######
if 74<=velocity<=95:
rank=1
####### end #########
# 如果风速在96到110之间,输出2
####### begin #######
elif 96<=velocity<=110:
rank=2
####### end #########
# 如果风速在111到130之间,输出3
####### begin #######
elif 111<=velocity<=130:
rank=3
####### end #########
# 如果风速在131到154之间,输出4
####### begin #######
elif 131<=velocity<=154:
rank=4
####### end #########
# 如果风速大于155,输出5
####### begin #######
elif velocity>=155:
rank=5
####### end #########
else:
rank=0
print(rank)
第2关:python分支基础训练
任务描述
本关任务:本关主题是通过解决简单问题,实践Python分支结构基础训练。
相关知识(略)
根据提示,在右侧编辑器Begin-End处补充代码,完成如下要求:
第1题
摄氏温度转换为华氏温度的公式是:F=
5
9
C+32,热力学上的绝对零度相当于摄氏-273.15℃,低于这个温度意义不大。请完成程序,将有意义的摄氏温度转换成对应的华氏温度,如果是无意义的数据结果输出为None。
第2题
请编写程序,计算给定的实数的绝对值。(要求:不准使用abs函数)
第3题
请完成程序,对给定的一对整数,按从小到大排序。
第4题
请完成程序,对给定的三个整数,按从小到大排序。
第5题
请完成程序,对给定的一对整数,计算第一个数除以第二个数的结果,结果是实数。
第6题
请完成程序,对给定的三个实数,假设第一个实数是二次项系数、第二个是一次项系数、第三个是常数项,请计算以这三个实数为系数的一元二次方程的实根,若方程无实根, 输出为None。
第7题
请完成程序,实现以下函数f的计算能力,对给定的x值,计算正确的f(x)结果。
f(x)=
⎩
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎨
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎪
⎧
x−2
x+3
x
2
∣x∣
x
3
3x−4
4x+1
−10⩽x<−8
−8⩽x<−6
−6⩽x⩽−2
−2<x<2
2⩽x⩽4
4<x⩽6
6<x⩽8
编程要求
根据提示,在右侧编辑器补充代码,计算并输出数组的平均值和最大值。
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 8 07:49:34 2020
@author: hzh
"""
#定义一个格式化输出函数
def print_(x):
if type(x) == float:
print("%.4f" % x)
else:
print(x)
#第1题
#数据来源于列表
for temp in [-280, -100, 0, 20, 120, 200]:
#请在下面编写代码
# ********** Begin ********** #
if temp<-273.15:
F=None
else:
F=9*temp/5+32
# ********** End ********** #
#请不要修改下面的代码
print_(F)
print('\\n***********************\\n')
#第2题
#数据来源于列表
for number in [-101.23, -3.14, 0, 12.55, 1908]:
# 请在下面编写代码
# ********** Begin ********** #
if number<0:
number=0-number
# ********** End ********** #
# 请不要修改下面的代码
print_(number)
print('\\n***********************\\n')
#第3题
#数据来源于列表
for (num1, num2) in [(12, 34), (-6, -7),(-12, 23), (-273, 0), (0, 199)]:
# 请在下面编写代码
# ********** Begin ********** #
if num1>num2:
num1,num2=num2,num1
# ********** End ********** #
# 请不要修改下面的代码
print(num1, ' ', num2)
print('\\n***********************\\n')
#第4题
#数据来源于列表
for (num1, num2, num3) in [(-231, -321, 123), (100, 0, -99), (-980, -1002, -1), (6,1,2017)]:
# 请在下面编写代码
# ********** Begin ********** #
if num1<num2:
if num3<num2:
num2,num3=num3,num2
if num2<num1:
if num1<num3:
num1,num2=num2,num1
elif num3<num2:
num1,num2,num3=num3,num2,num1
else:
num1,num2,num3=num2,num3,num1
# ********** End ********** #
# 请不要修改下面的代码
print(num1, num2, num3)
print('\\n***********************\\n')
#第5题
#数据来源于列表
for (num1, num2) in [(10, 5), (12,34), (89,0), (-100, 23), (789, -123)]:
# 请在下面编写代码
# ********** Begin ********** #
if num2==0:
print('None')
else:
result=num1/num2
# ********** End ********** #
# 请不要修改下面的代码
print_(result)
print('\\n***********************\\n')
#第6题
#数据来源于列表
for (a, b, c) in [(1,2,1), (1,-2,1), (1,2,-3), (12, 34, 56), (78, 89, 100)]:
# 请在下面编写代码
# ********** Begin ********** #
x=b**2-4*a*c
if x>=0:
root1=(-b+x**0.5)/2*a
root2=(-b-x**0.5)/2*a
else:
root1=None
root2=None
# ********** End ********** #
# 请不要修改下面的代码
print(root1, root2)
print('\\n***********************\\n')
#第7题
#数据来源于列表
for x in [-9, -8, -7, -6, -5, -2, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8]:
# 请在下面编写代码
# ********** Begin ********** #
if -10<=x<-8:
fx=x-2
if -8<=x<-6:
fx=x+3
if -6<=x<=-2:
fx=x**2
if -2<x<2:
fx=abs(x)
if 2<=x<=4:
fx=x**3
if 4<x<=6:
fx=3*x-4
if 6<x<=8:
fx=4*x+1
# ********** End ********** #
# 请不要修改下面的代码
print_(fx)
第3关:python分支综合训练
相关知识 (略)
编程要求
根据提示,在右侧编辑器Begin-End处补充代码,完成如下要求:
第一题:BMI 问题的求解
请完成程序,根据下图表格,计算国内与国际BMI的值
,
已知某人的体重和身高,根据上表计算国内与国外的BMI,并输出结果。
提示:BMI= 体重/(身高的平方)
第二题:个人所得税的计算问题
在指定位置编写代码,实现一个函数,功能是根据下表计算个人所得税。
,
注:具体输出请查看测试集。
第三题:剪刀石头布的游戏问题
1、编写程序实现:剪刀、石头和布的游戏。
规则说明:1)两个人出的相同的为平局;
2)布胜过石头,石头胜过剪刀,剪刀胜过布。
提示:玩家:p1,p2
‘剪刀’‘石头’‘布’= ‘j’,‘s’,‘b’
结果: 0:平局,1:p1胜,-1:p1负
# -*- coding: utf-8 -*-
"""
Created on Fri Aug 28 15:27:35 2020
@author: hzh
"""
#第一题
#数据来源列表,每组数据输出一个结果
for (Weight,Height) in [(60,1.65),(40,1.60),(80, 1.70),(75,1.83),(88,1.80)]:
bmi = Weight / pow(Height, 2)
wto, dom = " ", " "
#请在下面编写代码
#wto, dom的结果为字符串类型的"肥胖","偏瘦","偏胖",湖南大学python头歌实训-循环语句
文章目录
-
第二章-Python语言基础-2.3循环(一)
第1关:While循环与break语句
程序的第三大结构是循环结构。在此结构中,通过一个判断语句来循环执行一个代码块,直到判断语句为假时跳出循环。循环语句分为while循环、for循环、循环嵌套和迭代器。循环语句中有一个语句break,通过这个语句可以跳出整个循环。以下场景便模拟了循环结构与跳出循环的现实场景:
在一个工厂的流水线上每天需要加工零件100件,且每件零件所做的加工都是一样的,也就是说流水线每天要循环做相同的工作100次,但是如果在加工时突然停电,则流水线停止对后面所有零件的加工,跳出循环。
本关的任务是让读者学会使用while循环与break语句。
相关知识
while循环+break结构如下图所示:
while语句
while语句的基本形式为:
while 判断条件1:
循环语句
当判断条件1为true时,执行循环语句,直到判断条件1为假。
例如:
count = 0
while(count <= 10):
print(“现在计数为:”,count)
count += 1
break语句
break语句的基本形式为:
while 判断条件1:
循环语句
判断条件2:
break
当判断条件1为true时执行循环语句,若此时判断条件2为true,执行break跳出while循环,若判断条件2一直为false,则执行while循环,一直到判断条件1为false。
例如:
count = 0
while(count <= 10):
print(“现在计数为:”,count)
count += 1
if(count > 5):
break
如果你想了解更多运算符相关知识,请参考[美]Katie Cunningham著《Python入门经典》第三章。
编程要求
本关的编程任务是补全line.py文件中的判断语句部分,具体要求如下:
填入当已处理零件数小于总零件数count < partcount时的while循环判断语句。
在停电时填入break语句跳出循环。
本关涉及的代码文件line.py的代码框架如下:
partcount = int(input())
electric = int(input())
count = 0
#请在此添加代码,当count < partcount时的while循环判断语句
#********** Begin #
#* End #
count += 1
print(“已加工零件个数:”,count)
if(electric):
print(“停电了,停止加工”)
#请在此添加代码,填入break语句
# Begin #
#* End **********#
测试说明
本文的测试文件是line.py,具体测试过程如下:
平台自动编译生成line.py;
平台运行line.py,并以标准输入方式提供测试输入;
平台获取line.py输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step1/line.py的样例测试集:
预期输入:
3
0
预期输出:
已加工零件个数: 1
已加工零件个数: 2
已加工零件个数: 3
预期输入:
5
1
预期输出:
已加工零件个数: 1
停电了,停止加工
partcount = int(input())
electric = int(input())
count = 0
#请在此添加代码,当count < partcount时的while循环判断语句
#********** Begin *********#
while(count<partcount):
#********** End **********#
count += 1
print("已加工零件个数:",count)
if(electric):
print("停电了,停止加工")
#请在此添加代码,填入break语句
#********** Begin *********#
break
#********** End **********#
第2关:for循环※
python中还为我们提供了一种循环结构:for循环。for循环可以遍历序列成员,直到序列中的成员全部都遍历完后才跳出循环。
本关的任务是让读者学会使用for循环。
相关知识
for语句
for语句的基本形式为:
for iteration_var in sequence:
循环语句
依次遍历序列中的成员,执行循环语句。
例如:
list = [‘python’,‘java’,‘c’,‘c++’]
for book in list:
print(“当前书籍为:”,book)
编程要求
根据提示,在右侧编辑器Begin-End处补充代码,完成如下要求:
第一题
已知 L 为 [101, 25, 38,29,108,121] ,利用如下公司计算 L 中的数据标准差
=
N
∑(x−μ)
2
其中, x 为 L 中的数据,N 为数据的个数,u 为数据平均值。
第二题
水仙花数是三位整数,且各位数字的立方之和等于该数,比如,因为
153=1
2
+5
2
+3
2
所以153是水仙花数。编写程序,计算所有的水仙花数
测试说明
需要在右侧的代码中补全所缺失的代码,并打印出计算的结果。平台会对你编写的代码进行测试,若是与预期输出相同,则算通关。
# 第一题
L = [101, 25, 38, 29, 108, 121]
N = len(L)
miu = sum(L)/N
s2 = 0
####### Begin #########
# 请在此输入for循环表达式
for x in L:
####### End ########
s2 = s2+(x-miu)**2
sigma=(s2/N)**0.5
print(sigma)
# 第二题
####### Begin #########
# 请在此输入for循环表达式
for x in range(100,1000):
####### End ########
x1 = x%10 #取出x的个位
x2 = x//10%10 #取出x的十位
x3 = x//100 #取出x的百位
if x1**3+x2**3+x3**3==x:
print(x)
第3关:for循环与continue语句
python中还为我们提供了一种跳出for循环的方法:continue关键词。这个语句的作用是跳出当前循环。以下场景便模拟了for循环结构与跳出当前循环的现实场景;
全班同学的试卷为一个序列,老师在批阅一个班同学的试卷时,需要从第一个同学开始一个一个批阅,然后根据每个同学的具体答卷情况给出最后得分。如果评阅到某张试卷时发现这位同学缺考,为空白卷,那么就不评阅这张试卷,直接评阅下一张。当全部同学的试卷都评阅完毕时,结束评阅,跳出循环。
本关的任务是让读者学会使用for循环与continue语句。
相关知识
for循环+continue结构如下图所示:
continue语句
continue语句的基本形式为:
for iteration_var in sequence:
循环语句
if 判断语句1:
continue
当遍历序列时,如果判断语句1为真,则执行continue语句,跳出当前循环,直接进入下一次循环。
例如:
list = [‘python’,‘java’,‘c’,‘c++’]
count = 0
for book in list:
count += 1
if count == 3:
continue
print(“当前书籍为:”,book)
如果你想了解更多运算符相关知识,请参考[美]Katie Cunningham著《Python入门经典》第三章。
编程要求
本关的编程任务是补全checkWork.py文件中的判断语句部分,具体要求如下:
填入循环遍历studentname列表的代码;
当遍历到缺席学生时,填入continue语句跳过此次循环。
本关涉及的代码文件checkWork.py的代码框架如下:
absencenum = int(input())
studentname = []
inputlist = input()
for i in inputlist.split(‘,’):
result = i
studentname.append(result)
count = 0
#请在此添加代码,填入循环遍历studentname列表的代码
#********** Begin #
#* End #
count += 1
if(count == absencenum):
#在下面填入continue语句
# Begin #
#* End **********#
print(student,“的试卷已阅”)
测试说明
本文的测试文件是checkWork.py,具体测试过程如下:
平台自动编译生成checkWork.py;
平台运行checkWork.py,并以标准输入方式提供测试输入;
平台获取checkWork.py输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step2/checkWork.py的样例测试集:
预期输入:
2
zhangsan,lisi,wangwu,zhaoliu,qianqi
预期输出:
zhangsan 的试卷已阅
wangwu 的试卷已阅
zhaoliu 的试卷已阅
qianqi 的试卷已阅
预期输入:
3
zhangsan,lisi,wangwu
预期输出:
zhangsan 的试卷已阅
lisi 的试卷已阅
absencenum = int(input())
studentname = []
inputlist = input()
for i in inputlist.split(','):
result = i
studentname.append(result)
count = 0
#请在此添加代码,填入循环遍历studentname列表的代码
#********** Begin *********#
for student in studentname:
#********** End **********#
count += 1
if(count == absencenum):
#在下面填入continue语句
#********** Begin *********#
continue
#********** End **********#
print(student,"的试卷已阅")
第4关:循环嵌套
在python中,除了while循环与for循环,还有循环嵌套。循环嵌套就是在一个循环体里嵌入另一个循环。以下场景便模拟了循环嵌套与跳出循环的现实场景:
在一次考试结束后,学校需要统计每位同学的考试总成绩。在这个场景中,我们先将所有同学组成一个序列,然后遍历每位同学,在遍历到每位同学时还要遍历每个同学的每门分数,计算出总成绩,最后得出每位同学的总成绩。
本关的任务是让读者学会使用循环嵌套。
相关知识
嵌套循环分为for循环嵌套和while循环嵌套。
for循环嵌套
for循环嵌套的基本形式为:
for iteration_var in sequence:
for iteration_var in sequence:
循环语句
例如:
for x in range(1,10):
for y in range(0,x):
result = x + y
print(result)
while循环嵌套
while循环嵌套的基本形式为:
while 判断条件:
while 判断条件:
循环语句
例如:
x = 1
y = 0
while x < 10:
while y < x:
result = x + y
print(result)
y += 1
x += 1
y = 0
如果你想了解更多运算符相关知识,请参考[美]Katie Cunningham著《Python入门经典》第三章。
编程要求
本关的编程任务是补全sumScore.py文件中的判断语句部分,具体要求如下:
当输入学生人数后,填入在for循环遍历学生的代码
当输入各科目的分数后的列表后,填入for循环遍历学生分数的代码
本关涉及的代码文件sumScore.py的代码框架如下:
studentnum = int(input())
#请在此添加代码,填入for循环遍历学生人数的代码
#********** Begin #
#* End #
sum = 0
subjectscore = []
inputlist = input()
for i in inputlist.split(‘,’):
result = i
subjectscore.append(result)
#请在此添加代码,填入for循环遍历学生分数的代码
# Begin #
#* End **********#
score = int(score)
sum = sum + score
print(“第%d位同学的总分为:%d” %(student,sum))
测试说明
本文的测试文件是sumScore.py,具体测试过程如下:
平台自动编译生成sumScore.py;
平台运行sumScore.py,并以标准输入方式提供测试输入;
平台获取sumScore.py输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step3/sumScore.py的样例测试集:
预期输入:
2
23,56,78,90
21,56,78,76,91
预期输出:
第0位同学的总分为:247
第1位同学的总分为:322
预期输入:
3
98,76,54
90,54,87,4
78,26,12,90
预期输出:
第0位同学的总分为:228
第1位同学的总分为:235
第2位同学的总分为:206
studentnum = int(input())
#请在此添加代码,填入for循环遍历学生人数的代码
#********** Begin *********#
for student in range(studentnum):
#********** End **********#
sum = 0
subjectscore = []
inputlist = input()
for i in inputlist.split(','):
result = i
subjectscore.append(result)
#请在此添加代码,填入for循环遍历学生分数的代码
#********** Begin *********#
for score in subjectscore:
#********** End **********#
score = int(score)
sum = sum + score
print("第%d位同学的总分为:%d" %(student,sum))
第5关:迭代器
任务描述
迭代器就是用来循环访问一系列元素。迭代器不仅可以迭代序列也可以迭代不是序列但是表现出序列行为的对象。
本关的任务是让读者理解与学会使用迭代器。
相关知识
迭代器的优点
迭代器访问与for循环访问非常相似,但是也有不同之处。对于支持随机访问的数据结构如元组和列表,迭代器并无优势,因为迭代器在访问的时候会丢失数据索引值,但是如果遇到无法随机访问的数据结构如集合时,迭代器是唯一访问元素的方式。
迭代器仅仅在访问到某个元素时才使用该元素,在这之前,元素可以不存在,所以迭代器很适用于迭代一些无法预先知道元素总数的巨大的集合。
迭代器提供了一个统一的访问集合的接口,定义iter()方法对象,就可以使用迭代器访问。
理解迭代器
可直接作用于for循环的数据类型如:list、tuple、dict等统称为可迭代对象:Iterable。可以使用方法isinstance()判断一个对象是否是可迭代对象。
例如:
from collections import Iterable
result = isinstance([],Iterable)
print(result)
result = isinstance((),Iterable)
print(result)
result = isinstance(‘python’,Iterable)
print(result)
result = isinstance(213,Iterable)
print(result)
结果为:
True
True
True
False
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。next()函数访问每一个对象,直到对象访问完毕返回一个StopIteration异常。可以使用isinstance()判断一个对象是否是Iterator对象。
例如:
from collections import Iterator
result = isinstance([],Iterator)
print(result)
result = isinstance((),Iterator)
print(result)
result = isinstance((x for x in range(10)),Iterator)
print(result)
结果为:
False
False
True
所有的Iterable都可以通过iter()函数转化为Iterator。
定义迭代器
当自己定义迭代器时,需要定义一个类,类里面包含一个iter()函数,这个函数能够返回一个带next()方法的对象。
例如:
class MyIterable:
def iter(self):
return MyIterator()
class MyIterator:
def init(self):
self.num = 0
def next(self):
num += 1
if self.num >= 10:
raise StopIteration
return self.num
复制迭代器
迭代器当一次迭代完毕后就结束了,在此调用便会引发StopIteration异常。如果想要将迭代器保存起来,可以使用复制的方法:copy.deepcopy():x = copy.deepcopy(y),不可使用赋值的方法,这样是不起作用的。
如果你想了解更多运算符相关知识,请参考[美]Wesley J. Chun 著《Python核心编程》第八章。
编程要求
本关的编程任务是补全Book.py文件中的判断语句部分,具体要求如下:
当输入一个列表时,填入将列表List转换为迭代器的代码;
填入用next()函数遍历迭代器IterList的代码。
本关涉及的代码文件ListCalculate.py的代码框架如下:
List = []
member = input()
for i in member.split(‘,’):
result = i
List.append(result)
#请在此添加代码,将List转换为迭代器的代码
#********** Begin #
#* End #
while True:
try:
#请在此添加代码,用next()函数遍历IterList的代码
# Begin #
#* End **********#
result = int(num) * 2
print(result)
except StopIteration:
break
测试说明
本文的测试文件是ListCalculate.py,具体测试过程如下:
平台自动编译生成ListCalculate.py;
平台运行ListCalculate.py,并以标准输入方式提供测试输入;
平台获取ListCalculate.py输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step4/ListCalculate.py的样例测试集:
预期输入:
5,6,7,8,9
预期输出:
10
12
14
16
18
预期输入:
12,54,89,10,0
预期输出:
24
108
178
20
0
开始你的任务吧,祝你成功!
List = []
member = input()
for i in member.split(','):
result = i
List.append(result)
#请在此添加代码,将List转换为迭代器的代码
#********** Begin *********#
List=iter(List)
#********** End **********#
while True:
try:
#请在此添加代码,用next()函数遍历IterList的代码
#********** Begin *********#
num=next(List)
#********** End **********#
result = int(num) * 2
print(result)
except StopIteration:
break
第二章-Python语言基础-2.3循环(理)
第1关:循环结构-while与for循环
任务描述
本关主题是通过解决简单问题,实践Python循环结构基础。
本关任务:仔细阅读背景知识,学习Python循环结构的语法构成及语义,学会循环结构如何编排语句的执行顺序,以及实际问题哪些解决方案需要用循环结构来表达。完成下面的实训。这些实训中,请在指定的位置编写程序,得到正确的输出。
相关知识
while循环:重复执行语句1~语句n,直到条件表达式不再成立退出循环
,
例:依次打印1-100,最后打印’end’
i=1
while i<=100:
print(i)
i=i+1
print(‘end’)
while循环常和break一起使用,用于满足某一条件提前中止循环
while 条件表达式:
…
if 条件:
break
例: 在屏幕打印小于10的整数
i=1
while True:
print(i)
i+=1
if i>=10:
break
for循环:一般的使用方式类似while循环,不同的for与in一起使用来访问序列数据
for …in …:
…
if…
break
例: 在屏幕打印小于10的整数
for i in [1,2,3,4,5,6,7,8,9,10]:
print(i)
if i==10:
break
编程要求
根据提示,在右侧编辑器Begin-End处补充代码,完成如下要求:
第1题
编程计算如下公式的值
1
2
+3
2
+5
2
+…+995
2
+997
2
+999
2
并输出结果
第2题
用while语句完成程序逻辑,求如下算法可以求根号x的近似值。(例如,x为3时,算法输出约为1.7320508)。
算法如下:
输入x,若x为负数,则输出“无实数解”,算法结束;
令g=x/2;
通过如下公式计算误差值,如果
∣x−g∗g∣<10
−6
,输出g,算法结束;
否则,将(g+x/g)/2作为新的猜测值,仍记为g。
重复步骤3和4
第3题:
用for循环完成下列程序,计算3位数的水仙花数
水仙花数是三位整数,且各位数字的立方之和等于该数,比如,因为
,
所以153是水仙花数。
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 1 10:54:44 2020
@author: hzh
"""
from math import *
i = 1 # 当前计算的值
s = 0 # 计算出来的和
# 第1题
########### begin ##########
while i<1000:
s=i**2+s
i=i+2
######### end ####
print(s)
########## 第2题 ##############
x = int(input())
if x<0:
print('无实数解')
else:
g = x/2
#######begin##############
# 请输入while循环控制语句
while abs(x-g*g)>=10**(-6):
g=(g+x/g)/2
#######end#################
print("%.4f" %g)
########## 第3题 ##############
#计算并输出三位数内的水仙花数
####### Begin #########
# 请在此输入for循环表达式
for i in range(100,1000):
x=str(i)
if (int(x[0])**3+int(x[1])**3+int(x[2])**3)==i:
print(i)
####### End ########
第2关:循环嵌套-特殊图形的输出
任务描述
本关任务:输出特殊的图形
相关知识
为了完成本关任务,你需要掌握:1.for循环,2.循环嵌套。
编程要求
根据提示,在右侧编辑器补充代码,输出下列图案 。
#####第1题:从键盘输入m行n列,在屏幕上输出m行n列的*行图案
例如输入6,7
输出为:
,
第2题:从键盘输入m行,在屏幕上输出m行的直角图案
例如输入:8
输出为:
,
第3题:从键盘输入m行,在屏幕上输出m行的等腰三角形图案
例如输入9
输出为:
,
# -*- coding: utf-8 -*-
"""
Created on Thu Feb 18 22:18:27 2021
@author: hzh
"""
#第一题:从键盘输入m行n列,在屏幕上输出m行n列的*行图案
m,n= eval(input())
#请在下面编写代码
# ********** Begin ********** #
for i in range(m):
print('*'*n)
# ********** End ********** #
#第二题:从键盘输入m行,在屏幕上输出m行的直角图案
m=eval(input())
#请在下面编写代码
# ********** Begin ********** #
for i in range(m):
print('*'*(2*i+1))
# ********** End ********** #
#第三题:从键盘输入m行,在屏幕上输出m行的等腰三角形图案
m=eval(input())
#请在下面编写代码
# ********** Begin ********** #
for i in range(m):
print(' '*(m-i-1)+'*'*(2*i+1))
# ********** End ********** #
第3关:循环综合-天天向上的力量
任务描述
本关任务:天天向上的力量。
相关知识(略)
编程要求
根据提示,在右侧编辑器补充代码,计算并输出结果。
一年365天,以第1天的能力值为基数,记为1.0,当好好学习时能力值相比前一天提高1‰,当没有学习时由于遗忘等原因能力值相比前一天下降1‰。每天努力和每天放任,一年下来的能力值相差多少呢?
import math
dayup = math.pow((1.0 + 0.001), 365) # 每天提高0.001
daydown = math.pow((1.0 - 0.001), 365) # 每天荒废0.001
print(“向上: %.2f, 向下: %.2f.”%(dayup, daydown))
如果按5‰提高与下降对比一年的能力值相差多少呢?
import math
dayup = math.pow((1.0 + 0.005), 365) # 每天提高0.005
daydown = math.pow((1.0 - 0.005), 365) # 每天荒废0.005
print(“向上: %.2f, 向下: %.2f.”%(dayup, daydown))
任务一:俗语“三天打鱼两天晒网”,一年下来能力值又会是多少呢?请补全代码完成程序编写
#三天打鱼两天晒网
dayup, dayfactor = 1.0, 0.01
#请在下面编写代码
********** begin ********** #
#********** End ********** #
#请不要修改下面的代码
print(“向上3天向下2天的力量: :.2f.”.format(dayup))
任务二:如果按工作日5天学习,周末2天休息每天相比前一天下降1%,工作日要努力到什么程度,一年后的水平才能与每天努力1%取得的效果一样呢?请补全代码完成程序编写。以0.001为dayfactor的增量值。
#天天向上的力量
dayup, dayfactor = 1.0, 0.01
ddup= math.pow((dayup+dayfactor),365)
print(“天天向上的力量: :.2f.”.format(ddup))
#请在下面编写代码
#********** begin ********** #
#********** End ********** #
#请不要修改下面的代码
print(“:.4f.”.format(dayfactor))
print(dayfactor)
任务三:尽管每天坚持,但人的能力发展并不是无限的,它符合特定模型,假设能力增长符合以下模型:以7天为一周期,连续学习3天能力值不变,但从第4天开始至第7天每天能力增长为前一天的1%,如果7天中有一天间断学习,则周期从头计算,请编写程序,如果初始能力为1,固定每10天休息一天, 365天后能力值是多少,请补全代码完成程序编写。
#任务三:天天向上续
from math import *
Restday = 10 #第10天为固定休息日,
dayup, dayfactor = 1.0, 0.01 #初始值
#请在下面编写代码
#********** begin ********** #
#********** End ************ #
#请不要修改下面的代码
print(“dayup is :.2f”.format(dayup))
# -*- coding: utf-8 -*-
"""
Created on Wed Sep 2 09:49:56 2020
@author: hzh
"""
from math import *
#任务一:三天打鱼两天晒网
dayup, dayfactor = 1.0, 0.01
#请在下面编写代码
# ********** begin ********** #
dayup=(dayup-dayfactor)**146*(dayup+dayfactor)**219
# ********** End ********** #
# 请不要修改下面的代码
print(":.2f.".format(dayup))
#任务二:天天向上的力量
import math
dayup, dayfactor = 1.0, 0.01
ddup= math.pow((dayup+dayfactor),365)
#print("天天向上的力量: :.2f.".format(ddup))
#请在下面编写代码
# ********** Begin ********** #
dayfactor=((ddup/((dayup-0.01)**112)))**(1/253)-1
# ********** End ********** #
# 请不要修改下面的代码
print(":.4f.".format(dayfactor))
#任务三:天天向上续
from math import *
Restday = 10 #休息10天,
dayup, dayfactor = 1.0, 0.01 #初始值
#请在下面编写代码
# ********** Begin ********** #
restday=-3
for i in range(1,366):
if i%9==0:
restday=-3
restday += 1
if i%10==0:
restday=-3
continue
if restday>0:
dayup *= 1+dayfactor
# ********** End ********** #
# 请不要修改下面的代码
print(":.2f".format(dayup))#
第4关:循环综合-数列与特殊数问题
-- coding: utf-8 --
“”"
Created on Tue Sep 1 11:25:23 2020
@author: hzh
“”"
from random import *
#第1题
list1=[6,8,10,20] #n的取值列表list1
numbers = [] #用来存放结果的
for n in list1: #依次从列表中取出数据赋值给n,求第n项的结果并保存到numbers[]列表中
#请在下面编写代码
********** Begin ********** #
f1=1
f2=1
if n==1:
f=1
if n>1:
count=2
while count<n:
f=f1+f2
f1=f2
f2=f
count=count+1
numbers.append(f)
#********** End ********** #
#请不要修改下面的代码
print(numbers)
print(‘\\n***********************\\n’)
#第2题
numbers = []
请在下面编写代码
#********** Begin ********** #
for x in range(0,301):
if x%20 and x%30 and x%5==0:
numbers.append(x)
x=x+1
********** End ********** #
请不要修改下面的代码
print(numbers)
print(‘\\n***********************\\n’)
#第3题:输出100以内的素数。
numbers = [] #存放结果的列表
请在下面编写代码
********** Begin ********** #
for i in range(2,101):
p=0
for j in range(2,int(i**0.5)+1):
if i%j==0:
p=1
break
if p==0:
numbers.append(i)
********** End ********** #
请不要修改下面的代码
print(numbers)
print(‘\\n***********************\\n’)
#第4题求:1-3!+5!-7!…(-1)n-1(2n-1)!,求前n的项的和
number=[2,4,5,7,10] #n取值来自列表
result=[] #存放结果的程序
def jc(n):
if n==1:
return 1
else:
return jc(n-1)n
for n in number:
请在下面编写代码
#********* Begin ********** #
x1=0
for i in range(n):
x=(-1)**(i)jc(2i+1)
x1=x+x1
result.append(x1)
#********** End ********** #
请不要修改下面的代码
print(result)
print(‘\\n***********************\\n’)
#第5题 :求sin(x)的值
from math import *
Number=[pi,pi/2,pi/4] # x的取值
result=[]
for x in Number:
i=1
s=0
#请在下面编写代码
# ********** Begin ********** #
while abs(x**(2i-1)/jc(2i-1))>=1e-7:
a=((-1)(i-1))*(x(2i-1))/jc(2i-1)
s=s+a
i=i+1
result.append(s)
********** End ********** #
for num in result:
print(“output=%.10f” %num)
请不要修改下面的代码
print(‘\\n***********************\\n’)
#第6题 #求数列队中两个数的最大公约数
Number = [(8,6),(12,18),(15,8),(100,75)]
greatcd = [] #保存最大公约数
for a,b in Number:
# 请在下面编写代码
# ********** Begin ********** #
m=min(a,b)
for i in range(m,0,-1):
if a%i==0 and b%i==0:
greatcd.append(i)
break
# ********** End ********** #
# 请不要修改下面的代码
#print(‘最大公约数为:’)
print(greatcd)
print(‘\\n***********************\\n’)
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 1 11:25:23 2020
@author: hzh
"""
from random import *
#第1题
list1=[6,8,10,20] #n的取值列表list1
numbers = [] #用来存放结果的
for n in list1: #依次从列表中取出数据赋值给n,求第n项的结果并保存到numbers[]列表中
#请在下面编写代码
# ********** Begin ********** #
f1=1
f2=1
if n==1:
f=1
if n>1:
count=2
while count<n:
f=f1+f2
f1=f2
f2=f
count=count+1
numbers.append(f)
# ********** End ********** #
#请不要修改下面的代码
print(numbers)
print('\\n***********************\\n')
#第2题
numbers = []
# 请在下面编写代码
# ********** Begin ********** #
for x in range(0,以上是关于湖南大学python头歌实训-分支语句的主要内容,如果未能解决你的问题,请参考以下文章
educoder头歌实训 太原理工大学web课程————JavaScript对象:数组