Python基础语法2—剪刀石头布


概念

这个案例主要是带大家学习列表相关的知识

之前学习了三种基本数据类型,整数浮点数字符串

如果使用基本数据类型,用起来确实简单,就像一个装东西的盒子一样,往里面放东西,取东西。

但是如果我有一堆东西,那我就需要一堆变量来存放,太麻烦了,所以这种情况就要使用列表

如果你去找老中医抓过药,你应该就看到过,所有的中药都是放在一个柜子里面,这个柜子有上百个抽屉

老中医开好单子之后,就从会这个柜子里熟练打开各种柜子抓中药,这个柜子就是列表,每一个抽屉就是列表中的元素

一、列表的使用

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。

规则:

  1. 左闭右开,就是左边取得到,右边取不到
  2. 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])

注意:列表切片遵循原则:“左包右不包”。

练习:

  1. 对于列表 letters = ['a', 'b', 'c', 'd', 'e'],使用切片获取列表的前 3 个元素和后3个元素
  2. 给定列表 fruits = ["苹果", "香蕉", "雪梨", "橘子"],使用列表切片的方法,打印出香蕉和雪梨。
  3. 已知列表 numbers = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10],请获取列表中所有偶数
  4. 已知列表 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('你输了!')

文章作者: 彭韦浩
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 彭韦浩 !
  目录