全民一起玩Python基础篇第四课:复杂结构初步(列表、对象、模块等)(上)

列表(list)

>>> a=[350,49.23,'锦到黑',103]
# 写在中括号里面,中间用逗号隔开,可以加任意的数据类型
>>> print(a)
[350, 49.23, '锦到黑', 103]
>>> print(a[3])
# 下标从0开始
103
>>> print(a[2])
锦到黑
>>> a[2]
'锦到黑'
>>> print(a[-1])
#倒序插入
103
>>> b=a[2:4]
# 左闭右开的区间
>>> print(b)
['锦到黑', 103]
>>> a[ :4]
# 只给右端点
[350, 49.23, '锦到黑', 103]
>>> a[2:]
# 只给左端点
['锦到黑', 103]

简易的诗词匹配题目

import random

questions =['白日依山尽,黄河入海流',
                    '所守或匪亲,化作狼与豺',
                    '春风桃李花开日,秋雨梧桐叶落时',
                    '冠盖满京华,斯人独憔悴',
                    '会当凌绝顶,一览众山小']
answers=['王之涣','李白','白居易','杜甫','杜甫']
# 列表可以分行书写

while 1==1 :
# ctrl+C 强制退出
    i=random.randint(0,len(questions)-1)
    #0到4闭区间

    s=input('请输入' + questions[i] + '的作者:')

    if s==answers[i]:
        print('答对了')
    else :
        print('答错了!')

在这里插入图片描述

一些列表中的运算符

加号

加号可以用来合并两个列表,但不会改变a和b自身

>>> a=['你好','2020']
>>> b=['太难的一年']
>>> a+b
['你好', '2020', '太难的一年']

乘号

>>> a=['你好','2020']
>>> a*3
['你好', '2020', '你好', '2020', '你好', '2020']

在这里插入图片描述

打印列表中所有元素

用while

import random

questions =['白日依山尽,黄河入海流',
                    '所守或匪亲,化作狼与豺',
                    '春风桃李花开日,秋雨梧桐叶落时',
                    '冠盖满京华,斯人独憔悴',
                    '会当凌绝顶,一览众山小']
answers=['王之涣','李白','白居易','杜甫','杜甫']
# 列表可以分行书写

i=0

while i<len(questions):
    
    print('题目:',questions[i])
    
    i=i+1

用for循环

questions =['白日依山尽,黄河入海流',
                    '所守或匪亲,化作狼与豺',
                    '春风桃李花开日,秋雨梧桐叶落时',
                    '冠盖满京华,斯人独憔悴',
                    '会当凌绝顶,一览众山小']
for i in questions :
# 这里的i直接对应的列表中的数据,而不是作为列表的一个索引
    print('题目:',i)

for语句读取的是列表数据,所以不能使用
i=i+1以2个步长跳转

Range

Range(m,n)

>>> a=range(3,7)

左闭右开,生成了列表,最后一项n-1
或者偷懒简化为
Range(n),从0到n-1的列表

for i in range(1,10,2):
    print(i)

可以生成步长为2的序列

in操作符

可以用来判断元素是否在列表里面
not in,判断不在里面

answers=['李白','杜甫','白居易']

name=input('人名:')

if name in answers:
    print('在里面')
else :
    print('不在里面')

题目一

请在Python的交互式运行窗口中,完成以下步骤的操作:
手动创建一个列表并赋值给变量(比如x),内容为[17,13,23,3,2,5,11,7,19]。
使用切片操作,从该列表中截取第3个(下标为2)到第7个(编号为6)的片段,并赋值给另一个变量(比如y)。
将两个列表相加,观察结果(无需赋值给任何变量,直接相加即可)。
将第二个列表乘以4,观察结果。
使用Sum函数和Len函数计算第一个列表的平均值。

>>> x=[17,13,23,3,2,5,11,7,19]
>>> y=x[2:7]
>>> x+y
[17, 13, 23, 3, 2, 5, 11, 7, 19, 23, 3, 2, 5, 11]
>>> y=y*2
>>> print(y)
[23, 3, 2, 5, 11, 23, 3, 2, 5, 11]
>>> print(sum(x)/(len(x)+1))
# len后面要+1
10.0
>>> 

题目二

请编写一个程序,能够自动从 “张三、李四、王五、赵六、田七、刘八” 中随机选择一个人,作为中奖者显示在屏幕上。代码要求如下:
使用列表存放人名,人名和数量可以自己随意安排。
尽可能让程序具备灵活性,比如向列表中添加、删除人名时,不需要修改与列表无关的代码。
有兴趣的同学可以搜索一下 random模块的choice函数,然后重写本程序。

import random
answers=['李白','杜甫','白居易']
a=random.randint(0,len(answers)-1)
print('获奖者是',answers[a])

请使用for循环和range扩充“练习2”中的抽奖程序,使之每次运行均能连续输出3个中奖者名字(允许一人重复获奖)。输出效果类似下面的形式:
1等奖:王五
2等奖:田七
3等奖:王五

import random
answers=['李白','杜甫','白居易','杜牧','李商隐']
for i in range(3):
    a=random.randint(0,len(answers)-1)
    print('获',i+1,'等奖者是',answers[a])


题目三

请编写程序,使之能够找出两个列表中共同存在的所有元素,并打印在屏幕上。这两个列表可以自己随意指定。
比如,假设在程序中定义了两个列表:[3,5,‘a’,10,9,‘b’] 和 [‘c’,4,3,‘a’] ,那么程序运行结果如下所示:
共同元素包括:
3
a

