python 入门笔记[语法基础(下)]

时间:2022-07-25
本文章向大家介绍python 入门笔记[语法基础(下)],主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

前言:这部分是基本语法的重点,也是py入门的一小步而已

前瞻篇

目录

1. 列表修改查找元素

修改查找元素   对列表的主要操作是增删改查
a=[1,2,3,4,5,6]
print(a.index(5))  输出4,表示5在这个列表中,第一次出现的下标为4,
对于index方法而言,如果要查找的元素在列表中出现了多次,就显示第一次出现的下标,并且查找时要保证查找元素在列表中,否则会报错
value=a[1]
print(value)
print(a.count(2))# count 方法表示查找指定元素出现次数,与index方法不同的是,如果要查找的元素没有出现则输出零,不会报错
一个小技巧
e.g a=["周一","周二","周三","周四","周六","周五","周日"]
#很明显列表中周六和周五位置反了,我们现在要交换它们
a[4],a[5]=a[5],a[4] #这样操作即可,和C语言表达有所差别
赋值也可这样
a,b,c=1,2,3
s="周一,周二,周三,周四,周六,周五,周日"
a=s.split(",")
print(a)# 形成的a是一个列表,这样就实现了字符串转列表
#我们还可以将列表转成字符串
a1="*".join(a) #前面可填连接的填充物,不填则“”,注意使用join方法必须保证a列表中所有元素是同一类型
print(a1)

2. 增添 删除元素

增加元素
a=[1,2,3,4]
a.append(5)#往列表末尾加入指定元素,但要注意只能支持尾插一个元素
a.insert(3,2.45) #insert方法两个参数,第一个是插入的位置,第二个是插入的内容,插入成功后原来位置及以后的元素往后移动,
此外第一个参数也可以超过列表长度-1,这样的话系统默认插在尾部,比如-x,x>列表长度,就相当插在头部
a.extend([5,6,7])#表示在尾部追加一个新列表[5,6,7]
比如b=[5,6,7]  a.extend(b)这样表达也行
也可以追加字符串s例如
s="hello"
a.extend(s)#此时尾部追加的是字符串被拆分开来的各个元素 输出结果[1, 2, 3, 4, 'h', 'e', 'l', 'l', 'o']
可以这样 ,如果不想这样想将hello作为一个独立元素插入到列表中
a.extend([s])#输出[1, 2, 3, 4, 'hello']
print(a)

3. 元组简介

元组(Tuple)简介
元组和列表一样也是一种有序容器
也使用下标索引元素
也可以截取
但它是不可变类型
a=(1,2,3)
print(type(a))#<class 'tuple'>
但元组中只有一个元素是应这样表达
b=1,
或b=(1,)#注意和b=(1)区分,后者系统会将括号看作是优先级的提高
以下是一些元组的常规操作:
a1=a*3
print(a1)
print(len(a1))
print(4 in a1)
print(max(a))
print(min(a))
print(a1.count(3))
分别输出:
(1, 2, 3, 1, 2, 3, 1, 2, 3)
9
False
3
1
3
但是不允许a[x]=xx,a.append(),a.remove()之类操作
此外元组支持这种赋值操作
t=(1,2,3)
a,b,c=t
print(f"t={t},a={a},b={b},c={c}")
#输出:t=(1, 2, 3),a=1,b=2,c=3
回顾以前初学时两个变量赋值操作:
a,b=b,a
对于列表类似有:
t[0],t[1]=t[1],t[0]
print(t)
但元组不支持这种操作

4. 列表嵌套

列表嵌套
列表List中可以存放任意类型的元素
整型 小数 bool值 也可以是列表类型 相当于一个大箱子放几个小箱子
e.g
stu1=["小明",95]
stu2=["小红",86]
stu3=["小王",68]
stu=[stu1,stu2,stu3]#[['小明', 95], ['小红', 86], ['小王', 68]]
或这样声明::
stu=[
    ["小明",95],
    ["小红",86],
    ["小王",68]
]
print(stu)
print(stu[0][0])#小明
print(f"{stu[0][0]}的分数为:{stu[0][1]}")#小明的分数为:95

5. 列表简单练习

列表练习
1.创建一个有10个元素的列表,值是[30,31,30,31...]
l=[30,31]*5
2.将下标为0的元素删除
l.pop(0)
3.将下标为1的元素值改为28
l[1]=28
4.在下标为7的位置插入一个元素31
l.insert(7,31)
5.在列表末尾追加2个元素:30,31
l.extend([30,31])
最终结果应该是[31,28,31,30,31,30,31,31,30,31,30,31]
print(l)#[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
提示用户输入一个1~12之间的整数值表示月份,然后在控制台显示用户输入的这个月份有多少天
比如用户输入的数是7,就显示“7 月份有 31 天”
month=input("请输入一个1~12之间的整数值表示月份:")
month=int(month)
print(f"{month} 月份有 {l[month-1]} 天")
此题也可以用if elif语句

6. Range方法

