python第六课列表

杂记

  • 序列类型包括字符串(str)、列表(list)、元组(tuple)、集合(set)和字典(dic),字符串也是个序列。

拼接

li = [1, 2, 3, 4]
# 在头部拼接
li[:0] = [0] # [0, 1, 2, 3, 4]
# 在末尾拼接
li[len(li):] = [5,7] # [0, 1, 2, 3, 4, 5, 7]
# 在中部拼接
li[6:6] = [6] # [0, 1, 2, 3, 4, 5, 6, 7]
# 给切片赋值的必须是可迭代对象
li[-1:-1] = 6 # (报错,TypeError: can only assign an iterable)
li[:0] = (9,) #  [9, 0, 1, 2, 3, 4, 5, 6, 7],#元组必须有逗号
li[:0] = range(3) #  [0, 1, 2, 9, 0, 1, 2, 3, 4, 5, 6, 7]

list.append与list.extend的区别

append是整建制地追加,extend是个体化扩编。

>>> lst = [1,2,3]
>>> lst.append(["qiwsir","github"])
>>> lst
[1, 2, 3, ['qiwsir', 'github']]  #append的结果
>>> len(lst)
4

>>> lst2 = [1,2,3]
>>> lst2.extend(["qiwsir","github"])
>>> lst2
[1, 2, 3, 'qiwsir', 'github']   #extend的结果
>>> len(lst2)
5

eval()函数

>>>x = 7
>>> eval( '3 * x' )
21
>>> eval('pow(2,2)')
4
>>> eval('2 + 2')
4
>>> n=81
>>> eval("n + 4")
85

作业

1 列表反转

现在有a = [1,2,3,4,5,6]用多种方式实现列表的反转([6,5,4,3,2,1)并写出推导过程

#方法一,list.reverse()列表反转


a = [1,2,3,4,5,6]
a.reverse()
print(a)
'''
[6, 5, 4, 3, 2, 1]

#方法二,list.sort(reverse=True)列表降序排列

a = [1,2,3,4,5,6]
a.sort(reverse=True)
print(a)
'''
[6, 5, 4, 3, 2, 1]
'''

#方法三,list[::-1]列表负索引切片

a = [1,2,3,4,5,6]
print(a[::-1])
'''
[6, 5, 4, 3, 2, 1]
'''

#方法四 list(reversed(x))函数返回一个反转的迭代器,调用时需要使用list()

a = [1,2,3,4,5,6]
print(list(reversed(a)))
'''
[6, 5, 4, 3, 2, 1]
'''

#方法五,自定义函数,逆索引取值,循环加入列表


a = [1,2,3,4,5,6]
def reverse_list1(x):
    ret_list1=[]
    i=1
    while i <= len(x):
        ret_list1.append(x[-i])
        i += 1
    return ret_list1
print(reverse_list1(a))
'''
[6, 5, 4, 3, 2, 1]
'''

#方法六:自定义函数,数学算法

a = [1,2,3,4,5,6]
def reverse_list2(x):
    ret_list=[]
    i=0
    while i < len(x):
        ret_list.append(max(x)+min(x)-x[i])
        i += 1
    return ret_list
print(reverse_list2(a))
'''
[6, 5, 4, 3, 2, 1]
'''

2 猜数字

给用户9次机会猜1 - 10个数字随机来猜数字,如果随机的数字和用户输入的数字一致则表示正确,如果不一致则表示错误,最终结果要求用户怎么也猜不对

import random
i=0
list1=[1,2,3,4,5,6,7,8,9,10]
while i<9:
    if i==0:
        print('1-10 猜数字游戏,您有9次机会')
    else:
        print('您还有{}次机会'.format(9-i))
    i += 1
    player=int(input("请在1-10内选一个数字输入:"))
    list1.remove(player)
    computer=random.choice(list1)
    print('不好意思,您猜错了,加油哦')
    print('---------------------')
print('计算机选择的时:{}'.format(list1[0]))

3获取内容相同的元素

有两个列表list1 = [11,22,33],list2 = [22,33,44]获取内容相同的元素
#方法一:while循环

list1 = [11,22,33]
list2 = [22,33,44]
list3 =[]
i=0
while i<len(list1):
      if list1[i] in list2:
         list3.append(list1[i])
      i+=1
print(list3)
'''
[22, 33]
'''

#方法二:for循环

list1 = [11,22,33]
list2 = [22,33,44]
list3 =[]
for i in list1:
    if i in list2:
        list3.append(i)
print(list3)
'''
[22, 33]
'''

#方法三:转化为集合,求交集

list1 = [11,22,33]
list2 = [22,33,44]
set1 = set(list1)
set2 = set(list2)
set3 = set1&set2
list3 = list(set3)
list3.reverse()  #注意这里要REVERSE 一下
print(list3)
'''
[22, 33]
'''

4 教室分配

  • 4.1 现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中,
import random
teacher=[]
teacher[::]="赵钱孙李周吴郑王"
i=0
while i<9:
    room= [[], [], []]
    for name in teacher:
        num = random.randint(0, 2)
        room[num].append(name)
    print('第{}次随机分配'.format(i+1))
    print(room)
    print('--------------')
    i+=1
'''

  • 4.2教师分配升级版

现在有8位老师,3个办公室,要求将8位老师随机的分配到三个办公室中,要求,每个办公室至少有一位老师

import random
teacher=[]
teacher[::]="赵钱孙李周吴郑王"
i=0
while i<10:
    room= [[], [], []]
    for name in teacher:
        num = random.randint(0, 2)
        room[num].append(name)
    if room[0]==[] or room[1]==[] or room[2]==[]:#判断如果三个教室中有任何一个空教室
       continue#跳过循环
    print('第{}次随机分配'.format(i+1))
    print(room)
    print('--------------')
    i+=1

#伪随机分配(前三次分配固定了)

import random
teacher=[]
teacher[::]="赵钱孙李周吴郑王"
i=0
while i<9:
    room= [[], [], []]
    t_time=0
    for name in teacher:
        if t_time<=2:
            room[t_time].append(name)
        else:
            num = random.randint(0, 2)
            room[num].append(name)
        t_time+=1
    print('第{}次随机分配'.format(i+1))
    print(room)
    print('--------------')
    i+=1

‘’’

5账号密码验证

要求从键盘输入用户名和密码,校验格式是否符合规则,如果不符合,打印出不符合的原因,并提示重新输入
-用户名长度6-20,用户名必须以字母开头
-密码长度至少6位,不能为纯数字,不能有空格

def user_check():
    global user_name
    user_name=input('请输入用户名:')
    #print(user_name[0].encode())
    #print(user_name[0].encode().isalpha())
    if len(user_name) not in range(6, 21):
        print('用户名长度限制6-20,请重新输入')
        user_check()
    elif user_name[0].encode().isalpha() == False:
        print('首字母必须为字母,请重新输入')
        user_check()
    else:
        pw_check()
def pw_check():
    global user_pw
    user_pw=input('请输入密码:')
    if len(user_pw) <6:
        print('密码长度至少6位,请重新输入')
        pw_check()
    elif user_pw.isdigit():
        print('密码不能为纯数字,请重新输入')
        pw_check()
    elif ' ' in user_pw:
        print('密码不能有空格,请重新输入')
        pw_check()
    else:
        print('恭喜您,注册成功!\n您的用户名是:{},密码是:{}'.format(user_name,user_pw))

user_check()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值