目录
一、Python初识-基本语法
第1关:Hello Python!
第2关:我想看世界
第3关:学好Python
第4关:根据圆的半径计算周长和面积
第5关:货币转换
二、turtle简单绘图
第1关:英寸与厘米转换
第2关:绘制等边三角形
第3关:绘制两个叠加的等边三角形
第4关:绘制三个叠加的等边三角形
第5关:绘制圆圈
三、数字与字符串类型及其操作
第1关:银行存款本金和计算
第2关:将整数换算为月份数和天数
第3关:将整数换算为天、时、分、秒
第4关:回文数判断
第5关:字符串的拼接:名字的组成
第6关:字符替换
第7关:字符串查找与替换
四、Python 入门之函数结构
第1关:函数的参数 - 求输入的整数之和
第2关:函数的返回值 - 求两个正整数的最大公约数
第3关:函数的使用范围与Python 作用域-求两个正整数的最小公倍数
五、函数和代码复用1
第1关:圆面积计算函数
第2关:素数判断
第3关:求和函数
第4关:最大公约数
第5关:最小公倍数
六、Python 入门之经典函数实例
第1关:lambda 函数 - 匿名函数的使用-比较两数大小
第2关:递归函数 - 汉诺塔的魅力
七、分支和循环结构
第1关:英寸与厘米互换
第2关:百分制转换为等级制成绩
第3关:三角形图案打印
第4关:输出九九乘法表
第5关:水仙花数判断
八、函数和代码复用2
第1关:温度转化函数
第2关:在函数中修改全局变量
第3关:一元二次方程求解函数v1
第4关:一元二次方程求解函数v2
第5关:使用递归
九、列表
第1关:列表元素的增删改:客人名单的变化
第2关:列表元素的排序:给客人排序
第3关:数值列表:用数字说话
第4关:列表切片:你的菜单和我的菜单
第5关:列表与循环 - 验证是否为三位数
十、元组与字典
第1关:元组的使用:这份菜单能修改吗?
第2关:字典的使用:这份菜单可以修改
第3关:字典的遍历:菜名和价格的展示
第4关:嵌套 - 菜单的信息量好大
第5关:统计投票结果
十一、Python 计算思维训练——文件操作与异常处理
第1关:从文件中读取数据:信息时代已经到来
第2关:将信息写入文件:会读会写方为正道
一、Python初识-基本语法
Python 是一种面向对象的解释型计算机程序设计语言,以其简洁性、易读性、可扩展性、丰富和强大的功能库,语言表达能力极强,很多非常复杂的功能,只需简单几行代码即可实现,成为最受欢迎的程序设计语言之一。
本实训的主要目标是,让学习者通过 Python 交互式编程以及脚本编程,实现一个简单的打印字符串功能,感受和体验 Python 编程,并对 Python 建立一个初步的认识。
第1关:Hello Python!
任务描述
利用 Python 提供的print()内置函数,打印输出Hello Python!,初步体验和感受 Python 编程的魅力。
输入
无
输出
Hello Python!
开始你的任务吧,祝你成功!
#coding=utf-8 #请在此处添加代码完成输出“Hello Python”,注意要区分大小写! ###### Begin ###### print("Hello Python!") ###### End ######
第2关:我想看世界
任务描述
本关任务:字符串拼接。接收用户输入的两个字符串,将它们组合后输出。
相关知识
为了完成本关任务,你需要掌握: 1.如何使用input()函数,获得用户输入的字符串; 2.输出函数print()如何按照期望的格式输出字符信息。
输入与输出
输入1: 请输入一个人的名字:张三 请输入一个国家的名字:美国
输出1: 世界那么大,张三想去美国看看。
输入2: 请输入一个人的名字:三毛 请输入一个国家的名字:巴西
输出2: 世界那么大,三毛想去巴西看看。
开始你的任务吧,祝你成功!
#coding=utf-8 #请在此处补充代码,按要求完成输出 ###### Begin ###### name=input('请输入一个人的名字:') country=input('请输入一个国家的名字:') print('世界那么大,'+name+'想去'+country+'看看。') ###### End ######
第3关:学好Python
任务描述
本关任务:简单的人名对话。
相关知识
为了完成本关任务,你需要掌握: 1.如何格式化输入输出; 2.如何截取字符串。
输入输出
测试输入:风清扬
预期输出:
风清扬同学,学好Python,前途无量!
风大侠,学好Python,大展拳脚!
清扬哥哥,学好Python,人见人爱!
开始你的任务吧,祝你成功!
#coding=utf-8 #请在此处补充代码,按要求完成输出 ###### Begin ###### name=input("输入姓名:") print("{}同学,学好Python,前途无量!".format(name)) #请将命令行补充完整 print("{}大侠,学好Python,大展拳脚!".format(name[0])) #请将命令行补充完整 print("{}哥哥,学好Python,人见人爱!".format(name[1:])) #请将命令行补充完整 ###### End ######
第4关:根据圆的半径计算周长和面积
任务描述
本关任务:编写一个能计算圆的周长和面积的程序。 结果保留小数点后两位。
输入输出
测试输入:3 预期输出: 周长: 18.85 面积: 28.27
测试输入:6.2 预期输出: 周长: 38.96 面积: 120.76
相关知识
可以用eval(input())将所获得的input()输入值由字符串转为数值。
开始你的任务吧,祝你成功!
""" 输入半径计算圆的周长和面积 """ import math pi = math.pi #pi = 3.14159 #*******请输入您的代码********# #***********begin************# r = eval(input()) c = 2*pi*r s = pi*r**2 print('周长:'+' {:.2f}'.format(c)) print('面积:'+' {:.2f}'.format(s)) #***********end************#
第5关:货币转换
任务描述
本关任务:编写一个人民币和美元两种货币间币值转换程序。其中,人民币和美元间汇率固定为:1美元 = 6.4人民币。
程序可以接受人民币或美元输入,转换为美元或人民币输出。人民币采用RMB表示,美元采用USD表示,符号和数值之间没有空格。 注意: (1) 结果小数点后保留两位。
(2) 获得输入请使用input("") 。
输入输出
测试输入1:USD12; 预期输出1:RMB76.8
测试输入2:RMB76.8; 预期输出2:USD12
开始你的任务吧,祝你成功!
""" 人民币和美元两种货币间币值转换 """ #********请输入您的代码********# #************begin************# a=input("") if a[0] in ["R"]: c=eval(a[3:])/6.4 print("USD{:.2f}".format(c)) elif a[0] in ["U"]: b=eval(a[3:])*6.4 print("RMB{:.2f}".format(b)) else: print("输入格式错误") #************end************#
二、turtle简单绘图
第1关:英寸与厘米转换
任务描述
本关任务: 屏幕尺寸是指液晶显示器屏幕对角线的长度,单位为英寸。编写一个英寸和厘米两种长度单位间的转换程序。其中,转换关系为:1厘米= 0.393700787402英寸, 1英寸= 2.54厘米。
程序可以接受英寸或厘米输入,转换为厘米或英寸输出。英寸采用IN表示,厘米采用CM表示,符号和数值之间没有空格。 注意: (1) 结果小数点后保留两位。
(2) 获得输入请使用input("") 。
输入输出
测试输入1:IN12; 预期输出1:CM30.48
测试输入2:CM76; 预期输出2:IN29.92
测试输入3:C76; 预期输出3:输入不符合要求!
开始你的任务吧,祝你成功!
""" cm与inch转换 """ #********请输入您的代码********# #************begin************ a=input("") if a[0:2] in ["IN"]: C=eval(a[2:])*2.54 print("CM{:.2f}".format(C)) elif a[0:2] in ["CM"]: I=eval(a[2:])*0.393700787402 print("IN{:.2f}".format(I)) else: print("输入不符合要求!") #************end************#
第2关:绘制等边三角形
任务描述
仿照教材例5-3画五角星程序,编写程序导入turtle库,并画出如图所示的等边三角形。要求边长为200,三边颜色为红色。
相关知识
在使用模块中的函数之前,需要先将模块用import命令导入,有两种形式:
- import turtle
创建turtle对象
- Bob = turtle.Turtle()
表示在系统中创建了一个Turtle类型的对象,将其命名为Bob.
turtle的部分运动和画笔控制函数
下表给出了turtle的部分运动函数
函数 | 别名(缩写) | 功能 |
---|---|---|
forward(d) | fd(d) | 向前移动距离d代表距离 |
backward(d) | bk(d)或back(d) | 向后移动距离d代表距离 |
right(degree) | rt(degree) | 向右转动多少度 |
left(degree) | It(degree) | 向左转动多少度 |
goto(x,y) | 将画笔移动到坐标为(x,y)的位置 | |
stamp() | 绘制当前图形 | |
speed(speed) | 画笔绘制的速度范围[0,10]整数 | |
setheading(degree) | seth(degree) | 海龟朝向,degree代表角度 |
circle(radius,extent) | 绘制一个圆形,其中,radius为半径,extent为度数,例如,若extent为180,则画一个半圆;如果画一个圆形,可不必写第2个参数 |
下表给出了turtle的部分画笔控制函数
函数 | 别名(缩写) | 功能 |
---|---|---|
pendown() | down()或pd() | 画笔落下,移动时绘制图形 |
penup() | up()或pu() | 画笔拾起,移动时不绘制图形 |
reset() | 恢复所有设置 | |
pensize(width) | width() | 画笔的宽度 |
pencolor(colorstring) | 画笔的颜色 | |
fillcolor(colorstring) | 绘制图形的填充颜色 |
编程要求
本关的编程任务是补全文件的代码内容,实现如下功能:
- step1:用import命令导入turtle模块;
- step2:创建turtle对象;
- step3:用pencolor函数设置画笔的颜色;
- step4:使用turtle的运动函数绘制图形。 本关涉及的代码文件 的代码框架如下:
- # coding = utf-8
- # 请在下面添加代码绘制任务中的等边三角形
- ###### Begin ######
- ####### End #######
开始你的任务吧,祝你成功!
#********* Begin *********# import turtle turtle.pencolor("red") turtle.pendown() turtle.seth(0) turtle.fd(200) turtle.seth(120) turtle.fd(200) turtle.seth(240) turtle.fd(200) turtle.seth(0) #********* End *********# #保存屏幕图片 ts = turtle.getscreen() ts.getcanvas().postscript(file="Python/src1/py1-2/yourimg/sj.ps")
第3关:绘制两个叠加的等边三角形
任务描述
仿照教材例5-3画五角星程序,编写程序导入turtle库,并画出如图所示的等边三角形。外面三角形边长为200,三边颜色为红色;里面的三角形边长为100,三边颜色为蓝色,填充颜色为黄色。
相关知识
模块导入
在使用模块中的函数之前,需要先将模块用import命令导入,有两种形式:
- import turtle
- from turtle import *
其中,*是通配符,表示所有函数
创建turtle对象
- Bob = turtle.Turtle()
表示在系统中创建了一个Turtle类型的对象,将其命名为Bob.
turtle的部分运动和画笔控制函数
- 下表给出了turtle的部分运动函数
函数 别名(缩写) 功能 forward(d) fd(d) 向前移动距离d代表距离 backward(d) bk(d)或back(d) 向后移动距离d代表距离 right(degree) rt(degree) 向右转动多少度 left(degree) It(degree) 向左转动多少度 goto(x,y) 将画笔移动到坐标为(x,y)的位置 stamp() 绘制当前图形 speed(speed) 画笔绘制的速度范围[0,10]整数 setheading(degree) seth(degree) 海龟朝向,degree代表角度 circle(radius,extent) 绘制一个圆形,其中,radius为半径,extent为 度数,例如,若extent为180,则画一个半圆;如果画一个圆形,可不必写第2个参数 |
- 下表给出了turtle的部分画笔控制函数
函数 别名(缩写) 功能 pendown() down()或pd() 画笔落下,移动时绘制图形 penup() up()或pu() 画笔拾起,移动时不绘制图形 reset() 恢复所有设置 pensize(width) width() 画笔的宽度 pencolor(colorstring) 画笔的颜色 fillcolor(colorstring) 绘制图形的填充颜色 - 绘制填充图像前后需要添加的函数:
- turtle.begin_fill()#准备开始填充图形;
- turtle.end_fill()#填充完成;
编程要求
本关的编程任务是补全文件的代码内容,绘制出任务描述中两个叠加等边三角形。 本关涉及的代码文件 的代码框架如下:
- # coding = utf-8
- # 请在下面添加代码绘制任务中的两个叠加等边三角形
- ###### Begin ######
- ####### End #######
开始你的任务吧,祝你成功!
#********* Begin *********# import turtle turtle.pencolor("red") turtle.pendown() turtle.seth(0) turtle.fd(200) turtle.seth(120) turtle.fd(200) turtle.seth(240) turtle.fd(200) turtle.seth(0) turtle.penup() turtle.fd(100) turtle.pendown() turtle.color("blue","yellow") turtle.begin_fill() turtle.seth(60) turtle.fd(100) turtle.seth(180) turtle.fd(100) turtle.seth(-60) turtle.fd(100) turtle.end_fill() #********* End *********# #保存屏幕图片 ts = turtle.getscreen() ts.getcanvas().postscript(file="Python/src1/py1-3/yourimg/sj.ps")
第4关:绘制三个叠加的等边三角形
任务描述
仿照教材例5-3画五角星程序,编写程序导入turtle库,并画出如图所示的等边三角形。最外面三角形边长为200,三边颜色为红色,次外面的三角形边长为100,三边颜色为蓝色,填充颜色为黄色;最里面的三角形三边长度为50,颜色为红色,填充颜色为白色。
相关知识
- 模块导入
在使用模块中的函数之前,需要先将模块用import命令导入,有两种形式:
- import turtle
- from turtle import *
其中,*是通配符,表示所有函数
- 创建turtle对象
- Bob = turtle.Turtle()
表示在系统中创建了一个Turtle类型的对象,将其命名为Bob.
- turtle的部分运动和画笔控制函数
- 下表给出了turtle的部分运动函数
函数 别名(缩写) 功能 forward(d) fd(d) 向前移动距离d代表距离 backward(d) bk(d)或back(d) 向后移动距离d代表距离 right(degree) rt(degree) 向右转动多少度 left(degree) It(degree) 向左转动多少度 goto(x,y) 将画笔移动到坐标为(x,y)的位置 stamp() 绘制当前图形 speed(speed) 画笔绘制的速度范围[0,10]整数 setheading(degree) seth(degree) 海龟朝向,degree代表角度 circle(radius,extent) 绘制一个圆形,其中,radius为半径,extent为 度数,例如,若extent为180,则画一个半圆;如果画一个圆形,可不必写第2个参数 |
- 下表给出了turtle的部分画笔控制函数
函数 别名(缩写) 功能 pendown() down()或pd() 画笔落下,移动时绘制图形 penup() up()或pu() 画笔拾起,移动时不绘制图形 reset() 恢复所有设置 pensize(width) width() 画笔的宽度 pencolor(colorstring) 画笔的颜色 fillcolor(colorstring) 绘制图形的填充颜色 - 绘制填充图像前后需要添加的函数:
- turtle.begin_fill()#准备开始填充图形;
- turtle.end_fill()#填充完成;
编程要求
本关的编程任务是补全文件的代码内容,绘制出任务描述中两个叠加等边三角形。 本关涉及的代码文件 的代码框架如下:
- # coding = utf-8
- # 请在下面添加代码绘制任务中的两个叠加等边三角形
- ###### Begin ######
- ####### End #######
开始你的任务吧,祝你成功!
#********* Begin *********# import turtle turtle.pencolor("red") turtle.fd(200) turtle.seth(120) turtle.fd(200) turtle.seth(240) turtle.fd(200) turtle.seth(0) turtle.fd(100) turtle.begin_fill() turtle.color("blue","yellow") turtle.seth(60) turtle.fd(100) turtle.seth(180) turtle.fd(100) turtle.seth(-60) turtle.fd(100) turtle.seth(60) turtle.end_fill() turtle.fd(50) turtle.seth(120) turtle.begin_fill() turtle.color("red","white") turtle.fd(50) turtle.seth(-120) turtle.fd(50) turtle.seth(0) turtle.fd(50) turtle.end_fill() #********* End *********# #保存屏幕图片 ts = turtle.getscreen() ts.getcanvas().postscript(file="Python/src1/py1-4/yourimg/sj.ps")
第5关:绘制圆圈
任务描述
本关任务:
利用海龟turtle来画几个叠加圈。
绘制要求:
- 每个圆半径为40像素
- 上面三圆颜色自左向右依次为蓝、黑、红,下面两圆颜色自左向右依次为黄、绿,绘制顺序依次为蓝、黑、红、绿、黄
- 每一个圆绘制时均从该圆上的最低点开始绘制,每次绘制一个完整的圆,直到结束
- 画笔绘制起点为画布原点,画笔宽度为3
输入
无
输出
5 O
开始你的任务吧,祝你成功!
#********* Begin *********# import turtle turtle.speed(0) turtle.pensize(3) turtle.up() turtle.goto(0, 0) turtle.down() turtle.color('blue') turtle.circle(40) turtle.up() turtle.goto(80, 0) turtle.down() turtle.color('black') turtle.circle(40) turtle.up() turtle.goto(160, 0) turtle.down() turtle.color('red') turtle.circle(40) turtle.up() turtle.goto(120, -40) turtle.down() turtle.color('green') turtle.circle(40) turtle.up() turtle.goto(40, -40) turtle.down() turtle.color('yellow') turtle.circle(40) #********* End *********# #保存屏幕图片 ts = turtle.getscreen() ts.getcanvas().postscript(file="Python/src1/py1-5/yourimg/sj.ps")
三、数字与字符串类型及其操作
第1关:银行存款本金和计算
任务描述
编写一个能计算银行存款复利的小程序。假设目前银行年利率是1.5%,输入你的存款数,计算5年后的本金和。 本金和=本金∗(1+年利率)^n n是年数。
输入
存款金额。
输出
5年存款的本金和。
测试输入:50000
预期输出:53864.20
开始你的任务吧,祝你成功!
# coding = utf-8 # 请在下面添加代码 ###### Begin ###### a=eval(input()) for i in range(5): s=a*(1+0.015)**5 print("{:.2f}".format(s)) ####### End #######
第2关:将整数换算为月份数和天数
任务描述
在指定的编写程序,输入一个整数,把这个整数换算为月份数和天数,每月以30天计算。
相关知识
- 要用到的函数
-
input函数 input函数为一个输入函数,是Python的内置函数中最常用的函数之一,其基本功能是获取键盘输入的数据源。input函数的基本语法举例如下:
- a=int(input())
- print(a)
将input函数获取的数据用int函数转换为整数。
- print函数 print函数是Python的内置函数中最常用的函数之一,其基本功能是打印输出一个对象。print函数的基本语法举例如下: (1)例1
- print('Hello World')
(2)例2
- y=5
- x=6
- print( "y = %d ,x = %d" % (y,x) )
具体执行结果会在终端打印输出下述字符串: 其中, print中的“y = ”和“x = ”为两个字符串,直接输出; %d 是用来设置x和y的输出格式为整数; %(x,y)中的x和y是要输出的变量,输出的为x和y的值。
- format函数 format的功能是使任意数据转换成字符串。format函数的基本语法举例如下:
- a=8
- b=7.333
- print("{:d} , {:.2f}".format(a,b))
- 数字类型的内置运算符与内置函数
- 数字类型的内置运算符与内置函数如下表所示:
运算与函数名 结果 x + y 计算 x 与 y的和 x - y 计算 x 与 y的差 x * y 计算 x 与 y的积 x / y 计算 x 与 y的商 x // y 计算 x 与 y的整数商,即不大于计算 x / y的整数 x % y 计算 x 除以 y的余数 - x x 的负值 + x x 本身 abs(x) 返回x的绝对值 int(x) 将x 转换成整数 float(x) 将x 转换成浮点数 complex(re, im) 生成一个复数,实部为re, 虚部为 im. im 默认为0 divmod(x, y) 返回一个二元组(x // y, x % y),即整数对 pow(x, y) 返回 xy x ** y 计算 xy round(x,n) 返回x四舍五入,保留n位小数的值 max(x1,x2,..,xn) 返回x1,x2,..,xn中最大值 min(x1,x2,..,xn) 返回x1,x2,..,xn中最小值 编程要求
本关的编程任务是补全文件的代码内容,输入一个整数,把这个整数换算为月份数和天数,每月以30天计算。 注意:在输出时用format函数将数字转换成字符串输出。
本关涉及的代码文件 的代码框架如下:
- # coding = utf-8
- data=int(input())
- # 请在下面添加代码
- ###### Begin ######
- ####### End #######
以下是平台对&的样例测试集: 测试输入: 100 预期输出: Months=3 Days=10
测试说明
本关的测试文件是 src/p5-1-4.py,测试过程如下: 1.读者将src/p5-1-4.py中的代码补充完毕,然后点击测评,平台自动编译并运行,并以标准输入方式提供测评输入; 2.平台获取程序的输出,然后将其与预期输出对比,如果一致则测试通过;否则测试失败。
开始你的任务吧,祝你成功!
# coding = utf-8 data=int(input()) # 请在下面添加代码 ###### Begin ###### c=data//30 x=data%30 print("Months={:.0f} Days={:.0f}".format(c,x)) ####### End #######
第3关:将整数换算为天、时、分、秒
任务描述
编写程序,输入一个任意位数大于0的整数,作为秒数,将此整数换算为天、时、分、秒,并按“天:时:分:秒”的形式显示结果。
相关知识
- 要用到的函数
-
input函数 input函数为一个输入函数,是Python的内置函数中最常用的函数之一,其基本功能是获取键盘输入的数据源。input函数的基本语法举例如下:
- a=int(input())
- print(a)
将input函数获取的数据用int函数转换为整数。
-
print函数 print函数是Python的内置函数中最常用的函数之一,其基本功能是打印输出一个对象。print函数的基本语法举例如下: (1)例1
- print('Hello World')
(2)例2
- y=5
- x=6
- print( "y = %d ,x = %d" % (y,x) )
其中, print中的“y = ”和“x = ”为两个字符串,直接输出; %d 是用来设置x和y的输出格式为整数; %(x,y)中的x和y是要输出的变量,输出的为x和y的值。
-
format函数 format的功能是使任意数据转换成字符串。format函数的基本语法举例如下:
- a=8
- b=7.333
- print("{:d} , {:.2f}".format(a,b))
其中, {:d} 表示将a输出为整数,d表示整数; {:.2f} 表示将b输出浮点数,保留两位小数,f表示浮点数; format(a,b) 是将a与b的值转换成字符串。
- 数字类型的内置运算符与内置函数
- 数字类型的内置运算符与内置函数如下表所示:
运算与函数名 结果 x + y 计算 x 与 y的和 x - y 计算 x 与 y的差 x * y 计算 x 与 y的积 x / y 计算 x 与 y的商 x // y 计算 x 与 y的整数商,即不大于计算 x / y的整数 x % y 计算 x 除以 y的余数 - x x 的负值 + x x 本身 abs(x) 返回x的绝对值 int(x) 将x 转换成整数 float(x) 将x 转换成浮点数 complex(re, im) 生成一个复数,实部为re, 虚部为 im. im 默认为0 divmod(x, y) 返回一个二元组(x // y, x % y),即整数对 pow(x, y) 返回 xy x ** y 计算 xy round(x,n) 返回x四舍五入,保留n位小数的值 max(x1,x2,..,xn) 返回x1,x2,..,xn中最大值 min(x1,x2,..,xn) 返回x1,x2,..,xn中最小值 编程要求
本关的编程任务是补全文件的代码内容,输入一个任意位数大于0的整数,作为秒数,将此整数换算为天、时、分、秒,并按“天:时:分:秒”的形式显示结果。 注意:在输出时用format函数将数字转换成字符串后输出。
本关涉及的代码文件 的代码框架如下:
- # coding = utf-8
- # 请在下面添加代码
- ###### Begin ######
- ####### End #######
以下是平台对&的样例测试集: 测试输入: 100 预期输出: 100秒是0天0时1分40秒
测试说明
本关的测试文件是src/p5-1-3.py,测试过程如下: 1.读者将src/p5-1-3.py中的代码补充完毕,然后点击测评,平台自动编译并运行,并以标准输入方式提供测评输入; 2.平台获取程序的输出,然后将其与预期输出对比,如果一致则测试通过;否则测试失败。
开始你的任务吧,祝你成功!
# coding = utf-8 # 请在下面添加代码 ###### Begin ###### n=int(input()) a=n//86400 b=(n%86400)//14400 c=((n%86400)%14400)//60 d=n%86400%14400%60 print("{:.0f}秒是{:.0f}天{:.0f}时{:.0f}分{:.0f}秒".format(n,a,b,c,d)) ####### End #######
第4关:回文数判断
任务描述
从键盘输入一个5位数,编程判断这个数字是不是回文数。 可以用str.isdigit()来判断字符串str是否是数字类型的字符串,是的话返回True,否则返回False。
输入
一个5位数。
输出
是回文数,输出“True”,否则输出“False”。 如果不是5位数字,则输出“输入有误!”
测试输入:12821 预期输出:True
测试输入:15821 预期输出:False
开始你的任务吧,祝你成功!
# coding = utf-8 # 请在下面添加代码 ###### Begin ###### list1=input() list2=list1[::-1] if len(list1)==5 and len(list2)==5: if list1==list2: print("True") else: print("False") else: print("输入有误!") ####### End #######
第5关:字符串的拼接:名字的组成
任务描述
本关任务是将两个不同的字符串,拼接形成一个字符串,并将新字符串输出来。字符串或串(String)是由数字、字母、下划线组成的一串字符。在 Python 中,字符串用单引号或者双引号括起来。在很多情况下,我们需要将两个字符串拼接起来,形成一个字符串。
例如,一个人的姓名,通常是由“姓氏”+“名字”组成的。在很多程序中,为了方便后续处理,通常将姓氏和名字分别存在两个变量中。然后在显示时,要将姓氏和名字拼接起来,按全名显示。
- first_name = 'Zhang'
- last_name = 'san'
输出如下:
- full_name = 'Zhang san'
相关知识
Python 中使用+来合并两个字符串,这种合并字符串的方法叫做拼接。其基本语法如下:
- result_string = source_string1 + source_string2
其中:
-
source_string1:待合并的第一个字符串;
-
source_string2:待合并的第二个字符串;
-
result_string:合并后的字符串。
注意:如果需要,在两个字符串之间可以增加相应的空格,具体见下面的例子。例如,将姓氏和名字拼接成全名:
- # coding=utf-8
- # 将姓氏和名字分别保存在两个变量中
- first_name = 'Zhang'
- last_name = 'san'
- # 将姓氏和名字拼接,将结果存储在full_name变量中
- full_name = first_name + " " + last_name
- print(full_name)
输出结果:
- Zhang san
如果您想了解更多有关字符串的知识,请参考:【美】 Eric Matthes 著《Python 编程——从入门到实践》第二章。
编程要求
本关的编程任务是补全src/Step1/full_name.py文件中 Begin-End 区间的代码,实现如下功能:
-
将存放姓氏的字符串变量和存放名字的字符串变量拼接起来,中间用一个空格隔开,并将结果存储在full_name变量中;
-
打印输出full_name变量。
测试说明
本关的测试文件是src/step1/full_name.py,测试过程如下:
-
学习者将src/Step1/full_name.py中的代码补充完毕,然后点击评测。平台自动编译并运行full_name.py,并以标准输入方式提供测评输入;
-
平台获取程序的输出,然后将其与预期输出对比。如果一致,则测试通过,否则测试失败。
以下是平台对src/step1/full_name.py的样例测试集:
测试输入:
- Hu
- dong
预期输出:
- Hu dong
开始你的任务吧,祝你成功!
# coding=utf-8 # 存放姓氏和名字的变量 first_name = input() last_name = input() # 请在下面添加字符串拼接的代码,完成相应功能 ########## Begin ########## print(first_name+" "+last_name) ########## End ##########
第6关:字符替换
任务描述
有段英文,其中有单独字母“P”被误写为“p”,请编写程序进行纠正。
输入
用户输入一个字符串。
输出
输出字符串,其中原本包含的英文字母“p”全部被替换为“P”。
以下是平台样例测试集:
测试输入:python 预期输出:Python
开始你的任务吧,祝你成功!
# coding=utf-8 # 获取待处理的源字符串 source_string = input() # 请在下面添加字符串转换的代码 ########## Begin ########## a=source_string.replace("p","P") print(a) ########## End ##########
第7关:字符串查找与替换
任务描述
本关的任务是,给定一个字符串,要利用 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 中常用的字符串方法,包括字符串查找、字符串切分、字符串替换等。
字符串查找
Python 提供了内置的字符串查找方法find(),利用该方法可以在一个较长的字符串中查找子字符串。如果该字符串中,有一个或者多个子字符串,则该方法返回第一个子串所在位置的最左端索引,若没有找到符合条件的子串,则返回-1。find()方法的基本使用语法如下:
- source_string.find(sub_string)
其中:
-
source_string:源字符串;
-
sub_string:待查的目标子字符串;
-
find:字符串查找方法的语法关键字。
例如,在一个字符串中,查找两个单词的位置:
- # coding=utf-8
- # 创建一个字符串
- source_string = 'The past is gone and static'
- # 查看"past"在source_string字符串中的位置
- print(source_string.find('past'))
- # 查看"love"在source_string字符串中的位置
- print(source_string.find('love'))
输出结果:
- 4
- -1
字符串替换
Python 提供了replace()方法,用以替换给定字符串中的子串。其基本使用语法如下:
- source_string.replace(old_string, new_string)
其中:
-
source_string:待处理的源字符串;
-
old_string:被替换的旧字符串;
-
new_string:替换的新字符串;
-
replace:字符串替换方法的语法关键词。
例如,在如下字符串中,用small子串替换big子串:
- # coding = utf-8
- # 创建一个字符串circle
- source_string = 'The world is big'
- # 利用replace()方法用子串"small"代替子串"big"
- print(source_string.replace('big','small'))
输出结果:
- The world is small
字符串分割
Python 提供了split()方法实现字符串分割。该方法根据提供的分隔符,将一个字符串分割为字符列表,如果不提供分隔符,则程序会默认把空格(制表、换行等)作为分隔符。其基本使用语法如下:
- source_string.split(separator)
其中:
-
source_string:待处理的源字符串;
-
separator:分隔符;
-
split:字符串分割方法的关键词。
例如,用+、/还有空格作为分隔符,分割字符串:
- # coding = utf-8
- # 待处理字符串source_string
- source_string = '1+2+3+4+5'
- # 利用split()方法,按照`+`和`/`对source_string字符串进行分割
- print(source_string.split('+'))
- print(source_string.split('/'))
输出结果:
- ['1', '2', '3', '4', '5']
- ['1+2+3+4+5']
编程要求
本关的编程任务是,补全src/Step3/method2.py文件中 Begin-End 区间的代码,实现如下功能:
-
step1 :查找输入字符串source_string中,是否存在day这个子字符串,并打印输出查找结果;
-
step2 :对输入字符串source_string执行字符替换操作,将其中所有的 day替换为time,并打印输出替换后的字符串;
-
step3 :对 step2 进行替换操作后的新字符串,按照空格进行分割,并打印输出分割后的字符列表。
测试说明
本关的测试文件是src/Step3/method2.py,测试过程如下:
-
学习者将src/Step3/method2.py中的代码补充完毕,然后点击评测。平台自动编译并运行method2.py,并以标准输入方式提供测评输入;
-
平台获取程序的输出,然后将其与预期输出对比。如果一致,则测试通过,否则测试失败。
以下是平台对src/Step3/method2.py的样例测试集:
测试输入:
- All day is no day when it is past.
预期输出:
- 4
- All time is no time when it is past.
- ['All', 'time', 'is', 'no', 'time', 'when', 'it', 'is', 'past.']
开始你的任务吧,祝你成功!
# coding = utf-8 source_string = input() # 请在下面添加代码 ########## Begin ########## print(source_string.find("day")) a=source_string.replace("day","time") print(a) b=a.split(" ") print(b) ########## End ##########
四、Python 入门之函数结构
第1关:函数的参数 - 求输入的整数之和
任务描述
当我们需要在程序中多次执行同一类型的任务时,不需要反复编写代码段来完成任务,而是可以利用函数工具来大大方便我们的编程工作。函数是可重复使用的、用来实现相关联功能的代码段。
本实训的目标是让学习者了解并掌握函数结构的相关知识,本关的小目标则是让学习者先了解并掌握函数参数的有关知识。
相关知识
我们在使用函数前,得先定义一个满足自己使用要求的函数。定义函数的基本结构是:
- def functionname( parameters ):
- "函数_文档字符串"
- function_suite
- return [expression]
- 定义函数以def关键词开头,后面跟着函数名、圆括号()、括号中的参数、冒号;
- 接着,在缩进块中编写函数体,函数的第一行语句一般是写文档字符串,用于存放函数说明,也可以选择不写;
- Return[expression]表示结束函数,并返回值。而不带表达式的return相当于返回空值。
本关的重点就是研究函数的参数parameters。定义函数的时候,参数的名字和位置定下来了,函数的接口定义也就完成了。我们在调用函数时,只用知道该传递什么样的参数,函数内部的运行情况已经被封装,使用者不必了解。
Python 的函数参数主要包含以下几种:
- 必选参数;
- 默认参数;
- 可变参数;
- 关键字参数。
必选参数
必选参数也叫位置参数,是函数中最常用的参数。必选参数就是在调用函数的时候必须指定参数值。例如:
- # 定义加法函数plus,参数a,b就是必选参数
- def plus(a,b):
- c=a+b
- return(c)
- # 调用函数plus时,必须给参数a,b传递值
- d=plus(1,2)
- # 输出结果d
- print(d)
输出结果:
- 3
如果调用plus函数时,传入的参数不符合要求,则会出现错误。例如:
- >>d = plus()
- TypeError: plus() missing 2 required positional arguments: 'a' and 'b'
- >>d = plus(1)
- TypeError: plus() missing 1 required positional argument: 'b'
默认参数
默认参数是指给函数参数提供默认值,如果在调用函数的时候没有给该参数传递值,则该参数使用默认值。例如:
- # 定义加法函数plus,参数a是必选参数,参数b是默认值2的参数
- def plus(a,b=2):
- c=a+b
- return(c)
- # 调用函数plus时,必须给参数a传递值,若不给b传递值,则b默认为2
- d=plus(1)
- # 输出结果d
- print(d)
从上面的例子可以看出,在函数调用过程中可以不用给默认参数传递参数值。但在使用默认参数时,有两点需要注意:
- 默认参数要放在所有必选参数的后面;
- 默认参数必须指向不变对象。
可变参数
在有些情况下,我们在定义函数的时候,还不能确定函数应该包含多少个参数,这时我们可以使用可变参数,可变参数就是传入的参数数量是可变的。例如:
- # 定义plus函数,完成的功能是返回输入的整数之和。
- # 参数numbers是可变参数,表示输入的参数个数可以为任意值
- def plus(*numbers):
- add = 0
- for i in numbers:
- add += i
- return(add)
- # 调用3次plus函数,每次的参数个数都不相同
- d1 = plus(1,2,3)
- d2 = plus(1,2,3,4)
- d3 = plus(1,3,5,7,9)
- # 向函数中可以传递任意参数,包括0个参数
- d4 = plus()
- # 输出结果
- print(d1)
- print(d2)
- print(d3)
- print(d4)
输出结果:
- 6
- 10
- 25
- 0
在上面的例子中,numbers就是一个可变参数,可变参数前面加一个标识符*。在函数内部,可变参数numbers接收到的值是一个tuple。我们在调用参数是可变参数的函数时,可以给该函数传递任意个数的参数,包括0个参数。
关键字参数
可变参数允许我们在调用函数时传入任意个参数,这些可变参数在函数调用时自动组装为一个tuple。而关键字参数允许我们传入任意个含参数名的参数,这些关键字参数在函数调用时自动组装为一个dict。也就是说,关键字参数将长度任意的键-值对,作为参数传递给函数。例如:
- # 定义一个包含关键字参数的函数,返回值为参数值
- def plus(**kw):
- return kw
- # 调用plus函数,参数值为空
- d1 = plus()
- # 调用plus函数,参数值为x=1
- d2 = plus(x=1)
- # 调用plus函数,参数值为x=1,y=2
- d3 = plus(x=1, y=2)
- # 输出d1,d2,d3
- print(d1)
- print(d2)
- print(d3)
输出结果:
- {}
- {'x': 1}
- {'x': 1, 'y': 2}
在上面的例子中,kw就是一个关键字参数,关键字参数前面加**表示。关键字参数可以扩展函数功能,使传递参数过程更为简便。例如:
- # 定义一个plus函数,有3个参数,返回值是3个参数之和
- def plus(x,y,z):
- return x+y+z
- # 有一个dict列表,当中3个键的值分别为1,2,3
- dict = {'x':1, 'y':2, 'z':3}
- # 将dict列表中的3个值传入plus函数中,得到返回值d
- d = plus(dict['x'],dict['y'],dict['z'])
- # 输出d
- print(d)
输出结果:
- 6
但在上述例子中,将字典中的值向plus函数中传递参数的方法过于累赘,可以采取关键字参数的方法。例如:
- # 定义一个plus函数,有3个参数,返回值是3个参数之和
- def plus(x,y,z):
- return x+y+z
- # 有一个dict列表,当中3个键的值分别为1,2,3
- dict = {'x':1, 'y':2, 'z':3}
- # 用关键字参数的方法将dict列表中的3个值传入plus函数中,得到返回值d
- d = plus(**dict)
- # 输出d
- print(d)
输出结果:
- 6
使用关键字参数**dict的方法,可以大大提高参数传递的效率。
参数组合
我们在函数定义过程中,可以同时用到必选参数、默认参数、可变参数、关键字参数中的一种或几种。但是需要特别注意的是,这四种参数在使用的过程中是有顺序的,顺序依次应该是必选参数、默认参数、可变参数和关键字参数。例如:
- # 定义一个包含必选参数、默认参数、可变参数和关键字参数的函数plus
- def plus(x, y, z=0, *args, **kw):
- print('x=',x)
- print('y=',y)
- print('z=',z)
- print('args=',args)
- print('kw=',kw)
- # 调用函数plus,输入两个参数1,2
- plus(1,2)
输出结果:
- x= 1
- y= 2
- z= 0
- args= ()
- kw= {}
上面这个例子中,向plus函数中传入了两个必选参数1和2。必选参数必须得提供值,但是默认参数、可变参数和关键字参数可以不用提供值,我们还可以给默认参数、可变参数和关键字参数传递值。例如:
- # 定义一个包含必选参数、默认参数、可变参数和关键字参数的函数plus
- def plus(x, y, z=0, *args, **kw):
- print('x=',x)
- print('y=',y)
- print('z=',z)
- print('args=',args)
- print('kw=',kw)
- # 调用函数plus,输入参数x=1,y=2,z=3,args=(4,5,6),kw={}
- plus(1,2,3,4,5,6)
- print('\n')
- # 调用函数plus,输入参数x=1,y=2,z=3,args=(4,5,6),kw={'k':7, 'm':8}
- plus(1,2,3,4,5,6,k=7,m=8)
输出结果:
- x= 1
- y= 2
- z= 3
- args= (4, 5, 6)
- kw= {}
- x= 1
- y= 2
- z= 3
- args= (4, 5, 6)
- kw= {'k': 7, 'm': 8}
小结
- 不同类型的参数是有顺序的,依次是必选参数、默认参数、可变参数和关键字参数;
- 默认参数一定要用不可变对象,用可变对象容易产生逻辑错误;
- *args表示的是可变参数,*args接收的是一个元组;
- **kw表示的是关键字参数,**kw接收的是一个字典。
编程要求
本关的编程任务是补全src/Step1/plus.py文件的代码,实现相应的功能。具体要求如下:
- 定义并调用一个函数,功能是对输入的列表中的数值元素进行累加,列表中元素的个数没有确定;
- 将累加结果存储到变量d中;
- 输出累加结果d。
本关涉及的src/Step1/plus.py代码文件的代码框架如下:
- # coding=uft-8
- # 创建一个空列表numbers
- numbers = []
- # str用来存储输入的数字字符串,lst1是将输入的字符串用空格分割,存储为列表
- str = input()
- lst1 = str.split(' ')
- # 将输入的数字字符串转换为整型并赋值给numbers列表
- for i in range(len(lst1)):
- numbers.append(int(lst1.pop()))
- # 请在此添加代码,实现编程要求
- ########## Begin ##########
- ########## End ##########
- print(d)
测试说明
本关的测试文件是src/Step1/plus.py,测试过程如下:
- 平台自动编译生成plus.exe;
- 平台运行plus.exe,并以标准输入方式提供测试输入;
- 平台获取plus.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/Step1/plus.py的样例测试集:
测试输入:
- 1 2 3 4 5
预期输出:
- 15
测试输入:
- 1 3 5 7 9 11
预期输出:
- 36
测试输入:
- 2 4 6 8 10 12 14 16
预期输出:
- 72
开始你的任务吧,祝你成功!
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
# coding=utf-8 # 创建一个空列表numbers numbers = [] # str用来存储输入的数字字符串,lst1是将输入的字符串用空格分割,存储为列表 str = input() lst1 = str.split(' ') # 将输入的数字字符串转换为整型并赋值给numbers列表 for i in range(len(lst1)): numbers.append(int(lst1.pop())) # 请在此添加代码,对输入的列表中的数值元素进行累加求和 ########## Begin ########## d=0 for i in numbers: d+=i ########## End ########## print(d)
第2关:函数的返回值 - 求两个正整数的最大公约数
任务描述
函数在进行运算处理后,返回的值被称为返回值。函数返回的值是通过return语句执行。返回值能够让我们直接得到函数处理的结果,而不必关心函数内部复杂繁重的运算过程,大大提高了编程效率。本关的主要目标是让学习者了解并掌握函数返回值的相关知识。
相关知识
return语句将值返回到调用函数的出口,函数中一定要有return返回值才是完整的函数。如果我们没有在函数中定义函数返回值,那么程序会自动让函数返回一个结果,该结果是None对象,而None对象表示没有任何值。
将值作为返回值
函数的返回值只有一个,但有时我们会发现有的函数好像有多个返回值,其实这里的“多个”并不是指多个返回值。比如函数返回一列表,里面包含很多个元素值。这就类似于,只能从超市带走一个箱子,但是允许我们把一些东西都装到箱子里面看做一个东西带走。例如:
- def f():
- return 1,'abc','1234'
- print(f())
输出结果:
- (1, 'abc', '1234')
调用f()函数,程序输出为一个元组,所以函数返回值表面上是3个值,其实是返回一个元组,元组里面有三个不同元素(元组语法上不需要一定带上圆括号)。
将函数作为返回值
我们除了可以将各种类型的值作为返回值外,也可以将函数作为返回值。例如,我们要定义一个函数来求列表中数值元素的和,一般情况下我们是这样定义的:
- def plus(*args):
- s = 0
- for n in args:
- s = s + n
- return s
但是,如果我们不需要立刻求和,而是在后面的程序中,根据需求再计算,这种情况怎么办呢?这时我们定义的函数可以不返回求和的结果,而是返回计算求和的函数。所以我们还可以用如下方法定义函数:
- def lazy_plus(*args):
- def plus():
- s = 0
- for n in args:
- s = s + n
- return s
- return plus
当我们调用lazy_plus()时,返回的并不是求和结果,而是计算求和的函数:
- # 定义求和函数,返回的并不是求和结果,而是计算求和的函数
- def lazy_plus(*args):
- def plus():
- s = 0
- for n in args:
- s = s + n
- return s
- return plus
- # 调用lazy_plus()时,返回的并不是求和结果,而是求和函数
- f = lazy_plus(1,2,3,4,5)
- print(f)
输出结果:
调用函数f时,才真正计算求和的结果:
- # 定义求和函数,返回的并不是求和结果,而是计算求和的函数
- def lazy_plus(*args):
- def plus():
- s = 0
- for n in args:
- s = s + n
- return s
- return plus
- # 调用函数f时,得到真正求和的结果
- f = lazy_plus(1,2,3,4,5)
- print(f())
输出结果:
- 15
在上述例子中,我们在函数lazy_plus中又定义了函数plus,而且内部函数plus是可以引用外部函数lazy_plus的参数和局部变量的。当函数lazy_plus返回函数plus时,相关参数和变量也将会保存在返回的函数中,这种方式也称为“闭包”(Closure)。
小结
我们除了可以将函数计算的值作为返回值外,也可以将函数作为返回值。
如果您想了解更多函数结构的相关知识,请参考:【美】 Eric Matthes 著《 Python 编程——从入门到实践》第八章。
编程要求
本关的编程任务是补全src/step2/return.py文件的代码,实现相应的功能。具体要求如下:
- 定义一个函数gcd,功能是求两个正整数的最大公约数;
- 调用函数gcd,得到输入的两个正整数的最大公约数,并输出这个最大公约数。
本关涉及的代码文件src/step2/return.py的代码框架如下:
- # coding=utf-8
- # 输入两个正整数a,b
- a = int(input())
- b = int(input())
- # 请在此添加代码,求两个正整数的最大公约数
- ########## Begin ##########
- ########## End ##########
- # 调用函数,并输出最大公约数
- print(gcd(a,b))
测试说明
本关的测试文件是src/step2/return.py,测试过程如下:
- 平台自动编译生成return.exe;
- 平台运行return.exe,并以标准输入方式提供测试输入;
- 平台获取return.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step2/return.py的样例测试集:
测试输入:
- 1
- 8
预期输出:
- 1
测试输入:
- 9
- 3
预期输出:
- 3
测试输入:
- 9
- 21
预期输出:
- 3
测试输入:
- 126
- 36
预期输出:
- 18
开始你的任务吧,祝你成功!
如果你觉得这一关的内容对你有帮助,请你在下面点赞。
# coding=utf-8 # 输入两个正整数a,b a = int(input()) b = int(input()) # 请在此添加代码,求两个正整数的最大公约数 ########## Begin ########## def gcd(a,b): if a 3:
- return _private_1(name)
- else:
- return _private_2(name)
- 编写程序,功能是求两个正整数的最小公倍数;
- 要求实现方法:先定义一个private函数 _gcd()求两个正整数的最大公约数,再定义public函数lcm()调用 _gcd()函数求两个正整数的最小公倍数;
- 调用函数lcm(),并将输入的两个正整数的最小公倍数输出。
本关涉及的代码文件src/step3/scope.py的代码框架如下:
- # coding=utf-8
- # 输入两个正整数a,b
- a = int(input())
- b = int(input())
- # 请在此添加代码,求两个正整数的最小公倍数
- ########## Begin ##########
- ########## End ##########
- # 调用函数,并输出a,b的最小公倍数
- print(lcm(a,b))
测试说明
本关的测试文件是src/step3/scope.py,测试过程如下:
- 平台自动编译生成scope.exe;
- 平台运行scope.exe,并以标准输入方式提供测试输入;
- 平台获取scope.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step3/scope.py的样例测试集:
测试输入:
- 5
- 6
预期输出:
- 30
测试输入:
- 8
- 10
预期输出:
- 40
测试输入:
- 16
- 24
预期输出:
- 48
测试输入:
- 132
- 214
预期输出:
- 14124
开始你的任务吧,祝你成功!
# coding=utf-8 # 输入两个正整数a,b a = int(input()) b = int(input()) # 请在此添加代码,求两个正整数的最小公倍数 ########## Begin ########## c=a*b def lcm(a,b): if a b
- c -> b
- a -> c
- b -> a
- b -> c
- a -> c
- 定义一个函数fact(n),实现的功能是对输入的正整数n进行n!运算;
- 调用函数fact(n),对输入的正整数n进行阶乘运算,并输出计算结果。
本关涉及的代码文件src/step1/recursive.py的代码框架如下:
- # coding=utf-8
- # 输入正整数n
- n = int(input())
- # 请在此添加代码,对输入的正整数n进行阶乘运算,并输出计算结果。
- ########## Begin ##########
- ########## End ##########
测试说明
本关的测试文件是src/step1/recursive.py,测试过程如下:
- 平台自动编译生成recursive.exe;
- 平台运行recursive.exe,并以标准输入方式提供测试输入;
- 平台获取recursive.exe输出,并将其输出与预期输出对比。如果一致则测试通过,否则测试失败。
以下是平台对src/step1/recursive.py的样例测试集:
测试输入:
- 5
预期输出: 120
测试输入:
- 6
预期输出:
- 720
测试输入:
- 7
预期输出:
- 5040
测试输入:
- 8
预期输出:
- 40320
开始你的任务吧,祝你成功!
# coding=utf-8 # 输入正整数n n = int(input()) # 请在此添加代码,对输入的正整数n进行阶乘运算,并输出计算结果。 ########## Begin ########## def fact(n): if n ==0: return 1 else: return n*fact(n-1) print(fact(n)) ########## End ##########
七、分支和循环结构
第1关:英寸与厘米互换
任务描述
本关任务:编写一个能实现单位英寸与公制单位厘米的程序。
相关知识
为了完成本关任务,你需要掌握:1.if条件语句。
编程要求
根据提示,在右侧编辑器补充代码,实现单位英寸与公制单位厘米互换。 (1英寸 = 2.54厘米) 注:函数有两个参数,一个value值(代表长度),一个单位(in(英寸)或cm(厘米)),如单位是cm则直接输出单位为英寸的长度,如单位是in则直接输出单位为厘米的长度,如果单位不是cm或in,则输出‘请输入有效的单位’。结果保留两位小数。(本函数不需返回值)
测试说明
平台会对你编写的代码进行测试:
测试输入:3,cm; 预期输出:1.18英寸
测试输入:3,厘米; 预期输出:1.18英寸
测试输入:5,in; 预期输出:12.70厘米
测试输入:5,英寸; 预期输出:12.70厘米
测试输入:5,tt; 预期输出:请输入有效的单位
开始你的任务吧,祝你成功!
""" 英制单位英寸和公制单位厘米互换 """ value = input() value = int(value) unit = input() # 请在此处添加代码 # # *************begin************# if unit in ["in"] or unit in ["英寸"]: a=value*2.54 print("{:.2f}厘米".format(a)) elif unit in ["cm","厘米"]: b=value/2.54 print("{:.2f}英寸".format(b)) else: print("请输入有效的单位") # **************end*************#
第2关:百分制转换为等级制成绩
任务描述
本关任务:编写一个能将百分制成绩转换为等级制成绩的程序。
相关知识
为了完成本关任务,你需要掌握: 1.if条件语句。
编程要求
根据提示,在右侧编辑器补充代码,将百分制成绩转换为等级制成绩。 (90
我们在上述程序块里公开了greeting()函数,greeting()函数需要使用_private_1()和_private_2()函数。学习者并不需要知道greeting()函数中的内部实现细节,所以我们可以将内部逻辑用private函数隐藏起来,这是一种十分常用的代码封装的方法。
小结
为了让程序的封装性更好,我们一般都限定函数的使用范围。一般我们把外部需要使用的函数定义为public函数,而把只在内部使用而外部不需要引用的函数定义成private函数。
编程要求
本关的编程任务是补全src/step3/scope.py文件的代码,实现相应的功能。具体要求如下:
程序分析:
首先我们定义了一个函数move(n,a,b,c),参数n代表a柱上的圆盘个数,a,b,c三个柱子的顺序代表要将a柱上的圆盘最终移动到c柱上,然后b柱作为中间柱。
我们在递归函数中肯定会有终止递归的条件。第2到4行的代码就是表示,当a柱上的圆盘个数为1时,就中止递归并返回。因为此时a柱上面只有一个圆盘,肯定就是直接把圆盘从a柱移动到c柱了。
第5行的代码move(n-1, a, c, b)表示,先得把a柱上的n-1个圆盘从a柱移动到b柱,这时c柱是中间辅助柱。第6行的代码move(1, a, b, c)表示,当条件n=1的时候,把a柱上剩下的1个最大圆盘从a柱移动到c柱。
第7行的代码move(n-1, b, a, c)表示,现在n-1个圆盘已经转移到b柱上了,还是递归调用move函数,将n-1个圆盘从b柱移动到c柱,这时a柱是中间辅助柱。
最后我们调用move函数将3个圆盘从a柱移动到到c柱。当移动64个圆盘时,只需要将调用函数move(n,a,b,c)中的n变为64即可。这个计算量是十分巨大的,也只能交给计算机去解决。
小结
我们通过汉诺塔的例子感受了递归函数的基本思路,并尝试解决了一个具体问题。递归函数的优点是定义清晰、思路简洁,能够极大简化编程过程。理论上,所有的递归函数都可以用循环的方法代替,但循环方法的编程过程要比递归函数复杂很多。
编程要求
本关的编程任务是补全src/step1/recursive.py文件的代码,实现相应的功能。具体要求如下:
-
-
-
- 绘制填充图像前后需要添加的函数:
- 下表给出了turtle的部分画笔控制函数
- 绘制填充图像前后需要添加的函数:
- 下表给出了turtle的部分画笔控制函数