Range方法
l=list(range(x)) 表示生成从0开始到x-1的连续列表
range(end)生成0-end之间的整数,不包含end
range(start,end)生成start-end之间的整数,不包含end
range(start,end,step)生成start-end之间的整数,不包含end,并且每隔step个数字生成一个数字
l=list(range(1,101))
t=tuple(l)
print(f"l的类型是: {type(l)}n{l}")
print(f"t的类型是: {type(t)}n{t}")
l的类型是: <class 'list'>
[1, 2, 3, 4, 5, 6, 7, 8, 9, ....,100]
t的类型是: <class 'tuple'>
(1, 2, 3, 4, 5, 6, 7, 8, 9, ....)
l=list(range(1,100,2))#表示1-100的所有奇数

7. 列表遍历

列表遍历
遍历:依次取出每个元素
for...in..
for item in l:
    print(item)
元组,字符串,range()都可以使用for遍历
l=list(range(101))
for item in l:
    print(item)#依次输出1-100
    l=list(range(101))
for item in "Python":
    print(item)#依次输出P y t h o n 

8. For循环& For练习

for 练习
1.提示用户输入5个数,组成一个列表
l=[]
for i in range(5):
    num=input(f"请输入第{i+1}个数:")
    num=int(num)
    l.append(num)
print(f"输入的五个数是:{l}")
输出:
请输入第1个数:1
请输入第2个数:2
请输入第3个数:3
请输入第4个数:4
请输入第5个数:5
输入的五个数是:[1, 2, 3, 4, 5]
将列表中各个元素的值*2
for i in range(len(l)):
    l[i]*=2
print(f"各个元素的值*2组成的新列表:{l}")
计算新列表中所有元素的和
sum=0
for i in range(len(l)):
    sum+=l[i]
print(f"这个新列表中所有元素和为:{sum}")
2.找出100以内所有7的倍数以及包含7的数,将它们放在一个列表中
l=[]
for i in range(101):
    if i%7==0:
        l.append(i)
    else:
        temp=i
        while(temp):
            k=temp%10
            if(k==7):
                l.append(i)
                break
            temp/=10
print(f"满足条件的元素放在列表{l}")
满足条件的元素放在列表[0, 7, 14, 17, 21, 27, 28, 35, 37, 42, 47, 49, 56, 57, 63, 67, 70, 77, 84, 87, 91, 97, 98]

9. While循环

while循环
最简单的例子:
i=0
while i<10:
    print("balabala")
    i+=1
l=[]
i=''
while  i!='q':
    i=input("请输入待办事项(扣q退出):")
    l.append(i)
l.pop()
print(l)
或这样声明:
while  1:
    i=input("请输入待办事项(扣q退出):")
    if i=='q':
        break
    l.append(i)
print(l)
Python和C系列语言的一个重要区别:
for i in range(4):
系统不能容忍你空循环,会报错,这点和C语言完全不同,但是我们如果只想留着这个循环(比如日后再添加啥的),需要这样做:
    pass #可以保证代码完整性

10. 列表推导式

列表推导式
列表推导式可以快速构建新的数据序列
[表达式 for 变量 in 列表]
[表达式 for 变量 in 列表 if 筛选条件]
l1=[1,2,3,4,5]
l2=[i*2 for i in l1]#输出[2, 4, 6, 8, 10] i*2是联系l1和l2之间的关系式,即l2中每一个元素是l1中每一个对应元素的2倍
l2=[i for i in range(10)if not i%2 ]#输出[0, 2, 4, 6, 8]
也可以这样转换列表中的数据类型:
l2=[str(i) for i in range(10)]#输出['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
print(l2)
由于字符串也是一种序列结构,我们也可以遍历字符串
l=[i for i in 'hello']#输出['h', 'e', 'l', 'l', 'o']
l=[i.upper() for i in 'hello']#输出['H', 'E', 'L', 'L', 'O']
l=[i.upper() for i in 'hello' if i!='h']#输出['E', 'L', 'L', 'O']
print(l)

11. 推导式练习

推导式练习
1.获取['Food','Moon','Loop']中每个元素的首字母,并将这三个首字母组成一个新的字符串
l=['Food','Moon','Loop']
l1=[i[0] for i in l]
print(l1)
s=''.join(l1)
print(s)
运行结果:
['F', 'M', 'L']
FML
2.找出同时出现在l1和l2中的元素
l1=[2,4,6,8,10,12]
l2=[3,6,9,12]
l=[i for i in l1 if i in l2]
print(l) #输出:[6, 12]
3.将[1,3,5,7,9]中所有元素打印在控制台上
l3=[1,3,5,7,9]
解一:[print(i) for i in l3]
输出:
1
3
5
7
9
解二:
for i in l3:
    print(i)

12. 循环嵌套

循环嵌套
最简单的例子:
for i in range(3):
    for j in range(5):
        print(f"i={i},j={j}")
i=0,j=0 i=0,j=1 i=0,j=2 i=0,j=3 i=0,j=4 i=1,j=0 i=1,j=1 i=1,j=2 i=1,j=3 i=1,j=4
i=2,j=0 i=2,j=1 i=2,j=2 i=2,j=3 i=2,j=4
创建二维列表
l=[]
for i in range(3):
    item=[]
    l.append(item)
    for j in range(5):
        item.append(j)
