python练习
一、列表
列表长度
描述
牛牛学会了使用list函数与split函数将输入的连续字符串封装成列表,你能够帮他使用len函数统计一些公输入了多少字符串,列表中有多少元素吗?
输入描述:
输入一行多个字符串,字符串之间通过空格间隔。
输出描述:
输出列表的长度。
1.解题
错误的思路
a = ["NiuNiu NiuMei NiuNeng"]
print(len(a))
错误点:a变量中的三个元素会被len函数识别为整体,输出结果为1,不符合输出结果为3的预期
正确思路
print(len(input().split()))
输出结果为3
2.知识拓展
len函数:返回对象(字符、列表、元组等)长度或项目个数
input函数:Python3.x 中 input() 函数接受一个标准输入数据,返回为 string 类型。
split函数:通过指定分隔符对字符串进行切片,该方法将字符串分割成子字符串并返回一个由这些子字符串组成的列表。
如果第二个参数 num 有指定值,则分割为 num+1 个子字符串。
split()方法特别适用于根据特定的分隔符将字符串拆分成多个部分
增加派对名单(一)
描述
为庆祝驼瑞驰在牛爱网找到合适的对象,驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单,在检查的时候发现少了他最好的朋友“Allen”的名字,你能使用append函数将这个名字加到列表末尾吗?添加完成请输出完整列表。
输入描述:
输入多个连续的字符串表示名字,以空格间隔。
输出描述:
输出添加完Allen后的完整列表
1.解题
list1= input().split()
list1.append('Allen')
print(list1)
2.知识拓展
append函数:用于在列表末尾添加新的对象
append函数会修改原来的列表
增加派对名单(二)
描述
为庆祝驼瑞驰在牛爱网找到合适的对象,驼瑞驰通过输入的多个连续字符串创建了一个列表作为派对邀请名单,在检查的时候发现少了他最好的朋友“Allen”的名字,因为是最好的朋友,他想让这个名字出现在邀请列表的最前面,你能用insert函数帮他实现吗?请输出插入后的完整列表。
输入描述:
输入多个连续的字符串表示名字,用空格间隔。
输出描述:
输出插入名字后的完整列表。
1.解题
a = input().split() #定义一个a变量,使用input函数接收标准输入的数据,并使用split函数以空格为分隔符对字符串进行切片
a.insert( 0, "Allen") #使用insert函数在变量a中插入allen字符串到列表的最前面2
print(a) #使用print函数输出变量a
2.知识拓展
insert函数
作用是将指定的对象插入到列表的指定位置
语法:list.insert(index,obj)
参数解释: index 对象obj需要在列表中插入的索引位置
obj插入列表中的的对象
example: a = [ 'wang', 'liang']
a.insert(1, 'yue')
print(a)
删除简历
描述
牛牛在各大互联网公司投入了简历,公司的名字通过字符串的形式在一行中输入,请用列表记录。现在牛牛已经确定了第一所公司的HR表露了不录用他的态度,请你使用del函数帮助牛牛从列表中删除第一个元素,然后输出列表。
输入描述:
以字符串的形式输入公司名字,字符串之间以空格间隔。
输出描述:
输出删除第一个元素后的完整列表。
1.解题
a =input().split() #定义一个a变量,使用input函数接收标准输入的数据,并使用split函数以空格为分隔符对字符串进行切片
a = del[0] #使用del函数删除变量a中数据类型为列表第一列的值
print(a) #输出变量a
2.知识拓展
del函数
del函数可以用来删除任何类型的对象
语法:del 变量名(index)
example:del a(0)
删除好友
描述
牛妹有一个坏习惯,一旦与朋友吵架了,她就要删除好友。现在输入一个行多个字符串表示牛妹的朋友,请把它们封装成列表,然后再输入与牛妹吵架的朋友的名字,请使用remove函数帮她从列表中删除这个好友,然后输出完整列表。
输入描述:
第一行输入多个字符串表示朋友的名字,以空格间隔。
第二行输入吵架的朋友的名字,必定是第一行中出现的名字。
输出描述:
输出删除好友后的完整列表。
1.解题
a = input().split() #定义一个a变量,使用input函数接收标准输入的数据,并使用split函数以空格为分隔符对字符串进行切片
b = input() #定义一个b变量,使用input函数接收标准输入的数据
a.remove(b) #从a变量中使用remove函数删除b变量
print(a) #输出变量a
2.知识拓展
remove() 函数用于移除列表中某个值的第一个匹配项
语法:list.remove(obj)
淘汰排名最后的学生
描述
某实验班实行末位淘汰制,期中考试需要淘汰末三位同学。现输入一行多个字符串表示按分数排名的该班级同学的名字(数量一定不少于三个),请你使用list将其封装为列表,然后使用三次pop函数,去掉末三位同学的名字,最后输出淘汰后的班级名字列表。
输入描述:
输入一行多个字符串表示同学名字,最少不少于3个名字,以空格间隔。
输出描述:
输出删除末三位后的完整列表。
示例1
输入:
NiuNiu Tom Tony Lucy
输出:
['NiuNiu']
解题
a = input().split() #定义一个a变量,使用input函数接收标准输入的数据,并使用split函数以空格为分隔符对字符串进行切片
fo i in range(3) #使用for循环,并使用range函数生成0-2的整数序列,在每次循环中,赋值给变量i
a.pop() # 使用pop函数对列表a中的元素进行删除
print(a) #输出变量a
知识拓展
range函数
python2
python2.x range() 函数可创建一个整数列表,一般用在 for 循环中。
语法:range(start, stop[, step])
参数说明:
- start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
- stop: 计数到 stop 结束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5
- step:步长,默认为1。例如:range(0, 5) 等价于 range(0, 5, 1)
python3
Python3 range() 函数返回的是一个可迭代对象(类型是对象),而不是列表类型, 所以打印的时候不会打印列表
pop函数
不同的数据类型都有pop函数
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
列表
语法:list.pop([index=-1])
- obj -- 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。
有序的列表
描述
创建一个依次包含字符串'P'、'y'、't'、'h'、'o'和'n'的列表my_list,先使用sorted函数对列表my_list进行临时排序,第一行输出排序后的完整列表,第二行输出原始的列表。再使用sort函数对列表my_list进行降序排序,第三行输出排序后完整的列表。
输入描述:
无
输出描述:
第一行输出临时排序后的列表;
第二行输出原始的列表;
第三行输出完成降序排序后的列表
解题
my_list=['P', 'y', 't', 'h', 'o', 'n'] #定义my_list的数据类型为列表,列表中的值为Python
a = sorted(my_list) #使用sorted函数对变量my_list进行升序,并赋值给变量a
print(a) #输出变量a
print(my_list) #输出变量my_list
my_list.sort(reverse= True) #使用sort函数对变量my_list进行降序
print(my_list) #输出变量my_list
知识拓展
sorted函数
作用:对可迭代对象进行排序
语法:sorted(iterable, cmp=None, key=None, reverse=False)
参数说明:
- iterable -- 可迭代对象。
- cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
a = [5,7,6,3,4,2,1]
b = sorted(a)
print(a)
print(b)
使用cmp函数
牛牛的反转列表
描述
牛牛有一个列表记录了各个朋友的喜欢的数字,num = [3, 5, 9, 0, 1, 9, 0, 3],请你帮他创建列表,然后使用reverse函数将列表反转输出。
输入描述:
无
输出描述:
第一行输出创建好的原始的列表,第二行输出反转后的列表。
解题
num = [3,5,9,0,1,9,0,3] # 定义数据类型为列表,并将值赋值给变量num
num.reverse() #使用reverse函数对列表的元素进行反向排序
print(num) 输出变量num
知识拓展
reverse() 函数用于反向列表中元素
语法:list.reverse()
朋友们的喜好
描述
牛牛有一个name = ['Niumei', 'YOLO', 'Niu Ke Le', 'Mona'] 记录了他最好的朋友们的名字,请创建一个二维列表friends,使用append函数将name添加到friends的第一行。
假如Niumei最喜欢吃pizza,最喜欢数字3,YOLO最喜欢吃fish, 最喜欢数字6,Niu Ke Le最喜欢吃potato,最喜欢数字0,Mona最喜欢吃beef,最喜欢数字3。
请再次创建一个列表food依次记录朋友们最喜欢吃的食物,并将创建好的列表使用append函数添加到friends的第二行;
然后再创建一个列表number依次记录朋友们最喜欢的颜色,并将创建好的列表使用append函数添加到friends的第三行。
这样friends就是一个二维list,使用print函数直接打印这个二维list。
输入描述:
无
输出描述:
[['Niumei', 'YOLO', 'Niu Ke Le', 'Mona'], ['pizza', 'fish', 'potato', 'beef'], [3, 6, 0, 3]]
解题
name = ["Niumei", "YOLO", "Niu Ke Le", "Mona"]
food = ["pizza", "fish", "potato", "beef"]
number = [3, 6, 0, 3]
friends = []
friends.append(name)
friends.append(food)
friends.append(number)
print(friends)
密码游戏
描述
牛牛和牛妹一起玩密码游戏,牛牛作为发送方会发送一个4位数的整数给牛妹,牛妹接收后将对密码进行破解。
破解方案如下:每位数字都要加上3再除以9的余数代替该位数字,然后将第1位和第3位数字交换,第2位和第4位数字交换。
请输出牛妹破解后的密码。
输入描述:
输入一个四位数的整数。
输出描述:
输出破解后的密码,以四位数的形式。
示例1
输入:
1234
输出:
6745
备注:
输入不会有前置0,但是输出要保持前置0
解题
a = input() #获取输入的数字
b = [] #定义空列表
for i in range(len(a)): #len计算出列表的长度,并传递给range函数计算出长度
c = (int(a[i])+3)%9 #定义变量c,使用int函数定义为整型+3再取余9
b.append(c) #将变量c添加到变量b
b[0],b[2] = b[2], b[0] #数字交换
b[1],b[3] = b[3], b[1]
for i in b:
print(i,end="")
用列表实现栈
描述
栈是一种先进后出的数据结构,类似我们生活中挤电梯,最后进入的肯定是先出来,现我们用Python的列表来模拟栈。假设初始的列表为 stack = [1, 2, 3, 4, 5],请将其视作栈,使用pop函数弹出末尾两个元素,再使用append函数将输入元素加入到栈中,每次操作完成后都要输出整个列表。
输入描述:
输入要加入栈中的整数。
输出描述:
第一行输出第一次出栈后的列表;
第二行输出第二次出栈后的列表;
第三行输出元素入栈后的列表。
示例1
输入: 1
输出: [1, 2, 3, 4] [1, 2, 3] [1, 2, 3, 1]
说明: 第一次弹出末尾元素5,第二次弹出末尾元素4,第三次加入新增元素1
解题
第一次
a = [1,2,3,4,5]
a = input()
a_pop = a.pop(4)
b_pop = a.pop(3)
c_pop = a.append(1)
print(a_pop)
print(b_pop)
print(c_pop)
输出报错
1
Traceback (most recent call last):
File "D:\python\python 代码\pythonProject1\hello.py", line 4, in <module>
a_pop = a.pop(4)
^^^^^
AttributeError: 'str' object has no attribute 'pop'
'str'对象没有'pop'属性
报错原因:新定义了一个变量a_pop,值为a.pop,python规定,pop函数必须结合数据类型一起使用,这里的情况是把a.pop作为一个值传递给了a_pop,而a.pop不是列表,是变量名,不符号使用规范,所以报错
解决方案:把a_pop删除,直接使用a.pop
第二次
a = [1,2,3,4,5]
a = input()
a.pop(4)
a.pop(3)
a.append(1)
print(a) print(a) print(a)
输出结果
1
Traceback (most recent call last):
File "D:\python\python 代码\pythonProject1\hello.py", line 4, in <module>
a_pop = a.pop(4)
^^^^^
AttributeError: 'str' object has no attribute 'pop'
报错原因:a = input()不是列表
解决方案:调整a = [1,2,3,4,5] 和a = input() 位置
第三次
a = input() a = [1,2,3,4,5] a.pop(4) a.pop(3) a.append(1) print(a) print(a) print(a)
输出结果 不符号预期
1
[1, 2, 3, 1]
[1, 2, 3, 1]
[1, 2, 3, 1]
不符号预期原因:代码位置导致,a.pop(4)和a.pop(3)离pirnt比较远,print找不到a.pop的结果,而a.append(1)离print近,使用输出结果都是【1,2,3,1]
调整print函数位置
第四次(正确的代码)
d = int(input())
a = [1,2,3,4,5]
a.pop(4)
print(a)
a.pop(3)
print(a)
a.append(1)
print(a)
知识拓展
pop() 函数用于移除列表中的一个元素(默认最后一个元素),并且返回该元素的值。
语法:list.pop([index=-1])
obj -- 可选参数,要移除列表元素的索引值,不能超过列表总长度,默认为 index=-1,删除最后一个列表值。
牛客答题
d = int(input())
a = [1,2,3,4,5]
a.pop(4)
print(a)
a.pop(3)
print(a)
a.append(d)
print(a)
NP30 用列表实现队列
描述
队列是一种先进先出的数据结构,类似食堂排队打饭,先入队的元素当然要先出队,先请用Python列表模拟队列。现有一列表 queue = [1, 2, 3, 4, 5] 被视作队列,请使用pop函数连续两次取出队首元素,再使用append函数将输入元素添加到队尾,每次操作后都要输出完整的列表。
输入描述:
输入一个整数表示要添加到队列的元素。
输出描述:
第一行输出第一次取出队首后的列表;
第二行输出第二次取出队首后的列表;
第三行输出添加元素到队列后的列表。
解题
''' a = [1,2,3,4,5]
a.pop(0)
print(a)
a.pop(0) print(a)
b = input() a.append(8) print(a) '''
''' a = [1,2,3,4,5]
b = 1 c = 2
if b in a:
a.pop(0) print(a)
if c in a: a.pop(0) print(a)
input() a.append(8)
print(a) '''
a = [1,2,3,4,5]
b = 1 c = 2
while b in a: a.pop(0) print(a)
while c in a: a.pop(0) print(a) a.append(int(input())) print(a)
团队分组
描述
创建一个列表group_list,其中依次包含字符串 'Tom', 'Allen', 'Jane', 'William', 'Tony' 表示这个小组成员的名字。现有三项任务需要他们去完成,根据不同任务的繁琐度和实际情况需要分别派2人、3人、2人来完成,他们决定通过对列表分片来分配任务。
使用print()语句和切片来打印列表group_list的前两个元素表示去做第一个任务的人的名字,再使用print()语句和切片来打印列表group_list的中间三个元素表示去做第二个任务的人的名字,再使用print()语句和切片来打印列表group_list的后两个元素表示去做第三个任务的人的名字。
输入描述:
无
输出描述:
按照题意输出
['Tom', 'Allen']
['Allen', 'Jane', 'William']
['William', 'Tony']
解题
group_list = ["Tom", "Allen", "Jane", "William", "Tony"]
print(group_list[0:2])
print(group_list[1:4])
print(group_list[3:5])
知识点补充
能够进行切片的对象有:字符串、列表、元组
语法: 1 object[start_index:end_index:step]
解释:
start_index:起始的索引值(包含该索引本身)
end_index:结束的索引值(不包含该索引本身)
step:步长(正负数均可,其绝对值大小决定了切取数据时的‘‘步长”,而正负号决定了“切取方向”,正表示“从左往右”取值,负表示“从右往左”取值。当step省略时,默认为1,即从左往右以增量1取值。)
python学习和练习记录