实验三、Python程序设计基础
文章目录
Python初体验 hello world
第1关:Hello Python,我来了!
本关的任务是:
(1)完成打印Hello world 、整数加减法以及利用Help命令查询相应内置函数的使用等;
(2)利用 Python 提供的print()内置函数打印输出Hello world 。
# coding=utf-8
# 请在此处添加代码完成输出“Hello Python”,注意要区分大小写!
########## Begin ##########
print("Hello Python")
########## End ##########
字符串处理
第1关:字符串的拼接:名字的组成
本关的编程任务是补全src/Step1/full_name.py文件中 Begin-End 区间的代码,实现如下功能:
1、将存放姓氏的字符串变量和存放名字的字符串变量拼接起来,中间用一个空格隔开,并将结果存储在full_name变量中;
2、打印输出full_name变量。
# coding=utf-8
# 存放姓氏和名字的变量
first_name = input()
last_name = input()
# 请在下面添加字符串拼接的代码,完成相应功能
########## Begin ##########
full_name = first_name + " " + last_name
print(full_name)
########## End ##########
第2关:字符转换
本关任务:对给定的字符串进行处理,包括字符串长度计算、大小写转换以及去除字符串前后空格等。
# coding=utf-8
# 获取待处理的源字符串
source_string = input()
# 请在下面添加字符串转换的代码
########## Begin ##########
string1 = source_string.strip()
string2 = string1.title()
length = len(string1)
print(string2)
print(length)
########## End ##########
第3关:字符串查找与替换
# coding = utf-8
source_string = input()
# 请在下面添加代码
########## Begin ##########
print(source_string.find('day'))
print(source_string.replace('day','time'))
s=source_string.replace('day','time')
print(s.split(' '))
########## End ##########
玩转列表
第1关:列表元素的增删改:客人名单的变化
# coding=utf-8
# 创建并初始化Guests列表
guests = []
while True:
try:
guest = input()
guests.append(guest)
except:
break
# 请在此添加代码,对guests列表进行插入、删除等操作
########## Begin ##########
deleted_guests=guests.pop()
print(deleted_guests)
guests.insert(2,deleted_guests)
del guests[1]
print(guests)
########## End ##########
第2关:列表元素的排序:给客人排序
本关的任务是学会列表排序相关操作的使用方法,实现对列表元素的排序
# coding=utf-8
# 创建并初始化`source_list`列表
source_list = []
while True:
try:
list_element = input()
source_list.append(list_element)
except:
break
# 请在此添加代码,对source_list列表进行排序等操作并打印输出排序后的列表
########## Begin ##########
source_list.sort()
print(source_list)
########## End ##########
第3关:数值列表:用数字说话
本关任务是利用合适的方法快速创建数字列表,并能够对列表中的元素数值进行简单的统计运算。
# coding=utf-8
# 创建并读入range函数的相应参数
lower = int(input())
upper = int(input())
step = int(input())
# 请在此添加代码,实现编程要求
########## Begin ##########
sourse_list=list(range(lower,upper,step))
lenth=len(sourse_list)
print(lenth)
min_value=min(sourse_list)
max_value=max(sourse_list)
print(max_value-min_value)
########## End ##########
第4关:列表切片:你的菜单和我的菜单
学习如何处理部分列表元素(Python 中称为切片)
# coding=utf-8
# 创建并初始化my_menu列表
my_menu = []
while True:
try:
food = input()
my_menu.append(food)
except:
break
# 请在此添加代码,对my_menu列表进行切片操作
########## Begin ##########
lenth=len(my_menu)
list_slice=my_menu[:lenth:3]
print(list_slice)
list_slice2=my_menu[-3:]
print(list_slice2)
########## End ##########
元组与字典
第1关:元组的使用:这份菜单能修改吗?
本关介绍元组的常见使用方法以及元组和列表的使用区别。
# coding=utf-8
# 创建并初始化menu_list列表
menu_list = []
while True:
try:
food = input()
menu_list.append(food)
except:
break
# 请在此添加代码,对menu_list进行元组转换以及元组计算等操作,并打印输出元组及元组最大的元素
###### Begin ######
print(tuple(menu_list))
print(max(menu_list))
####### End #######
第2关:字典的使用:这份菜单可以修改
在本关中,我们将学习和掌握能够将相关信息关联起来的 Python 字典的相关知识,并完成对包含菜名和价格的菜单的处理操作。
# coding=utf-8
# 创建并初始化menu_dict字典
menu_dict = {}
while True:
try:
food = input()
price = int(input())
menu_dict[food]= price
except:
break
# 请在此添加代码,实现对menu_dict的添加、查找、修改等操作,并打印输出相应的值
########## Begin ##########
menu_dict['lamb']=50
print(menu_dict['fish'])
menu_dict['fish']=100
del menu_dict['noodles']
print (menu_dict)
########## End ##########
第3关:字典的遍历:菜名和价格的展示
本关的目标是让学习者掌握字典遍历的相关知识和用法,并基于这些知识实现对菜单不同的查找和展示处理。
# coding=utf-8
# 创建并初始化menu_dict字典
menu_dict = {}
while True:
try:
food = input()
price = int(input())
menu_dict[food]= price
except:
break
# 请在此添加代码,实现对menu_dict的遍历操作并打印输出键与值
########## Begin ##########
for key in menu_dict.keys():
print(''+key)
for value in menu_dict.values():
print(value)
########## End ##########
第4关:嵌套 – 菜单的信息量好大
本关任务是让学习者利用嵌套方式存储菜单,让读者掌握 Python 嵌套的基本操作。
# coding=utf-8
# 初始化menu1字典,输入两道菜的价格
menu1 = {}
menu1['fish']=int(input())
menu1['pork']=int(input())
# menu_total列表现在只包含menu1字典
menu_total = [menu1]
# 请在此添加代码,实现编程要求
########## Begin ##########
menu2= {}
menu2['fish']=menu1['fish']*2
menu2['pork']=menu1['pork']*2
menu_total.append(menu2)
########## End ##########
# 输出menu_total列表
print(menu_total)
运算符的使用
第1关:算术、比较、赋值运算符
本关介绍 Python 中的一些基本运算符,并要求对给定的苹果和梨的数量进行算术运算、比较、赋值运算,然后输出相应的结果。
# 定义theOperation方法,包括apple和pear两个参数,分别表示苹果和梨子的数量
def theOperation(apple,pear):
# 请在此处填入计算苹果个数加梨的个数的代码,并将结果存入sum_result变量
########## Begin ##########
sum_result=(apple+pear)
########## End ##########
print(sum_result)
# 请在此处填入苹果个数除以梨的个数的代码,并将结果存入div_result变量
########## Begin ##########
div_result=(apple/pear)
########## End ##########
print(div_result)
# 请在此处填入苹果个数的2次幂的代码,并将结果存入exp_result变量
########## Begin ##########
exp_result=(apple**2)
########## End ##########
print(exp_result)
# 请在此处填入判断苹果个数是否与梨的个数相等的代码,并将结果存入isequal变量
########## Begin ##########
isequal=(apple==pear)
########## End ##########
print(isequal)
# 请在此处填入判断苹果个数是否大于等于梨的个数的代码,并将结果存入ismax变量
########## Begin ##########
ismax=(apple>=pear)
########## End ##########
print(ismax)
# 请在此处填入用赋值乘法运算符计算梨个数乘以2的代码,并将结果存入multi_result变量
########## Begin ##########
multi_result=(pear*2)
########## End ##########
print(multi_result)
第2关:逻辑运算符
本关的任务就是让学习者运用 Python 中的逻辑运算符来得出 tom 与 jerry 是否有说谎。
# 定义逻辑运算处理函数theLogic,其中tom与Jerry分别代表两个输入参数
def theLogic(tom,jerry):
# 请在此处填入jerry的布尔“非”代码,并将结果存入到not_result这个变量
########## Begin ##########
not_result=not jerry
########## End ##########
print(not_result)
# 请在此处填入tom,jerry的逻辑与代码,并将结果存入到and_result这个变量
########## Begin ##########
and_result=tom and jerry
########## End ##########
print(and_result)
第3关:位运算符
本关的任务就是让学习者了解并能运用 Python 中的位运算符来进行运算。
# 定义位运算处理函数bit, 其中bitone和bittwo两个参数为需要进行位运算的变量,由测试程序读入。
def bit(bitone,bittwo):
# 请在此处填入将bitone,bittwo按位与的代码,并将运算结果存入result变量
########## Begin ##########
result=bitone&bittwo
########## End ##########
print(result)
# 请在此处填入将bitone,bittwo按位或的代码,并将运算结果存入result变量
########## Begin ##########
result=bitone|bittwo
########## End ##########
print(result)
# 请在此处填入将bitone,bittwo按位异或的代码,并将运算结果存入result变量
########## Begin ##########
result=bitone^bittwo
########## End ##########
print(result)
# 请在此处填入将bitone按位取反的代码,并将运算结果存入result变量
########## Begin ##########
result=~bitone
########## End ##########
print(result)
# 请在此处填入将bittwo左移动两位的代码,并将运算结果存入result变量
########## Begin ##########
result=bittwo<<2
########## End ##########
print(result)
# 请在此处填入将bittwo右移动两位的代码,并将运算结果存入result变量
########## Begin ##########
result=bittwo>>2
########## End ##########
print(result)
第4关:成员运算符
本关的任务就是学习并运用成员运算符
# 定义成员片段函数member,参数me为待判断的人名,member_list为成员名单
def member(me,member_list = []):
# 请在if后面的括号中填入判断变量me是否存在于list中的语句
########## Begin ##########
if( me in member_list):
print("我是篮球社成员")
else:
print("我不是篮球社成员")
########## End ##########
# 请在if后面的括号中填入判断变量me是否存在于list中的语句
########## Begin ##########
if( me not in member_list):
print("我不是篮球社成员")
else:
print("我是篮球社成员")
########## End ##########
第5关:身份运算符
本关要求判断给定的两个对象的存储单元是否相同。
# 定义addressone和addresstwo两个变量,并为其赋值
addressone = 20
addresstwo = 20
addressthree = 12
# 在if后面的括号中填入判断变量addressone与变量addresstwo是否有相同的存储单元的语句
########## Begin ##########
if(addressone is addresstwo):
print("变量addressone与变量addresstwo有相同的存储单元")
else:
print("变量addressone与变量addresstwo的存储单元不同")
########## End ##########
# 在if后面的括号中填入判断变量addresstwo与变量addressthree是否没有相同的存储单元的语句
########## Begin ##########
if(addresstwo is not addressthree):
print("变量addresstwo与变量addressthree的存储单元不同")
else:
print("变量addresstwo与变量addressthree有相同的存储单元")
########## End ##########
第6关:运算符的优先级
本关的编程任务是补全priority.py文件中的功能。具体要求如下:
1、先将var1左移两位,然后计算var1与var2的和,最后将这个值乘以var3,输出最后的值;
2、先将var1与var2按位与,然后计算得到的值与var3的和,最后将这个值乘以var4,输出最后的值。
# 定义并实现优先级运算函数theProirity
def thePriority(var1,var2,var3,var4):
# 先将var1左移两位,然后计算var1与var2的和,最后后将这个值乘以var3,并将最终结果存入result变量
########## Begin ##########
result=((var1<<2)+var2)*var3
########## End ##########
print(result)
# 先将var1与var2按位与,然后计算得到的值与var3的和,最后后将这个值乘以var4,并将最终结果存入result变量
########## Begin ##########
result=((var1&var2)+var3)*var4
########## End ##########
print(result)
顺序与选择结构
第1关:顺序结构
本关要求学习者理解顺序结构,并对输入的三个数changeone、changetwo、plus先交换changeone、changetwo值,然后再计算changeone + plus的值。
changeOne = int(input())
changeTwo = int(input())
plus = int(input())
# 请在此添加代码,交换changeOne、changeTwo的值,然后计算changeOne、plus的和result的值
########## Begin ##########
temp=changeOne
changeOne=changeTwo
changeTwo=temp
result = changeOne+plus
########## End ##########
print(result)
第2关:选择结构:if-else
本关的任务是让学习者理解选择结构,学会使用最基本的选择语句:if-else语句。
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%")
第3关:选择结构 : 三元操作符
本关要求学习者能够学会并使用三元操作符来判断谁才是射击比赛的赢家。
jimscore = int(input())
jerryscore = int(input())
# 请在此添加代码,判断若jim的得分jimscore更高,则赢家为jim,若jerry的得分jerryscore更高,则赢家为jerry,并输出赢家的名字
########## Begin ##########
winner = "jim" if jimscore>jerryscore else "jerry"
########## End ##########
print(winner)
循环结构
第1关:While 循环与 break 语句
本关的任务是让学习者学会使用while循环与break语句。
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 循环与 continue 语句
本关的任务是让学习者学会使用for循环与continue语句。
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,"的试卷已阅")
第3关:循环嵌套
本关的任务是让学习者学会使用循环嵌套
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))
第4关:迭代器
本关的编程任务是补全ListCalculate.py文件中的部分代码,具体要求如下:
1、当输入一个列表时,填入将列表List转换为迭代器的代码;
2、填入用next()函数遍历迭代器IterList的代码。
List = []
member = input()
for i in member.split(','):
result = i
List.append(result)
#请在此添加代码,将List转换为迭代器的代码
#********** Begin *********#
IterList=iter(List)
#********** End **********#
while True:
try:
#请在此添加代码,用next()函数遍历IterList的代码
#********** Begin *********#
num = next(IterList)
#********** End **********#
result = int(num) * 2
print(result)
except StopIteration:
break
函数结构
第1关:函数的参数 – 搭建函数房子的砖
本关的重点就是研究函数的参数parameters。
# 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 ##########
def plus(numbers):
add=0
for i in numbers:
add+=i
return add
d=plus(numbers)
########## End ##########
print(d)
第2关:函数的返回值 – 可有可无的 return
本关的编程任务是补全src/step2/return.py文件的代码,实现相应的功能。具体要求如下:
定义一个函数gcd,功能是求两个正整数的最大公约数;
调用函数gcd,得到输入的两个正整数的最大公约数,并输出这个最大公约数。
# coding=utf-8
# 输入两个正整数a,b
a = int(input())
b = int(input())
# 请在此添加代码,求两个正整数的最大公约数
########## Begin ##########
def gcd(a,b):
if a<b:
t=a
a=b
b=t
while b:
maxs=a%b
a=b
b=maxs
return a
########## End ##########
# 调用函数,并输出最大公约数
print(gcd(a,b))
第3关:函数的使用范围:Python 作用域
本关的目标就是让学习者了解并掌握函数的使用范围,即 Python 作用域的相关知识
# coding=utf-8
# 输入两个正整数a,b
a = int(input())
b = int(input())
# 请在此添加代码,求两个正整数的最小公倍数
########## Begin ##########
def _gcd(a,b):
if a < b:
t=a
a=b
b=t
while b:
t = a%b
a = b
b = t
return a
def lcm(a,b):
return int(a*b/_gcd(a,b))
########## End ##########
# 调用函数,并输出a,b的最小公倍数
print(lcm(a,b))
函数调用
第1关:内置函数 – 让你偷懒的工具
本关目标是让学习者了解并掌握一些常用的 Python 内置函数的用法。
# coding=utf-8
# 输入一个整数n
n = int(input())
# 请在此添加代码,对输入的整数进行判断,如果是素数则输出为True,不是素数则输出为False
########## Begin ##########
def prime(self):
if self==1:
return False
for i in range(2,n):
if(n%i==0):
return False
break
else:
return True
########## End ##########
print(prime(n))
第2关:函数正确调用 – 得到想要的结果
# coding=utf-8
# 输入数字字符串,并转换为数值列表
a = input()
num1 = eval(a)
numbers = list(num1)
# 请在此添加代码,对数值列表numbers实现从小到大排序
########## Begin ##########
print(sorted(numbers))
########## End ##########
第3关:函数与函数调用 – 分清主次
# coding=utf-8
from math import pi as PI
n = int(input())
# 请在此添加代码,实现圆的面积计算,并输出面积结果
########## Begin ##########
def area(n):
return(PI*n*n)
print("%.2f"% area(n))
########## End ##########
经典函数实例
第1关:递归函数 – 汉诺塔的魅力
# coding=utf-8
# 输入正整数n
n = int(input())
# 请在此添加代码,对输入的正整数n进行阶乘运算,并输出计算结果。
########## Begin ##########
def fact(n):
if n==1:
return 1
else:
return n*fact(n-1)
print(fact(n))
########## End ##########
第2关:lambda 函数 – 匿名函数的使用
# coding=utf-8
# 请在此添加代码,使用lambda来创建匿名函数,能够判断输入的两个数值的大小
########## Begin ##########
MAXIMUM=lambda a,b:max(a,b)
MINIMUM=lambda a,b:min(a,b)
########## End ##########
# 输入两个正整数
a = int(input())
b = int(input())
# 输出较大的值和较小的值
print('较大的值是:%d' % MAXIMUM(a,b))
print('较小的值是:%d' % MINIMUM(a,b))
第3关:Map-Reduce – 映射与归约的思想
# coding=utf-8
# 输入一个正整数
x = int(input())
# 请在此添加代码,将输入的一个正整数分解质因数
########## Begin ##########
result=[]
b=x
a=2
for i in range(x):
if(b%a!=0):
a=a+1
else:
b=b/a
result.append(a)
if b<a:
break
########## End ##########
# 输出结果,利用map()函数将结果按照规定字符串格式输出
print(x,'=','*'.join(map(str,result)))
模块
第1关:模块的定义
本关的编程任务是补全src/step1/module.py文件的代码,实现相应的功能。具体要求如下:
1、输入直角三角形的两个直角边的边长a和b,要求计算出其斜边边长;
2、要求使用math模块,并输出计算结果,结果保留小数点后三位小数。
# coding=utf-8
import math
# 输入正整数a和b
a = float(input())
b = float(input())
# 请在此添加代码,输入直角三角形的两个直角边的边长a和b,计算出其斜边边长
########## Begin ##########
j=math.sqrt(a**2+b**2)
print("%.3f"%j)
########## End ##########
第2关:内置模块中的内置函数
本关的编程任务是补全src/step2/built-module.py文件的代码,实现相应的功能。具体要求如下:
1、输入两个正整数a和b,要求判断是否存在两个整数,它们的和为a,积为b;
2、如果存在,则输出Yes,若不存在,则输出No
# coding=utf-8
# 导入math模块
import math
# 输入两个整数a和b
a = int(input())
b = int(input())
# 请在此添加代码,要求判断是否存在两个整数,它们的和为a,积为b
########## Begin ##########
y=0;
for i in range(a):
if(i*(a-i)==b):
print("Yes")
y=1;
break
if(y==0):
print("No")
########## End ##########
类的基础语法
第1关:类的声明与定义
本关的编程任务是补全Book.py文件中的代码,具体要求如下:
在类头部填入定义Book类的代码。
# 请在下面填入定义Book类的代码
########## Begin ##########
class Book:
########## End ##########
'书籍类'
def __init__(self,name,author,data,version):
self.name = name
self.author = author
self.data = data
self.version = version
def sell(self,bookName,price):
print("%s的销售价格为%d" %(bookName,price))
第2关:类的属性与实例化
本关的编程任务是补全People.py文件中的声明变量和实例化部分,具体要求如下:
1、填入声明两个变量名分别为name和country的字符串变量的代码;
2、填入对类People进行实例化的代码,实例对象为p。
class People:
# 请在下面填入声明两个变量名分别为name和country的字符串变量的代码
########## Begin ##########
def __init__(self,name,country):
self.name = name
self.country = country
########## End ##########
def introduce(self,name,country):
self.name = name
self.country = country
print("%s来自%s" %(name,country))
name = input()
country = input()
# 请在下面填入对类People进行实例化的代码,对象为p
########## Begin ##########
p = People(name, country)
########## End ##########
p.introduce(name,country)
第3关:绑定与方法调用
本关的编程任务是补全fractionSum.py文件中的创建实例与调用方法部分,具体要求如下:
1、填入创建fractionSum的实例fs的代码;
2、填入调用fractionSumtest类中dcall方法的代码,计算当n为偶数时计算的和;
3、填入调用fractionSumtest类中dcall方法的代码,计算当n为奇数时计算的和
import fractionSumtest
# 请在下面填入创建fractionSum的实例fs的代码
########## Begin ##########
fs = fractionSumtest.fractionSum()
########## End ##########
n = int(input())
if n % 2 == 0:
# 请在下面填入调用fractionSumtest类中dcall方法的代码,计算当n为偶数时计算的和
########## Begin ##########
sum = fs.dcall(fs.peven,n)
########## End ##########
else:
# 请在下面填入调用fractionSumtest类中dcall方法的代码,计算当n为奇数时计算的和
########## Begin ##########
sum = fs.dcall(fs.podd,n)
########## End ##########
print(sum)
第4关:静态方法与类方法
本关的编程任务是补全BookSell.py文件中的函数修饰符部分,将函数声明为相应的类型,具体要求如下:
1、填入函数修饰符将printStatic()方法声明为静态方法;
2、填入函数修饰符将printVersion(cls)方法声明为类方法。
class BookSell:
static_var = 100
def sell(self,name,author,version,price):
print("%s的销售价格为%d" %(name,int(price)))
# 请在下面填入函数修饰符将printStatic()方法声明为静态方法
########## Begin ##########
@staticmethod
########## End ##########
def printStatic():
print(BookSell.static_var)
# 请在下面填入函数修饰符将printVersion(cls)方法声明为类方法
########## Begin ##########
@classmethod
########## End ##########
def printVersion(cls):
print(cls)
第5关:类的导入
本关的编程任务是补全DataChange.py文件中的导入模块并调用方法实现数制转换功能,具体要求如下:
从DataChangetest模块中导入DataChange类,并使用该类中的eightToten(self,p)方法,实现将输入的八进制转换成十进制输出。
# 从 DataChangetest 模块中导入 DataChange 类,并使用该类中的 eightToten(self,p) 方法,实现将输入的八进制转换成十进制输出。
########## Begin ##########
import DataChangetest
object = DataChangetest.DataChange()
p = input()
object.eightToten(p)
########## End ##########
类的继承
本关的编程任务是补全animals.py文件中的定义子类部分,具体要求如下:
1、填入定义继承自animals类的fish类的代码;
2、填入定义继承自animals类的leopard类的代码。
import animalstest
# 请在下面填入定义fish类的代码,fish类继承自animals类
########## Begin ##########
class fish(animalstest.animals):
########## End ##########
def __init__(self,name):
self.name = name
def swim(self):
print("%s会游泳" %self.name)
# 请在下面填入定义leopard类的代码,leopard类继承自animals类
########## Begin ##########
class leopard(animalstest.animals):
########## End ##########
def __init__(self,name):
self.name = name
def climb(self):
print("%s会爬树" %self.name)
fName = input()
lName = input()
f = fish(fName)
f.breath()
f.swim()
f.foraging()
l = leopard(lName)
l.breath()
l.run()
l.foraging()
第2关:覆盖方法
本关的任务是补全Point.py文件中的代码,具体要求如下:
填入覆盖父类getPoint()方法的代码,并在这个方法中分别得出x – y与z – h结果的绝对值。
class Point:
def __init__(self,x,y,z,h):
self.x = x
self.y = y
self.z = z
self.h = h
def getPoint(self):
return self.x,self.y,self.z,self.h
class Line(Point):
# 请在下面填入覆盖父类getPoint()方法的代码,并在这个方法中分别得出x - y与z - h结果的绝对值
########## Begin ##########
def getPoint(self):
length1 = abs(self.x - self.y)
length2 = abs(self.z - self.h)
########## End ##########
print(length1,length2)
第3关:从标准类派生
本关的编程任务是补全ChangeAbs.py文件中的代码,具体要求如下:
1、使用super()内建函数去捕获对应的父类,并调用它的__new__()方法来计算输入数值的绝对值,返回最后的结果;
2、使用super()内建函数去捕获对应父类,从而使输入字典自动排序并返回最后的结果。
class ChangeAbs(int):
def __new__(cls, val):
# 填入使用super()内建函数去捕获对应父类以调用它的__new__()方法来计算输入数值的绝对值的代码
# 求一个数的绝对值的函数为abs()
# 返回最后的结果
########## Begin ##########
return int.__new__(cls, abs(val))
########## End ##########
class SortedKeyDict(dict):
def keys(self):
# 填入使用super()内建函数去捕获对应父类使输入字典自动排序的代码
# 返回最后的结果
########## Begin ##########
return sorted(super(SortedKeyDict, self).keys())
########## End ##########
第4关:多重继承
本关的编程任务是补全src/Step4/multiInherit.py文件的代码,实现当调用类E的test()时,继承的是类A的test()。具体要求如下:
填入定义子类C的代码;
填入定义子类D的代码。
class A(object):
def test(self):
print("this is A.test()")
class B(object):
def test(self):
print("this is B.test()")
def check(self):
print("this is B.check()")
# 请在下面填入定义类C的代码
########## Begin ##########
class C(A,B):
########## End ##########
pass
# 请在下面填入定义类D的代码
########## Begin ##########
class D(A,B):
########## End ##########
def check(self):
print("this is D.check()")
class E(C,D):
pass
类的其它特性
第1关:类的内建函数
本关的编程任务是补全specialmethod.py文件中的代码,具体要求如下:
填入判断subClass是否为parentClass的子类的代码,并输出结果;
填入判断sc是否为subClass实例的代码,并输出结果;
填入判断实例sc是否包含一个属性为name的代码,并输出结果;
填入将sc的属性name的值设置为subclass的代码;
填入获取sc的属性name的值的代码,并输出结果;
填入调用subClass的父类的tell()方法的代码。
import specialmethodtest
sc = specialmethodtest.subClass()
# 请在下面填入判断subClass是否为parentClass的子类的代码,并输出结果
########## Begin ##########
print(issubclass(specialmethodtest.subClass,specialmethodtest.parentClass))
########## End ##########
# 请在下面填入判断sc是否为subClass实例的代码,并输出结果
########## Begin ##########
print(isinstance(sc,specialmethodtest.subClass))
########## End ##########
# 请在下面填入判断实例sc是否包含一个属性为name的代码,并输出结果
########## Begin ##########
print(hasattr(sc,'name'))
########## End ##########
# 请在下面填入将sc的属性name的值设置为subclass的代码
########## Begin ##########
setattr(sc,'name','subclass')
########## End ##########
# 请在下面填入获取sc的属性name的值的代码,并输出结果
########## Begin ##########
print(getattr(sc,'name'))
########## End ##########
# 请在下面填入调用subClass的父类的tell()方法的代码
########## Begin ##########
specialmethodtest.parentClass.tell(sc)
########## End ##########
第2关:类的私有化
在本关的Bagtest.py文件中,分别定义了两个私有变量:__price与_price。本关的编程任务是补全Bag.py文件中的调用Bagtest.py文件中私有变量的代码,具体要求如下:
填入输出Bag类中变量__price的代码;
填入输出Bag类中变量_price的代码。
import Bagtest
price = int(input())
bag = Bagtest.Bag(price)
# 请在下面填入输出Bag类中变量__price的代码
########## Begin ##########
print(bag._Bag__price)
########## End ##########
# 请在下面填入输出Bag类中变量_price的代码
########## Begin ##########
print(bag._price)
########## End ##########
第3关:授权
在本关给出的文件中,定义了一个包装类WrapClass。本关的编程任务是补全WrapClass.py文件中实现授权和调用类中方法的代码,具体要求如下:
填入重写__getattr__()实现授权的代码;
填入实例化类,通过对象调用thelist,并输出thelist第三个元素的代码。
class WrapClass(object):
def __init__(self,obj):
self.__obj = obj
def get(self):
return self.__obj
def __repr__(self):
return 'self.__obj'
def __str__(self):
return str(self.__obj)
# 请在下面填入重写__getattr__()实现授权的代码
########## Begin ##########
def __getattr__(self,thelist):
print(thelist[2])
########## End ##########
thelist = []
inputlist = input()
for i in inputlist.split(','):
result = i
thelist.append(result)
# 请在下面填入实例化类,并通过对象调用thelist,并输出thelist第三个元素的代码
########## Begin ##########
lists = WrapClass(thelist)
lists.__init__(thelist)
lists.__getattr__(thelist)
########## End ##########
第4关:对象的销毁
在本关的测试文件中,定义了一个类:delObject。在类中定义了一个析构方法__del__()方法,在对象的引用都被销毁时,调用此函数。本关的编程任务是补全delObject.py文件中的对象定义与销毁部分。具体要求如下:
声明类delObject的实例,并将其引用赋给其它别名,然后调用del方法将所有声明的对象销毁。
import delObjecttest
# 请在下面声明类delObject的实例,并将其引用赋给其它别名,然后调用del方法将其销毁
########## Begin ##########
delobj = delObjecttest.delObject()
delobj2 = delobj
del(delobj)
del(delobj2)
########## End ##########