print(l)#[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
#二维列表元素查找:
for i in l:
    for j in i:
        print(j)#结果就是依次输出
# 套路就是一层套一层
#以上两种都可以用列表推导式各一行解决:
l1=[[j for j in range(5)]for i in range(3)]
print(l1)#[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
[[print(j) for j in i]for i in l]#0 1 2 3 4 0 1 2 3 4 0 1 2 3 4

13. 循环练习

循环练习
1.找到100-1000内最小的水仙花数(水仙花数:每位上数字的3次幂之和等于本身)
for i in range(100,1001):
    a=i%10
    b=i//10%10
    c=i//100%10
    if a**3+b**3+c**3==i:
        print(f"{i}是100-1000内水仙花数")
输出:
153是100-1000内水仙花数
370是100-1000内水仙花数
371是100-1000内水仙花数
407是100-1000内水仙花数

2.找出100以内的所有质数存放在列表中:
l=[]
for i in range(2,101):
    is_prime=True
    j=2
    while(j*j<=i):
        if i%j==0:
            is_prime=False
        j+=1
    if(is_prime):
        l.append(i)
print(l)#[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

3.打印九九乘法表
for i in range(1,10):
    for j in range(1,10):
        print(f"{i}*{j}={i*j:2d}",end=' ')#格式注意:隔一个空格,一个数字一行,并保证最终结果对齐,我们用:{i*j:2d}
    print("")
1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9
2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
3*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
4*1= 4 4*2= 8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

14. 字典基础