a=[3,5,'a',10,9,'b']
b=['c',4,3,'a']
print('共同元素有:')
for i in a :
    for k in b :
 
        if k==i:
           print(k)
#或者可以直接写
'''           
for i in a:
  if i in b:
    print(i)
'''

列表对象

向列表添加元素可以用两种方法
一个是给自己赋值

>>> a=[1,2,3]
>>> a=a+[4]
>>> print(a)
[1, 2, 3, 4]

另一个是用列表对象的属性

>>> a=[1,2]
>>> a.append(4)
>>> print(a)
[1, 2, 4]

或者是用extend
常用的几个类对象的方法

count

>>> x=[1,3,4,3,1,1,1]
>>> x.count(1)
4

index

返回某个元素第一次出现的位置
用于查找

>>> x=[1,3,4,3,1,1,1]
>>> x.index(3)
1

找到所有符合要求的

list1=[123,123,123,456,123]
i = 0
for each in list1:
    if each==123:
        print(list1.index(each,i))
        i+=1

pop和remove、DEL

pop删除某一下标的元素,remove直接针对元素

>>> x=[1,3,4,3,1,1,1]
>>> x.pop(4)
1
>>> print(x)
[1, 3, 4, 3, 1, 1]
[1, 3, 4, 3, 1, 1]
>>> x.remove(3)
>>> print(x)
[1, 4, 3, 1, 1]
del member[1]
#也可以直接删整个列表
del member

insert 和 reverse

>>> x.insert(0,100)
>>> print(x)
[100, 1, 4, 3, 1, 1]
>>> x.reverse()
>>> print(x)
[1, 1, 3, 4, 1, 100]

sort

默认从小到大

>>> x.sort()
>>> print(x)
[1, 1, 1, 3, 4, 100]

可以在Python交互式窗口中输入 help(类名或对象) ,即可查看该类的简要文档说明(如果存在)。

题目一

请在Python的交互式运行窗口中,完成以下步骤的操作:
手动创建一个列表并赋值给变量(比如x),内容为 [‘周一’,‘Mon’,‘周二’,‘Tue’,‘周三’,‘Wed’,‘周四’,‘Thu’,‘周五’,‘Fri’,‘周六’,‘Sat’,‘周日’,‘Sun’] 。
使用切片操作,从该列表中截取出所有中文星期名称,构成一个新列表。
同上,使用切片从该列表中截取出所有英文星期名称,构成一个新列表。
观察原列表内容是否发生变化。


>>> x= ['周一','Mon','周二','Tue','周三','Wed','周四','Thu','周五','Fri','周六','Sat','周日','Sun']
>>> y=x[0::2]
>>> z=x[1::2]
>>> print(y,z)
['周一', '周二', '周三', '周四', '周五', '周六', '周日'] ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']

题目二

请编写一个程序,运行后允许用户连续录入多个姓名,直到录入 “END” 为止。然后该程序能够把用户输入的所有姓名显示在屏幕上,并告知一共输入了多少名字。
具体效果示例如下:

>>> ==== RESTART: D:/Demo/test.py =====
请输入一个姓名:张三
请输入一个姓名:李四
请输入一个姓名:王五
请输入一个姓名:赵六
请输入一个姓名:END
您一共输入了 4 个姓名:
张三
李四
王五
 赵六
>>> 
a=[]

while True:
    x=input('请输入一个姓名')
    if x=='END':
        break
    a.append(x)
    
print('一共输入了',len(a),'个姓名')
for j in a:
    print(j)

题目三

请在 “作业2:录入姓名” 的基础上改编程序,即:运行后允许用户连续录入多个姓名,直到录入 “END” 为止。然后该程序能够从录入的名字中随机抽取一人,作为中奖者显示在屏幕上。
具体效果示例如下:

>>> ==== RESTART: D:/Demo/test.py =====
请输入一个姓名:张三
请输入一个姓名:李四
请输入一个姓名:王五
请输入一个姓名:赵六
请输入一个姓名:END
您一共输入了 4 个姓名,其中中奖者为:
王五
>>> 
import random
a=[]

while True:
    x=input('请输入一个姓名')
    if x=='END':
        break
    a.append(x)
i=len(a)   
print('一共输入了',i,'个姓名')
for j in a:
    print(j)
c=random.randint(0,i-1)
# random是闭区间
print('其中中奖的同学为',a[c])

题目四

运行后允许用户连续录入多个姓名,直到录入 “END” 为止。然后该程序能够从录入的名字中随机抽取占总数 1/2 的个人,作为中奖者显示在屏幕上。但是请注意:不允许重复抽奖,每个人名只能被抽中一次!
具体效果示例如下:

>>> ==== RESTART: D:/Demo/test.py =====
请输入一个姓名:张三
请输入一个姓名:李四
请输入一个姓名:王五
请输入一个姓名:赵六
请输入一个姓名:田七
请输入一个姓名:刘八
请输入一个姓名:END
您一共输入了 6 个姓名,其中中奖者为:
王五
田七
李四
>>> 
import random

name_list = []

s = ''
while s!='END':
  s = input('请输入一个姓名:')
  name_list.append( s )

name_list.remove('END')

t = len(name_list)

print( '共输入',t , '个姓名,中奖者是:')

for i in range(0,t//2):
# //表示整除
  x = random.randint(0,len(name_list)-1)

  print( name_list[x] )

  name_list.pop(x)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值