概念
这个案例主要是带大家学习列表相关的知识
之前学习了三种基本数据类型,整数、浮点数、字符串
如果使用基本数据类型,用起来确实简单,就像一个装东西的盒子一样,往里面放东西,取东西。
但是如果我有一堆东西,那我就需要一堆变量来存放,太麻烦了,所以这种情况就要使用列表
如果你去找老中医抓过药,你应该就看到过,所有的中药都是放在一个柜子里面,这个柜子有上百个抽屉
老中医开好单子之后,就从会这个柜子里熟练打开各种柜子抓中药,这个柜子就是列表,每一个抽屉就是列表中的元素
一、列表的使用
1.从列表中提取单个元素
定义一个列表,列表中可以放入各种东西,可以是字符串,整数、浮点数,甚至列表中也可以放入列表,无限套娃
可以通过下标索引从列表中提取元素,注意:下标是从0开始的
list1 = [ '小红' , 2 , 66.0 , [6,8] ]
# 0 1 2 3
print(list1[0])
练习:找到那匹狼
list1 = ['苹果','香蕉',['小狗','小猫','七匹狼','小鸟'],'西瓜']
print( )
2.从列表中提取多个元素
这个操作也叫列表的切片
语法:
list[start:stop:step]
start
是切片起始的索引,默认为 0。stop
是切片结束的索引,默认为列表的长度。step
是切片的步长,默认为 1。
规则:
- 左闭右开,就是左边取得到,右边取不到
start
不写时,默认从列表的第一个元素开始,stop
不写时,默认取到列表的最后一个元素
list1 = [0,1,2,3,4]
print(list1[1:3])
print(list1[2:4])
print(list1[2:])
print(list1[:2])
print(list1[:])
print(list1[::2])
注意:列表切片遵循原则:“左包右不包”。
练习:
- 对于列表
letters = ['a', 'b', 'c', 'd', 'e']
,使用切片获取列表的前 3 个元素和后3个元素 - 给定列表
fruits = ["苹果", "香蕉", "雪梨", "橘子"]
,使用列表切片的方法,打印出香蕉和雪梨。 - 已知列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
,请获取列表中所有偶数 - 已知列表
numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
,请获取列表中所有奇数
3.增加元素
list1 = [0,1,2,3,4]
list1.append(5)
print(list1)
练习:
随机生成20位学生的成绩,保存在列表中,成绩范围在0~100分内。
import random
list_score = []
fenshu = random.randint(0,100)
# 剩下的你来写
4.删除元素
pop()
方法会移除并返回列表中指定索引位置的元素
若不指定索引,默认移除并返回列表的最后一个元素
list1 = ['小红','小明','小刚']
list1.pop(1)
print(list1)
5.改变列表中的元素
list1 = [1,2,3,4]
list1[1] = '小明'
print(list1)
案例:
期中考试结束了,很多同学的成绩是不及格的,请你用python实现,将所以低于60分的成绩都改为60分
list_score = [92, 53, 38, 91]
作业:
我现在加大了数据量,又该如何面对?
list_score = [92, 53, 38, 91, 96, 89, 22, 54, 81, 75, 100, 60, 92, 72, 12, 24, 37, 4, 85, 33]
6.获取列表元素的索引
list1 = ['小明','小红','小孩']
print(list1.index('小红'))
7.in和not in
list = [1,2,3,4,5]
a = 1
print(a in list)
print(a not in list)
补充:常用内置函数
1.len()
len()
函数可以返回对象的长度,可以用于多种数据类型。
list1 = [1,2,3]
# 计算数组的长度
print(len(list1))
name = '张三'
# 计算字符串的长度
print(len(name))
2.max()
max()
函数返回数组的最大值
list1 = [1,2,3]
print(max(list1))
3.min()
min()
函数返回数组的最小值
list1 = [1,2,3]
print(min(list1))
4.sum()
sum()
函数返回数组的和
list1 = [1,2,3]
print(sum(list1))
练习:
随机生成20位学生的成绩,保存在列表中,成绩范围在0~100分内。并求平均分数、最高分、最低分、优秀人数,90分以上为优秀。
二、实现剪刀石头布游戏
1.计算机出拳
计算机应该随机选择“剪刀”,“石头”,“布”
random.choice()
从非空的序列里随机挑选一个元素
import random
choice_list = ['石头','剪刀','布']
computer_choice = random.choice(choice_list)
print('计算机出拳:',computer_choice)
2.用户出拳
user_choice = input('请出拳(石头、剪刀、布):') # 请用户输入选择
print('用户出拳:',user_choice)
if user_choice not in choice_list:
print('输入有误,请重新出拳')
但是这样的话,如果输入错误,用户是没有机会重新出拳的
可以通过循环语句实现,使得用户必须输入正确才能退出循环,否则将会一直卡在这一步。
while True:
user_choice = input('请出拳(石头、剪刀、布):') # 请用户输入选择
print('用户出拳:',user_choice)
if user_choice not in choice_list:
print('输入有误,请重新出拳')
else:
break
还有一种方法是这样,这种写法虽然代码量少了,但是不够语义化,不符合正常逻辑,其实不好。
user_choice = ''
while user_choice not in choice_list:
user_choice = input('请出拳(石头、剪刀、布):')
print('输入有误,请重新出拳')
3.判断胜负
import random
#计算机出拳
choice_list = ['石头','剪刀','布']
computer_choice = random.choice(choice_list)
print('计算机出拳:',computer_choice)
#用户出拳
while True:
user_choice = input('请出拳(石头、剪刀、布):') # 请用户输入选择
print('用户出拳:',user_choice)
if user_choice not in choice_list:
print('输入有误,请重新出拳')
else:
break
#判断胜负
if user_choice == computer_choice: # 使用if进行条件判断
print('平局!')
elif (user_choice == '石头' and computer_choice == '剪刀') or(user_choice == '剪刀' and computer_choice == '布') or (user_choice == '布' and computer_choice == '石头'):
print('你赢了!')
else:
print('你输了!')
最后还可以让代码更简洁一点
import random
#计算机出拳
choice_list = ['石头','剪刀','布']
computer_choice = random.choice(choice_list)
print('计算机出拳:',computer_choice)
#用户出拳
while True:
user_choice = input('请出拳(石头、剪刀、布):') # 请用户输入选择
print('用户出拳:',user_choice)
if user_choice not in choice_list:
print('输入有误,请重新出拳')
else:
break
#判断胜负
if user_choice == computer_choice: # 使用if进行条件判断
print('平局!')
elif user_choice == choice_list[choice_list.index(computer_choice)-1]::
print('你赢了!')
else:
print('你输了!')