字典基础 可变容器类型 以键值对方式存储 key——value 字典中的键必须是唯一的不能重复
d={}
print(d,type(d))#{} <class 'dict'>
d={"北京":22,"上海":24}#正常声明
d={"北京":22,"北京":24} #错误声明
字典中的键必须是不可变类型 # l=[0,1,2] a={l:22} 错误
查 print(d["北京"])#输出22
改 d["北京"]=20 
增 d["广州"]=23
删 d.pop("北京") 可以用变量来接收  
value=d.pop("北京")
value=key("北京")
查找字典某一键对应的值并不依赖所谓下标而是通过键来查找,因此在字典中并不存在所谓先后顺序之分
如果一次想往字典中添加多个元素,可以使用update方法
d.update({"xx":"xx"}) #{'北京': 22, '上海': 24, 'xx': 'xx'}
如果update方法中要增添元素是已有的,那么顺带更新了所对应的值(即为update中的新值
print(d)
v=d.pop("aa",-1)
print(v)#第二个参数意思是如果要删除的第一个参数不在字典中将第二个参数赋值给v 输出v=-1
同样的操作还有以下两种变式
name=d.get("aa",-1)#第二个参数意思是如果要获取的第一个参数不在字典中将第二个参数赋值给name 输出name=-1
这样有什么好处? 好处在于:如果要查找键不在字典中,程序运行不会崩溃
更进一步,我们还有:
name=d.setdefault("aa",-1)#第二个参数意思是如果要删除的第一个参数不在字典中将第二个参数赋值给name 输出name=-1
且在字典中添加一个新的键值对:“aa”:-1#输出:{'北京': 22, '上海': 24, 'aa': -1}
print(d)
d.clear()
print(d)#输出{}
可以将整个字典作为一个大字符串来看,有以下一种用法:
print("aaa"+str(d))#输出:aaa{'北京': 22, '上海': 24}
可以判断某个键在不在该字典:
print("aa"in d)#输出False,要注意这第一个参数“aa”只能是键
字典的初始化可以分行来写:
c={
    "aa":1,
    "bb":2
}#输出:{'aa': 1, 'bb': 2}
print(c)
注意:之前说过列表的键一定是不可变类型,所以不能以列表作为字典的键,但是可以列表作为字典的值

15. 字典遍历

字典遍历
可迭代对象的概念:允许每次只获取一个元素,可以用for遍历
s=dict(a=1,b=2,c=3)
for i in s:
    print(f"key={i},value={s[i]}")
输出:
key=a,value=1
key=b,value=2
key=c,value=3
还有以下三种方式:
for i in s.keys():
    print(f"key={i}")
输出:
key=a
key=b
key=c
for i in s.values():
    print(f"value={i}")
输出:
value=1
value=2
value=3
#以上两种方式i表示s的key和s的value
第三种遍历方法:
for k,v in s.items():
    print(f"key={k},value={v}")
输出:
key=a,value=1
key=b,value=2
key=c,value=3
l=list(s.keys())
print(l)
t=tuple(s.values())
print(t)
输出:
['a', 'b', 'c']
(1, 2, 3)
字典和列表或字典嵌套的实例:
s=dict(a=[1,2,3],b={"1":100,"2":200},c=3)
print(s)#{'a': [1, 2, 3], 'b': {'1': 100, '2': 200}, 'c': 3}
print(s["b"]["1"]) #输出100
print(s["a"][2]) #输出3
注意:第一个下标是列表或字典的话要用""或''
第二个下标:
如果是列表的下标,则不用单引号或双引号
字典的话则要用
可参看我举的两个例子

最后献上全部源码

import math


# my_string="hello world!"
# print(int (len(my_string)))  #输出字符串长度
# index=my_string.find("888")
# print(int (index))  #如果子串在原串中匹配,返回原串中子串第一个字符的下标,找不到系统则报错
# c=my_string.count("l")
# print(c)  #记录找到子串的次数,如果没出现则为零
# new_string=my_string.replace("ello","*") #两个参数,第一个是要变换的字符,第二个是要换上去的字符
# print(new_string)
# print("h"in my_string) #in 可表示某个字符串是否包含在原串中,返回值为布尔值true false
# print("h" not in my_string)  #同样还有not in
# my_string="123,456,789"
# sub_my_string=my_string.split(",")
# print(sub_my_string) #split 意为分割,括号内参数含义是分割标志 sub_my_string=["123","456","789"],为列表类型



# F-String(python 3.6+)
# name ='老王'
# age=18
# result="你好"+name+","+"你今年已经"+str(age)+"岁了!"
# result=f"你好{name},你今年已经{age}岁了!"  #python3.6版本以上才可使用

# format()
# result="你好{0},你今年已经{1}岁了!".format(name,age)

# %(已弃用)
# result="你好%s,你今年已经%d岁了!" %(name,age)
# [(填充)对齐] [符号] [宽度] [.精度] [类型] <左对齐,>右对齐,^ 居中对齐 
# pi=255
# 表示成百分制形式
# result=f"圆周率{pi:#x}是一个无限不循环小数"
# 表示成其他进制的数值
# print(result)

#关系运算 结果为bool值
'''
a=1
result=a==6
print(result)
'''
#print(12=="12")
# print('a'>'A')
# 0 1 2 .....<A B C ......Z<a b c d ..... z


#print(True or False)
# print(not 2>1)

'''
html="""
<html>
<head>
</head>
</html>"""
print(html)
'''

'''
优先级 
1.**
2.* / % //
3.+ -
4.> < >= <= == !=
5.and or not
6.=

'''

#result= 1 + 2**2 * 3>=12 - 4 / 2 and 'Apple' >= 'Car' 
#print(result)
# false

 #  if  语句练习
'''
要求实现,用户从终端输入一个数并接收,判断是不是偶数
'''
'''
num=(input("请输入一个整数:"))
num=int (num)
if num%2==0 :
    print(f"你输入的数是{num},它是一个偶数")
    if num % 3 ==0 :
        print(f"{num}还可以被3整除!")
    else :
     print(f"{num}不可以被3整除。")      
else:
    print(f"你输入的数是{num},它是一个奇数")
print("End")
'''

# elif 语句练习
# score=input("请输入分数(0-100)")
# if  score.isdigit():  #判断字符串是否由数字构成,如果是,则返回true  else false
#     score=int(score)

#     根据分数确定等级
#     100 S
#     90-99 A
#     80-89 B
#     70-79 C     
#     60-69 D  
#     0-60  E  

#     if 0<=score<=100:
#         if score==100 :
#             print("S")
#         elif score>=90:
#             print("A")
#         elif score>=80:
#             print("B")
#         elif score>=70:
#             print("C")
#         elif score>=60:
#             print("D")
#         else:
#             print("E")
# else:
#     print("你输入有误!")


# #提示用户输入一个月份,判断这一年是不是闰年
# year=input("请输入一个有效的年份:")
# if year.isdigit():
#     year=int(year)
#     if(year%400==0 or(year%4==0 and year%100)):
#         print(f"{year}是闰年!")
#     else :
#         print(f"{year}是平年!")

# #提示用户输入一个1-99999之间的整数,依次显示这个数各个数位上的数值(从小到大)
# num=input("请输入一个有效的数字:")
# if num.isdigit():
#     num=int(num)
#     while(num):
#         print(num%10)
#         num//=10


#设计一个剪刀石头布的猜拳游戏
# 1-石头
# 2-剪刀
# 3-布
# import random #生成随机数
# system_number=random.randint(1,3)
# user_number=input("请输入一个有效数值:n1.剪刀n2.石头n3.布")
# user_number=int(user_number)
# if(user_number==system_number):
#     print(f"system_number是{system_number},your number是{user_number},平局")
# else:
#     if((user_number>system_number and  not (system_number==1 and user_number==3))or (system_number==3 and user_number==1)):
#         print(f"system_number是{system_number},your number是{user_number},you win!")
#     else :
#         print(f"system_number是{system_number},your number是{user_number},you lose!")


# a=[] #空列表,列表是python中最基础的数据结构
# 列表下标从零开始,使用下标获取元素 my_list[x]
# 也支持负数下标  my_list[-1]
# 可以使用[start:end:step]对列表进行截取 my_list[1:4:1]表示对列表从一到四截取,步长为一
# b=[1,3.14,"h",True] #布尔值True首字母要大写,False 同理
# print(type(b))  #<class "list">
# 明白字符串和列表的一个重大区别:字符串不可变,不支持修改操作,列表却能
# eg.
# c="hello"
# c[0]="k"# 错误,字符串是不可变类型
# b[0]="hi"
# print(b) #控制台输出['hi', 3.14, 'h', True]
# 倒序输出列表和倒序输出字符串的方法一样
# print(b[::-1])

# a=[1,2,3,4]
# if 5 in a:
#     print(f"{a}里包含这个元素")
# else:
#     print(f"{a}里没有这个元素")
# 列表中最后一个元素的正数下标:列表长度-1
# count=len(a)
# print(count)
# b=["a","b","c"]  #列表合并操作
# new_list=a+b
# print(new_list)
# c=a*3
# print(c) #输出[1, 2, 3, 4, 1, 2, 3, 4, 1, 2, 3, 4]
# 列表反转操作:两种方法 
# 1.可以print(a[::-1])
# 2.a.reverse
# e.g
# a.reverse() #不是reverse(a)
# print(a) #需注意a.reverse不需要新的变量来接收!
# max_value=max(a),min_value=min(a)#获取列表中最大元素:当然前提是列表元素是同一类型的数值,如同整型,浮点型,当然全是字符串也可以比较
# 对列表排序
# a.sort() 
# print(a) #对列表排序:当然前提是列表元素是同一类型的数值,如同整型,浮点型,当然全是字符串也可以比较
# 诸如变量名.()我们习惯称为方法
# 如a.sort(),a.reverse()
# 另一类是 len(a),min(a),max(a)我们称为函数

# 修改查找元素   对列表的主要操作是增删改查
# a=[1,2,3,4,5,6]
# print(a.index(5))  输出4,表示5在这个列表中,第一次出现的下标为4,
# 对于index方法而言,如果要查找的元素在列表中出现了多次,就显示第一次出现的下标,并且查找时要保证查找元素在列表中,否则会报错
# value=a[1]
# print(value)
# print(a.count(2))# count 方法表示查找指定元素出现次数,与index方法不同的是,如果要查找的元素没有出现则输出零,不会报错
# 一个小技巧
# e.g a=["周一","周二","周三","周四","周六","周五","周日"]
# #很明显列表中周六和周五位置反了,我们现在要交换它们
# a[4],a[5]=a[5],a[4] #这样操作即可,和C语言表达有所差别
# 赋值也可这样
# a,b,c=1,2,3
# s="周一,周二,周三,周四,周六,周五,周日"
# a=s.split(",")
# print(a)# 形成的a是一个列表,这样就实现了字符串转列表
# #我们还可以将列表转成字符串
# a1="*".join(a) #前面可填连接的填充物,不填则“”,注意使用join方法必须保证a列表中所有元素是同一类型
# print(a1)

# 增加元素
# a=[1,2,3,4]
# a.append(5)#往列表末尾加入指定元素,但要注意只能支持尾插一个元素
# a.insert(3,2.45) #insert方法两个参数,第一个是插入的位置,第二个是插入的内容,插入成功后原来位置及以后的元素往后移动,
# 此外第一个参数也可以超过列表长度-1,这样的话系统默认插在尾部,比如-x,x>列表长度,就相当插在头部
# a.extend([5,6,7])#表示在尾部追加一个新列表[5,6,7]
# 比如b=[5,6,7]  a.extend(b)这样表达也行
# 也可以追加字符串s例如
# s="hello"
# a.extend(s)#此时尾部追加的是字符串被拆分开来的各个元素 输出结果[1, 2, 3, 4, 'h', 'e', 'l', 'l', 'o']
# 可以这样 ,如果不想这样想将hello作为一个独立元素插入到列表中
# a.extend([s])#输出[1, 2, 3, 4, 'hello']
# print(a)

#删除元素
#a=[1,3,5,7,9]
#a.pop() #输出[1, 3, 5, 7],弹出最后一个元素,此操作也可以用变量来接收
# value=a.pop() #输出9
#value=a.pop(2) #表示弹出列表下标为2的指定元素
# 也可以用变量接收弹出指定元素,
# 但要注意几点:1.需要唯一参数下标,且你给出的下标不能越界,(可以使用负数下标,例如a.pop(-1)表示弹出最后一个元素)
# print(value)
# 删除元素也可以用del操作
# del a[-2]#表示删除倒数第二个元素,但del操作不支持用变量接收
# print(a)#输出[1, 3, 5, 9]

# 字典基础 可变容器类型 以键值对方式存储 key——value 字典中的键必须是唯一的不能重复
# d={}
# print(d,type(d))#{} <class 'dict'>
# d={"北京":22,"上海":24}#正常声明
# d={"北京":22,"北京":24} #错误声明
# 字典中的键必须是不可变类型 # l=[0,1,2] a={l:22} 错误
# 查 print(d["北京"])#输出22
# 改 d["北京"]=20 
# 增 d["广州"]=23
# 删 d.pop("北京") 可以用变量来接收  
# value=d.pop("北京")
# value=key("北京")
# 查找字典某一键对应的值并不依赖所谓下标而是通过键来查找,因此在字典中并不存在所谓先后顺序之分
# 如果一次想往字典中添加多个元素,可以使用update方法
# d.update({"xx":"xx"}) #{'北京': 22, '上海': 24, 'xx': 'xx'}
# 如果update方法中要增添元素是已有的,那么顺带更新了所对应的值(即为update中的新值
# print(d)
# v=d.pop("aa",-1)
# print(v)#第二个参数意思是如果要删除的第一个参数不在字典中将第二个参数赋值给v 输出v=-1
# 同样的操作还有以下两种变式
# name=d.get("aa",-1)#第二个参数意思是如果要获取的第一个参数不在字典中将第二个参数赋值给name 输出name=-1
# 这样有什么好处? 好处在于:如果要查找键不在字典中,程序运行不会崩溃
# 更进一步,我们还有:
# name=d.setdefault("aa",-1)#第二个参数意思是如果要删除的第一个参数不在字典中将第二个参数赋值给name 输出name=-1
# 且在字典中添加一个新的键值对:“aa”:-1#输出:{'北京': 22, '上海': 24, 'aa': -1}
# print(d)
# d.clear()
# print(d)#输出{}
# 可以将整个字典作为一个大字符串来看,有以下一种用法:
# print("aaa"+str(d))#输出:aaa{'北京': 22, '上海': 24}
# 可以判断某个键在不在该字典:
# print("aa"in d)#输出False,要注意这第一个参数“aa”只能是键
# 字典的初始化可以分行来写:
# c={
#     "aa":1,
#     "bb":2
# }#输出:{'aa': 1, 'bb': 2}
# print(c)
# 注意:之前说过列表的键一定是不可变类型,所以不能以列表作为字典的键,但是可以列表作为字典的值




# 字典遍历
# 可迭代对象的概念:允许每次只获取一个元素,可以用for遍历
# s=dict(a=1,b=2,c=3)
# for i in s:
#     print(f"key={i},value={s[i]}")
# 输出:
# key=a,value=1
# key=b,value=2
# key=c,value=3
# 还有以下三种方式:
# for i in s.keys():
#     print(f"key={i}")
# 输出:
# key=a
# key=b
# key=c
# for i in s.values():
#     print(f"value={i}")
# 输出:
# value=1
# value=2
# value=3
# #以上两种方式i表示s的key和s的value
# 第三种遍历方法:
# for k,v in s.items():
#     print(f"key={k},value={v}")
# 输出:
# key=a,value=1
# key=b,value=2
# key=c,value=3
# l=list(s.keys())
# print(l)
# t=tuple(s.values())
# print(t)
# 输出:
# ['a', 'b', 'c']
# (1, 2, 3)
# 字典和列表或字典嵌套的实例:
# s=dict(a=[1,2,3],b={"1":100,"2":200},c=3)
# print(s)#{'a': [1, 2, 3], 'b': {'1': 100, '2': 200}, 'c': 3}
# print(s["b"]["1"]) #输出100
# print(s["a"][2]) #输出3
# 注意:第一个下标是列表或字典的话要用""或''
# 第二个下标:
# 如果是列表的下标,则不用单引号或双引号
# 字典的话则要用
# 可参看我上面举的两个例子

# 列表推导式
# 列表推导式可以快速构建新的数据序列
# [表达式 for 变量 in 列表]
# [表达式 for 变量 in 列表 if 筛选条件]
# l1=[1,2,3,4,5]
# l2=[i*2 for i in l1]#输出[2, 4, 6, 8, 10] i*2是联系l1和l2之间的关系式,即l2中每一个元素是l1中每一个对应元素的2倍
# l2=[i for i in range(10)if not i%2 ]#输出[0, 2, 4, 6, 8]
# 也可以这样转换列表中的数据类型:
# l2=[str(i) for i in range(10)]#输出['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
# print(l2)
# 由于字符串也是一种序列结构,我们也可以遍历字符串
# l=[i for i in 'hello']#输出['h', 'e', 'l', 'l', 'o']
# l=[i.upper() for i in 'hello']#输出['H', 'E', 'L', 'L', 'O']
# l=[i.upper() for i in 'hello' if i!='h']#输出['E', 'L', 'L', 'O']
# print(l)





# 推导式练习
# 1.获取['Food','Moon','Loop']中每个元素的首字母,并将这三个首字母组成一个新的字符串
# l=['Food','Moon','Loop']
# l1=[i[0] for i in l]
# print(l1)
# s=''.join(l1)
# print(s)
# 运行结果:
# ['F', 'M', 'L']
# FML
# 2.找出同时出现在l1和l2中的元素
# l1=[2,4,6,8,10,12]
# l2=[3,6,9,12]
# l=[i for i in l1 if i in l2]
# print(l) #输出:[6, 12]
# 3.将[1,3,5,7,9]中所有元素打印在控制台上
# l3=[1,3,5,7,9]
# 解一:[print(i) for i in l3]
# 输出:
# 1
# 3
# 5
# 7
# 9
# 解二:
# for i in l3:
#     print(i)



# 元组(Tuple)简介
# 元组和列表一样也是一种有序容器
# 也使用下标索引元素
# 也可以截取
# 但它是不可变类型
# a=(1,2,3)
# print(type(a))#<class 'tuple'>
# 但元组中只有一个元素是应这样表达
# b=1,
# 或b=(1,)#注意和b=(1)区分,后者系统会将括号看作是优先级的提高
# 以下是一些元组的常规操作:
# a1=a*3
# print(a1)
# print(len(a1))
# print(4 in a1)
# print(max(a))
# print(min(a))
# print(a1.count(3))
# 分别输出:
# (1, 2, 3, 1, 2, 3, 1, 2, 3)
# 9
# False
# 3
# 1
# 3
# 但是不允许a[x]=xx,a.append(),a.remove()之类操作
# 此外元组支持这种赋值操作
# t=(1,2,3)
# a,b,c=t
# print(f"t={t},a={a},b={b},c={c}")
# #输出:t=(1, 2, 3),a=1,b=2,c=3
# 回顾以前初学时两个变量赋值操作:
# a,b=b,a
# 对于列表类似有:
# t[0],t[1]=t[1],t[0]
# print(t)
# 但元组不支持这种操作



# 列表嵌套
# 列表List中可以存放任意类型的元素
# 整型 小数 bool值 也可以是列表类型 相当于一个大箱子放几个小箱子
# e.g
# stu1=["小明",95]
# stu2=["小红",86]
# stu3=["小王",68]
# stu=[stu1,stu2,stu3]#[['小明', 95], ['小红', 86], ['小王', 68]]
# 或这样声明::
# stu=[
#     ["小明",95],
#     ["小红",86],
#     ["小王",68]
# ]
# print(stu)
# print(stu[0][0])#小明
# print(f"{stu[0][0]}的分数为:{stu[0][1]}")#小明的分数为:95



# 列表练习
# 1.创建一个有10个元素的列表,值是[30,31,30,31...]
# l=[30,31]*5
# 2.将下标为0的元素删除
# l.pop(0)
# 3.将下标为1的元素值改为28
# l[1]=28
# 4.在下标为7的位置插入一个元素31
# l.insert(7,31)
# 5.在列表末尾追加2个元素:30,31
# l.extend([30,31])
# 最终结果应该是[31,28,31,30,31,30,31,31,30,31,30,31]
# print(l)#[31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
# 提示用户输入一个1~12之间的整数值表示月份,然后在控制台显示用户输入的这个月份有多少天
# 比如用户输入的数是7,就显示“7 月份有 31 天”
# month=input("请输入一个1~12之间的整数值表示月份:")
# month=int(month)
# print(f"{month} 月份有 {l[month-1]} 天")
# 此题也可以用if elif语句



# Range方法
# l=list(range(x)) 表示生成从0开始到x-1的连续列表
# range(end)生成0-end之间的整数,不包含end
# range(start,end)生成start-end之间的整数,不包含end
# range(start,end,step)生成start-end之间的整数,不包含end,并且每隔step个数字生成一个数字
# l=list(range(1,101))
# t=tuple(l)
# print(f"l的类型是: {type(l)}n{l}")
# print(f"t的类型是: {type(t)}n{t}")
# l的类型是: <class 'list'>
# [1, 2, 3, 4, 5, 6, 7, 8, 9, ....,100]
# t的类型是: <class 'tuple'>
# (1, 2, 3, 4, 5, 6, 7, 8, 9, ....)
# l=list(range(1,100,2))#表示1-100的所有奇数

# 列表遍历
# 遍历:依次取出每个元素
# for...in..
# for item in l:
#     print(item)
# 元组,字符串,range()都可以使用for遍历
# l=list(range(101))#注:range里不可以有可变类型列表
# for item in l:
#     print(item)#依次输出1-100
#     l=list(range(101))
# for item in "Python":
#     print(item)#依次输出P y t h o n 

# for循环
# for in 循环遍历容器类型
# 最简单的例子:
# for item in range(100):
#     print("hello,world!")
# sum=0
# for item in range(1,101):
#     sum+=item
# print(sum)#熟悉的5050
# for item in range(1,101):
#     if item %2==0:
#         sum+=item
# print(sum)#熟悉的2025


# for 练习
# 1.提示用户输入5个数,组成一个列表
# l=[]
# for i in range(5):
#     num=input(f"请输入第{i+1}个数:")
#     num=int(num)
#     l.append(num)
# print(f"输入的五个数是:{l}")
# 输出:
# 请输入第1个数:1
# 请输入第2个数:2
# 请输入第3个数:3
# 请输入第4个数:4
# 请输入第5个数:5
# 输入的五个数是:[1, 2, 3, 4, 5]
# 将列表中各个元素的值*2
# for i in range(len(l)):
#     l[i]*=2
# print(f"各个元素的值*2组成的新列表:{l}")
# 计算新列表中所有元素的和
# sum=0
# for i in range(len(l)):
#     sum+=l[i]
# print(f"这个新列表中所有元素和为:{sum}")
# 2.找出100以内所有7的倍数以及包含7的数,将它们放在一个列表中
# l=[]
# for i in range(101):
#     if i%7==0:
#         l.append(i)
#     else:
#         temp=i
#         while(temp):
#             k=temp%10
#             if(k==7):
#                 l.append(i)
#                 break
#             temp/=10
# print(f"满足条件的元素放在列表{l}")
# 满足条件的元素放在列表[0, 7, 14, 17, 21, 27, 28, 35, 37, 42, 47, 49, 56, 57, 63, 67, 70, 77, 84, 87, 91, 97, 98]

# while循环
# 最简单的例子:
# i=0
# while i<10:
#     print("balabala")
#     i+=1
# l=[]
# i=''
# while  i!='q':
#     i=input("请输入待办事项(扣q退出):")
#     l.append(i)
# l.pop()
# print(l)
# 或这样声明:
# while  1:
#     i=input("请输入待办事项(扣q退出):")
#     if i=='q':
#         break
#     l.append(i)
# print(l)
# Python和C系列语言的一个重要区别:
# for i in range(4):
# 系统不能容忍你空循环,会报错,这点和C语言完全不同,但是我们如果只想留着这个循环(比如日后再添加啥的),需要这样做:
#     pass #可以保证代码完整性


# 循环嵌套
# 最简单的例子:
# for i in range(3):
#     for j in range(5):
#         print(f"i={i},j={j}")
# i=0,j=0 i=0,j=1 i=0,j=2 i=0,j=3 i=0,j=4 i=1,j=0 i=1,j=1 i=1,j=2 i=1,j=3 i=1,j=4
# i=2,j=0 i=2,j=1 i=2,j=2 i=2,j=3 i=2,j=4
# 创建二维列表
# l=[]
# for i in range(3):
#     item=[]
#     l.append(item)
#     for j in range(5):
#         item.append(j)
# print(l)#[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
# #二维列表元素查找:
# for i in l:
#     for j in i:
#         print(j)#结果就是依次输出
# # 套路就是一层套一层
# #以上两种都可以用列表推导式各一行解决:
# l1=[[j for j in range(5)]for i in range(3)]
# print(l1)#[[0, 1, 2, 3, 4], [0, 1, 2, 3, 4], [0, 1, 2, 3, 4]]
# [[print(j) for j in i]for i in l]#0 1 2 3 4 0 1 2 3 4 0 1 2 3 4


# 循环练习
# 1.找到100-1000内最小的水仙花数(水仙花数:每位上数字的3次幂之和等于本身)
# for i in range(100,1001):
#     a=i%10
#     b=i//10%10
#     c=i//100%10
#     if a**3+b**3+c**3==i:
#         print(f"{i}是100-1000内水仙花数")
# 输出:
# 153是100-1000内水仙花数
# 370是100-1000内水仙花数
# 371是100-1000内水仙花数
# 407是100-1000内水仙花数

# 2.找出100以内的所有质数存放在列表中:
# l=[]
# for i in range(2,101):
#     is_prime=True
#     j=2
#     while(j*j<=i):
#         if i%j==0:
#             is_prime=False
#         j+=1
#     if(is_prime):
#         l.append(i)
# print(l)#[2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97]

# 3.打印九九乘法表
# for i in range(1,10):
#     for j in range(1,10):
#         print(f"{i}*{j}={i*j:2d}",end=' ')#格式注意:隔一个空格,一个数字一行,并保证最终结果对齐,我们用:{i*j:2d}
#     print("")
# 1*1= 1 1*2= 2 1*3= 3 1*4= 4 1*5= 5 1*6= 6 1*7= 7 1*8= 8 1*9= 9
# 2*1= 2 2*2= 4 2*3= 6 2*4= 8 2*5=10 2*6=12 2*7=14 2*8=16 2*9=18
# 3*1= 3 3*2= 6 3*3= 9 3*4=12 3*5=15 3*6=18 3*7=21 3*8=24 3*9=27
# 4*1= 4 4*2= 8 4*3=12 4*4=16 4*5=20 4*6=24 4*7=28 4*8=32 4*9=36
# 5*1= 5 5*2=10 5*3=15 5*4=20 5*5=25 5*6=30 5*7=35 5*8=40 5*9=45
# 6*1= 6 6*2=12 6*3=18 6*4=24 6*5=30 6*6=36 6*7=42 6*8=48 6*9=54
# 7*1= 7 7*2=14 7*3=21 7*4=28 7*5=35 7*6=42 7*7=49 7*8=56 7*9=63
# 8*1= 8 8*2=16 8*3=24 8*4=32 8*5=40 8*6=48 8*7=56 8*8=64 8*9=72
# 9*1= 9 9*2=18 9*3=27 9*4=36 9*5=45 9*6=54 9*7=63 9*8=72 9*9=81

Acknowledgement:

网易云课堂:

波波课堂41学时之零基础学Python