文章目录
第二章-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,301):
if x%2==0 and x%3==0 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(2*i+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**(2*i-1)/jc(2*i-1))>=1e-7:
a=((-1)**(i-1))*(x**(2*i-1))/jc(2*i-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')
实验3-2 Python基础-循环结构
实验3-2 Python基础-循环结构
任务描述
程序在一般情况下是按顺序执行的。编程语言提供了各种控制结构,允许更复杂的执行路径。循环语句允许我们执行一个语句或语句组多次。本次任务要求是认真阅读相关知识部分,完成相应题目。
第一题:
补充程序,用循环语句完成程序,输出[1,3000)的所有同时为3、5和7的倍数的数。
第二题:
计算e的近似值。编写程序,根据近似公式e≈1+1/(1!)+1/(2!)+1/(3!)+…+1/(n!)计算e的近似值,要求直至最后一项的值小于10的负七次方为止。
相关知识
Python中循环结构
for循环:
for循环在Python中是一个通用的迭代器,可以遍历任何有序的序列对象内的元素。for语句可用于字符串、列表、元组、文件等可迭代对象。for循环格式如下:
for <循环变量> in <遍历结构>:
<语句块1>
else:
<语句块2>
for循环也可称为“遍历循环”,是因为for语句的循环执行次数是根据遍历结构中元素个数确定的。遍历循环可以理解为从遍历结构中逐一提取元素,放在循环变量中,对于每个所提取的元素执行一次语句块。
while循环
while循环格式:
while <条件>:
<语句块1> #重复执行的部分,称为循环体
else: #可选部分
<语句块2>
如果不是执行break语句而结束循环,<语句块2>才会被执行
Python中循环控制语句
循环控制语句可以更改语句执行的顺序。Python支持以下循环控制语句:
控制语句 描述
break语句 在语句块执行过程中终止循环,并且跳出整个循环
continue语句 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。
pass语句 pass是空语句,是为了保持程序结构的完整性。
编程要求
补全代码,完成上述题目,直接print()每道题目的答案,每个答案占一行,中间不能空行。
注:请不要直接print()每道题目的最终答案,一经发现将取消整个题目的成绩!
平台会对你编写的代码进行测试。
import math
#第一题
# 请在下面编写代码
# ********** Begin ********** #
for i in range(1,3000):
if i%3==0 and i%5==0 and i%7==0:
print(i)
# ********** End ********** #
# 请不要修改下面的代码
print('\n***********************\n')
#第二题
s, y, i=1, 1, 1
# 请在下面编写代码
# ********** Begin ********** #
def jc(n):
if n==1:
return 1
else:
return jc(n-1)*n
while i/jc(i)>=1e-7:
y=1/jc(i)
s=y+s
i+=1
# ********** End ********** #
# 请不要修改下面的代码
print("e值为{:.6f}".format(s))
第2关:计算最大公约数和最小公倍数
任务描述
本关任务:编写一个能求两个正整数的最大公约数和最小公倍数的小程序。
编程要求
根据提示,在右侧编辑器补充代码,求最大公约数和最小公倍数。
从键盘输入两个整数,编写程序求出这两个整数的最大公约数和最小公倍数(提示:求最大公约数可用辗转相除法,求最小公倍数则用两数的积除以最大公约数即可)
测试说明
平台会对你编写的代码进行测试:
测试输入:
75
45;
预期输出:
最大公约数15 最小公倍数225.0
x=eval(input("请输入一个整数"))
y=eval(input("请输入另一个整数"))
m, n = x, y
if x < y:
x,y = y,x
r = x % y
# 请在下面编写代码
# ********** Begin ********** #
#如果余数不为0,则拿较小的数与余数继续相除,判断新的余数是否为0
#如果余数为0,则最大公约数就是本次相除中较小的数。
while r!=0:
x,y=y,r
r=x%y
# ********** End ********** #
# 请不要修改下面的代码
print("\n最大公约数{} 最小公倍数{}".format(y,m*n/y))
第3关:统计字符个数
任务描述
本关任务:编写一个能统计字符个数的小程序。
编程要求
根据提示,在右侧编辑器补充代码,统计不同字符个数。用户输入一行字符,编写一个程序,统计并输出里面英文字母、数字、空格和其他字符的个数。
测试说明
平台会对你编写的代码进行测试:
测试输入:123ABCabc;
预期输出:
数字字符3个,英文字符5个,空格0个,其他字符0个
开始你的任务吧,祝你成功
s=input("请输入一串字符")
sz,zm,kg,qt=0,0,0,0
# 请在下面编写代码
# ********** Begin ********** #
sz=0
zm=0
kg=0
qt=0
for i in range(len(s)):
if 48<=ord(s[i])<=57:
sz=sz+1
elif 65<=ord(s[i])<=122:
zm=zm+1
elif ord(s[i])==32:
kg=kg+1
else:
qt=qt+1
# ********** End ********** #
# 请不要修改下面的代码
print("\n数字字符{}个,英文字符{}个,空格{}个,其他字符{}个".format(sz,zm,kg,qt))
第4关:数据统计
任务描述
本关任务:编写一个能统计一组数据特征的小程序。
编程要求
根据提示,在右侧编辑器补充代码,进行数据统计。从键盘输入若干个1-100之间的整数,求这些数的和、个数、平均值、最大值、最小值。若输入0,则输入结束,显示统计结果。若输入不符合要求的数,则显示输入错误。
测试说明
平台会对你编写的代码进行测试:
测试输入:4,91,51,2,32,0;
预期输出:
共有数5个,和180,平均值36.0,最大值91,最小值2
测试输入:5,-90,90,0;
预期输出:
输入错误
共有数2个,和95,平均值47.5,最大值90,最小值5
print('"数据特征统计,请输入整数(1-100)"')
x = eval(input())
s,c,maxx,minn,pj=0,0,1,100,0
array=[]
# 请在下面编写代码
# ********** Begin ********** #
while x!=0:
if x<1 or x>100:
print('输入错误')
else:
c=c+1
s=x+s
array.append(x)
pj=s/c
x=eval(input())
maxx=max(array)
minn=min(array)
# ********** End ********** #
# 请不要修改下面的代码
print("\n共有数{}个,和{},平均值{},最大值{},最小值{}".format(c,s,pj,maxx,minn))
第5关:计算sinx
任务描述
本关任务:编写一个能计算sinx的小程序。
编程要求
根据提示,在右侧编辑器补充代码,计算sinx.编写程序,从键盘输入x的值,求
,
直到最后一项绝对值小于1e-7(即10的负7次方)为止(注:x为弧度值)。
测试说明
平台会对你编写的代码进行测试:
测试输入:0;
预期输出:
sin(0.00)=0.00
测试输入:1.57;
预期输出:
sin(1.57)=1.00
n = 1
x = eval(input('请输入'))
# 请在下面编写代码
# ********** Begin ********** #
def jc(n):
if n==1:
return 1
else:
return jc(n-1)*n
i=1
s=0
while abs((-1)**(i+1)*x**(2*i-1)/jc(2*i-1))>=1e-7:
a=(-1)**(i+1)*x**(2*i-1)/jc(2*i-1)
s=a+s
i+=1
# ********** End ********** #
print('\nsin({:.2f})={:.2f}'.format(x,s))
第二章-Python语言基础-2.3循环(二)
第1关:python分支入门基础
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 **********#
# -*- 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分支基础训练
根据提示,在右侧编辑器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的结果为字符串类型的"肥胖","偏瘦","偏胖","正常"
# ********** Begin ********** #
if bmi<18.5:
wto="偏瘦"
dom="偏瘦"
if 18.5<=bmi<=25:
wto="正常"
if 18.5<=bmi<=24:
dom="正常"
if 25<bmi<30:
wto="偏胖"
if 24<bmi<28:
dom="偏胖"
if bmi>=30:
wto="肥胖"
if bmi>=28:
dom="肥胖"
# ********** End ********** #
#请不要修改下面的代码
print("BMI 指标为:国际'{0}', 国内'{1}'".format(wto, dom))
print('\n******************************\n')
#第二题
#数据来源列表,每组数据输出一个结果
for salary in [-1000, 0, 40000, 47450, 98000, 114650, 14980, 17470, 25670, 311950, 360000]:
# 请在下面编写代码
# ********** Begin ********** #
if 0<=salary<=47449:
salaTax=0.22*salary
elif 47450<=salary<=114649:
salaTax=0.25*salary
elif 114650<=salary<=174699:
salaTax=0.28*salary
elif 174700<=salary<=311949:
salaTax=0.33*salary
elif salary>=311950:
salaTax=0.35*salary
else:
salaTax=0
# ********** End ********** #
# 请不要修改下面的代码
print("%.4f" %salaTax) #输出个人所得税salaTax
print('\n***********************\n')
#第三题
#数据来源列表,每组数据输出一个结果
for (p1, p2) in [('s', 'j'), ('b', 'j'),('j', 'j'), ('b', 's')]:
# 请在下面编写代码
#p1,p2代表玩家1,玩家2,'s','j','b' 分别代表石头、剪刀和布
#game=-1,0,1分别代表p1输局,平局,赢局
# ********** Begin ********** #
if p1==p2=='j' or p1==p2=='s' or p1==p2=='b':
game=0
elif (p1=='j' and p2=='b') or (p1=='s' and p2=='j') or (p1=='b' and p2=='s'):
game=1
else:
game=-1
# ********** End ********** #
# 请不要修改下面的代码
print(game)
print('\n***********************\n')
实验五 循环结构
任务描述
本关任务:编写一个能计算斐波那契数列中第x个数的小程序。
相关知识
为了完成本关任务,你需要掌握:1.什么是斐波那契数列,2.for循环
什么是斐波那契数列
斐波那契数列(Fibonacci sequence),又称黄金分割数列、
因数学家莱昂纳多·斐波那契(Leonardoda Fibonacci)以兔子繁殖为例子而引入,故又称为“兔子数列”。
有一对兔子,从出生后第 3 个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,每个月的兔子数形成的数为斐波那契额数列
在数学上,斐波那契数列以如下被以递推的方法定义:F(1)=1,F(2)=1, F(n)=F(n - 1)+F(n - 2)(n ≥ 3,n ∈ N*)
斐波那契
for循环
在python中,对于for循环,可以设置遍历结构为range函数
for i in range(初值,终值):
<语句块>
i从初值取值到终值-1,每次执行一次循环体
编程要求
根据提示,在右侧编辑器补充代码,输入x,输出第x个斐波那契数列。
注意:斐波那契数列的第一项和第二项为1
测试说明
平台会对你编写的代码进行测试:
测试输入:6
预期输出:
8
测试输入:1;
预期输出:
1
测试输入:10;
预期输出:
55
x=eval(input(""))
#代码开始
a,b=0,1
for i in range(x):
a,b=b,a+b
print(a)
#代码结束
第2关:统计一段英文语句中的单词数和句子数
任务描述
本关任务:编写一个小程序,输入一段英文短语,统计其中的单词数目和句子数目。
相关知识
为了完成本关任务,你需要掌握:1.如何判断英文语句中的单词数和句子数,2.如何遍历字符串。
获取判断英文语句中的单词数目和句子数目
要统计词语的数量,则统计当前字符是大写或小写英文字母,而前一个字符是空格或标点符号(句号(.)惊叹号(!)问号(?)逗号(,)分号(;)双引号(“”))等的数目。
例如,输入英文短语如下,统计结果为57个单词和3个句子。
提示:对字符串的每个字符ch循环,若ch是句号(.)惊叹号(!)问号(?)时,则表示句子数的变量加一。若ch是大小写英文字母,且前一个字符是指定标点时,表示词语数的变量加一。前一个字符可以用一个变量保存,只要在循环语句的最后将ch赋值给该变量即可。提示:对于第一个字符,可以设置其前一个字符为空格。
句子判断
遍历字符串
for c in s:
<语句块>
从字符串s中逐一提取字符,放在字符变量c中,
对于所提取的每个字符执行一次循环体
编程要求
根据提示,在右侧编辑器补充代码,统计输入的英文中的单词数目和句子数目。
测试说明
平台会对你编写的代码进行测试:
测试输入:The government of Beijing has spent a large amount of money on building these bridges. For their own safety, pedestrians should be encouraged to use them instead of risking their lives by dashing across the road. Old people , however , may find it a little difficult climbing up and down the steps, but it is still much safer than walking across the road with all the danger of moving traffic.
预期输出:
单词69句子3
测试输入:One morning a fox saw a cock.He thought,“This is my breakfast.” He came up to the cock and said,“I know you can sing very well.Can you sing for me?”
预期输出:
单词33句子4
提示:
可以用一个字符变量保存前一个字符(当前字符前的字符)
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.如何截取字符串。
打开文件
<file对象名>=open(<文件名>,<打开模式>)
打开一个文件,并创建一个file类对象
文件名在当前文件夹下,直接输入文字的名字
当以读的方式打开文件时,设置打开模式为”r”
遍历文件
遍历结构是文件
遍历文件fi的每一行
for line in fi:
<语句块>
line是每行读出的字符串
注意:line字符串的结尾为换行符’\n’
截取字符串
str.find(指定字符)返回指定字符在字符串str的索引pos
str[:pos]是该字符串中该字符以前的子串
str[pos+1:]是该字符串中该字符以后的子串
编程要求
根据提示,在右侧编辑器补充代码,实现检测用户名和密码的功能。
注意:str.strip(‘\n’)去掉字符串首尾的换行符
测试说明
平台会对你编写的代码进行测试:
测试输入:
用户名张三
密码129876543
预期输出:
用户名或密码错误
测试输入:
用户名甲乙
密码11111111
预期输出:
密码正确
测试输入:
用户名刘好
密码129876543
预期输出:
用户名或密码错误
f1=open("sy5/密码.txt","r",encoding="utf-8")
x=input("用户名")
y=input("密码")
flag=0
for line in f1:
line=line.strip("\n")
pos=line.find(",")
if(x==line[:pos] and y==line[pos+1:]):
print("密码正确")
flag=1
break
if flag==0:
print("用户名或密码错误")
#代码结束
第4关:通过数列求自然常数e
任务描述
本关任务: 编写程序,根据近似公式
e≈1+1/(1!)+1/(2!)+1/(3!)+… +1/(n!)
计算 e 的近似值,要求直至最后一项的值小于 1e-7 次方为止
相关知识
为了完成本关任务,你需要掌握:while循环
while循环
while <循环条件> :
<语句块>
当判断条件为True时,循环体重复执行语句块中语句;当条件为False时,循环终止,执行与while同级别缩进的后续语句
编程要求
根据提示,在右侧编辑器补充代码,输出自然常数e的值。
根据近似公式
e
计算 e 的近似值,要求直至最后一项的值小于 1e-7 为止
s=1
#代码开始
def jc(n):
if n==1:
return 1
else:
return jc(n-1)*n
a=1
while 1/jc(a)>=1e-7:
s=s+1/jc(a)
a+=1
#代码结束
print("e值为{:.8}".format(s))
第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元
编程要求
根据提示,在右侧编辑器补充代码,计算并输出每年的折旧额。
测试说明
平台会对你编写的代码进行测试:
测试输入:
原价80000
残值2000
年限15
预期输出:
第 1年折旧10666.67
第 2年折旧9244.44
第 3年折旧8011.85
第 4年折旧6943.60
第 5年折旧6017.79
第 6年折旧5215.42
第 7年折旧4520.03
第 8年折旧3917.36
第 9年折旧3395.04
第10年折旧2942.37
第11年折旧2550.06
第12年折旧2210.05
第13年折旧1915.38
第14年折旧5224.97
第15年折旧5224.97
注意 年号显示为2位 折旧额保留两位小数
yj=eval(input("原价"))
cz=eval(input("残值"))
n=eval(input("年限"))
s=2/n
y=0
h=0
for i in range(1,n-1):
y=(yj-h)*s
h=h+y
print("第{:2d}年折旧{:.2f}".format(i,y))
for i in range(n-1,n+1):
Y=(yj-h-cz)/2
print("第{:2d}年折旧{:.2f}".format(i,Y))
#代码结束
第6关:销售统计
任务描述
本关任务:循环输入商品编号、数量和价格,进行累加。
只到输入商品编号为0000为止。
输出商品种类、数量总计和金额总计。
测试说明
平台会对你编写的代码进行测试:
测试输入
输入商品代码0101
输入商品价格5
输入商品数量2
输入商品代码0103
输入商品价格10
输入商品数量5
输入商品代码9999
输入商品价格2
输入商品数量1
输入商品代码0000
预期输出
商品种类3数量总计8金额总计62.00
spbh=input("输入商品代码")
s=0
c=0
sl=0
#代码开始
while spbh!='0000':
c=c+1
jg=eval(input("输入商品价格"))
SL=eval(input("输入商品数量"))
sl=SL+sl
spbh=input("输入商品代码")
s=s+SL*jg
#代码结束
print("商品种类{}数量总计{}金额总计{:.2f}".format(c,sl,s))
第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("金额"))
#代码开始
n=0
s=0
k=m
while s<x:
s=k*(1+r)
k=m+s
n=n+1
#代码结束
print(n)
第8关:诗人作品统计
本关任务:
在唐诗.txt文件,如下图所示。每首诗的标题为序号诗人冒号诗名。
唐诗
编写程序,输入诗人姓名,显示该诗人所写的诗的标题,以及作品数,如图所示。
如果该诗人没有作品,显示无作品。
唐诗作者统计
f1=open("sy5//唐诗.txt","r")
x=input("输入作者")
#代码开始
n=0
for line in f1:
line=line.strip("\n")
pos=line.find(":")
if x==line[3:pos]:
print(line)
n+=1
if n==0:
print("无作品")
else:
print("作品数",n)
#代码结束
实验6 多重循环
第1关:九九乘法表
任务描述
本关任务:编写一个能输出九九乘法表的小程序。
相关知识
为了完成本关任务,你需要掌握:1.如何循环嵌套。
编程要求
根据提示,在右侧编辑器补充代码,计算如下图所示的两种形式的九九乘法表。
,
注意:每行中,各项之间用一个"\t"分隔。
测试说明
## 开始 ##
# 输出第一种形式的九九乘法表
for i in range(1,10):
print('\t' * (9 - i), end='')
for j in range(1,i):
print(i,'*',j,'=',i*j,'\t',sep='',end='')
print(i,'*',i,'=',i*i,'\t',sep='')
print()
for i in range(1,10):
for j in range(1,10-i):
print(i,'*',j,'=',i*j,'\t',sep='',end='')
print(i,'*',10-i,'=',i*(10-i),'\t',sep='')
## 结束 ##
第2关:求素数和
任务描述
本关任务:求给定范围内的所有素数的和。
素数:素数又称质数(prime number),除了1和它自身外,不能被其他自然数整除的数。
编程要求
根据提示,在右侧编辑器中Begin-End间补全代码,完成任务。程序从测试集中读取到数据范围n,求2~n之间所有素数的和。
直接print()题目的答案。
测试说明
平台会对你编写的代码进行测试:
测试输入:10
预期输出:
17
# s2-12求素数和
n = eval(input()) #输入范围
# 请在下面编写代码
# ********* Begin ******** #
s=0
for i in range(2,n+1):
p=1
x=int((i+1)**0.5)
for j in range(2,x+1):
if i%j==0:
p=0
break
if p==1:
s=s+i
print(s)
# ********** End ********** #
第3关:完全数
任务描述
本关任务:编写一个能计算给定范围内完全数的小程序。
相关知识
完全数(Perfect number),又称完美数或完备数,是一些特殊的自然数。它所有的真因子(即除了自身以外的约数)的和(即因子函数),恰好等于它本身。
如果一个数恰好等于它的因子之和,则称该数为“完全数”。
第一个完全数是6,6=1+2+3。第二个完全数是28,28=1+2+4+7+14。
编程要求
根据提示,在右侧编辑器补充代码,计算并输出指定范围内的完全数。程序从测试集中读取到数据范围n,求n以内所有完全数,每行输出一个数据。
测试说明
平台会对你编写的代码进行测试:
测试输入:10;
预期输出:
6是完全数
测试输入:100;
预期输出:
6是完全数
28是完全数
# s2-13求完全数
n = eval(input())
for i in range(2,n+1):
# 请在下面编写代码
# ********** Begin ********** #
s=0
for j in range(1,i):
if i%j==0:
s=s+j
if s==i:
print(i,'是完全数',sep='')
第4关:百马百石
任务描述
有100石粮食,每匹大马驮2石,每匹中马驮1石,每两匹小马驮1石,要用100匹马驮完100石粮食,共有多少种驼法?要求每种马至少一匹。
编程要求
根据提示,在右侧编辑器Begin-End间补充代码,计算并输出百马百石问题的所有解。每种解法输出一行,注意标点符号全部为中文格式。
测试说明
平台会对你编写的代码进行测试:
预期输出前3行如下:
第1种分配方法:大马:1匹,中等马:97匹,小马:2匹
第2种分配方法:大马:2匹,中等马:94匹,小马:4匹
第3种分配方法:大马:3匹,中等马:91匹,小马:6匹
开始你的任务吧,祝你成功!
我们能做的就是拼尽全力,即使迈出的步子再小,我们也
# s2-14百马百石
count = 0 #计数
# 请在下面编写代码
# ********** Begin ********** #
for i in range(1,50):
for j in range(1,100):
for k in range(2,101,2):
if i+j+k==100 and 2*i+j+k/2==100:
count+=1
print('第',count,'种分配方法:大马:',i,'匹,中等马:',j,'匹,小马:',k,'匹',sep='')
# ********** End ********** #
# 请不要修改下面的代码
print('共有{}种方法'.format(count))
第5关:分解质因数(选做)
任务描述
本关任务:编写一个能计算分解质因数小程序。
编程要求
根据提示,在右侧编辑器补充代码,计算并输出一个正整数(大于1)的质因数。例如:输入90,输出90=233*5。输入2,输出2=2。输入17,输出17=17。
解答提示:
(1)先将n用变量fac保存。后面因式分解用fac进行。
(2)用筛选法从最小的质数2开始,判断2是否fac的因子。如果是,输出质因子2,并将fac/2->fac,再判断是否有因子2,如此循环,直到当前fac中没有因子2,就找出所有的因子2。这部分用while循环实现。
(3)然后再找质数3是否是当前fac的因子,直到n。把从2到n的所有数测试一遍,查找n的因子。
(4)对输出格式要注意,输出的第一个因子是直接输出数值,从第二个因子开始输出时数值前面有*号。判断第一个因子的方法是fac==n。
测试说明
平台会对你编写的代码进行测试:
测试输入:90;
预期输出:
90=233*5
测试输入:2;
预期输出:
# s2-15分解质因数
n = int(input()) #输入要分解的正整数
fac = n #保存初始值
print('{}='.format(n),end='') #先输出该数及等号
# 请在下面编写代码
# ********** Begin ******** #
m=[]
i=2
while i<=n:
if n%i==0:
m.append(str(i))
n=n/i
else:
i=i+1
print('*'.join(m))
# ********** End ********** #
第6关:字母图形(选做)
任务描述
本关任务:由测试集输入一个大写字母(A 到 Z 中的任意一个),输出如下图所示由相关大写字母组成的图形。
,
编程要求
根据提示,在右侧编辑器补充代码,输出字母图形。所输入的字母一定为输出图形的第一行第一个字符(位于图形的左上角),其余部分的字母构成规律和分布由样例给出。
解答提示:
打印图案关键是找出其中的规律与关系。对于输入的字母,首先算出需要打印几行,再算出每行打印多少列。
实际上,输出的每一行包括三部分组成:空格、字符串和换行。每行的空格数+字符串都相同,都等于行数。
测试说明
平台会对你编写的代码进行测试:
测试输入:D
预期输出:
DCBA
CBA
BA
A
# s2-16输出字母图形
ch = input()
# 请在下面编写代码
# ********** Begin ********** #
for i in range(1,ord(ch)-63):
print(' ' * (i-1), end='')
for j in range(i,ord(ch)-63):
print(chr(ord(ch)-j+1),end='')
print("")
# ********** End ********** #