编译器:Visual Studio Code
环境:Python 3.9.6 64-bit
你好!这篇文章仅为菜狗自学Python时于编辑器写下的学习笔记,记录学习过程,如有冒犯,不胜荣幸23333。如果你想学习如何使用Python, 可以仔细阅读这篇文章,了解一下Python的基本语法知识。
#print("hello world");
#print(1+1)
#print('hello'); 换行输出
#print("hello","world") 同行输出,两个字符串之间自动生成一个空格
#print("hello\nworld") \n转义字符换行
#print("hello\tworld") \t制表符,每四个字符为一个单元格,两个字符串之间补空格至4以形成单元格
#print("hello\rworld") \r回车符,转义符后的字符串回车覆盖前面的字符串,输出world
#print("hello\bworld") \b退格,退前一个符号位
#int,float,bool,str
'''n = 5;
# print(n, type(n)); #输出 5,<class 'int'> type提取变量类型,Python默认变量类型为integer
#二进制Ob,八进制Oo,十六进制Ox
print(n,id(n));''' #id()函数,获得变量的地址
from decimal import Decimal
#浮点数运算。运算时,导入Decimal,用以下格式计算可最简洁化小数部分
#print(Decimal('1.1')+Decimal('2.2'))
#布尔类型True == 1,false == 0
#print(True + 1); # 2
#print(False +1); # 1
#连接符“+”不能连接不同类型的数据。如“10”+“我”
#print("我"+str(10)+"岁") #输出“我10岁”。通过强制转换把 int 10 转换为str
# 字符串为浮点数时,不能转换为整型数
#str转换为int时,字符串必须为数字串
#输出到文件
'''fp = open('E:/first.txt','a+'); #指定输入的位置 (a+表示若不存在该文件,则创建文件
print('hello world',file = fp); #使用file = 标识符
fp.close'''
#输入input()
'''
a = input("Please input \n"); #输入函数input(),默认输入类型为str字符串型
print(a , type(a));
b = int(input("please input \n")); #强制转换,把字符串型转换成整型int
print(b,type(b));
'''
'''
a = int(input());
b = int(input());
s = input();
print(a+b); #不能实现整型与字符串型的连接。如a+b+s ,error
print(s+s); #字符串之间的连接
'''
#算术运算符+ - * / % **(幂运算) //(整除)
'''
print(2**2) #2的2次方
print(2**3) #2的3次方
print(9//2) #9整除2,取整数部分
print(9//-2) #输出-5. 一正一负向下取整
print(9%-2) #输出-1. 余数 = 被除数-除数*商 余数 = 9-(-2)*(-5)= -1
'''
#比较运算符(布尔型)< > == >= <= != is is not
#print(3<1) #返回True或False
# ==比较 值;is比较 标识
'''
a = 10;
b = 10;
print(a == b); #返回True,说明a与b的值(value)相等
print(a is b); #返回True,说明a与b的标识(id)相等
print(a is not b); #返回False,否认a与b的地址不相等,双重否定为肯定
'''
# 与 and;或 or;非not
#如a == 10 and b == 20
#位运算符(数据转换成二进制计算)
#位与&;位或|;左移位<<;右移位>>
'''print(4 & 8) #0 二进制中,对应数位全为1,结果为1,否则为0
print(4 | 8) #12 二进制中,对应数位全为0,结果为0,否则为1
print(8 & 8) #8 8:1000 两个8在第一位对应都为1,则该位为1;其余位一一对应全为0,则对应为0。任为1000
print(4<<1) #8 二进制向左移动1位,同时在末位补1个0,即100变成1000.相当于*2
print(4>>1) #2 二进制向右移动1位,同时在末位删1个0,即100变成10.相当于/2
print(16>>3) #2 二进制向右移动3位,同时在末位删3个0,即10000变成10.相当于/2的3次方
'''
#位运算符的优先级高于比较运算符
#对象的布尔值bool()
'''
print(bool(False))
print(bool(0))
print(bool(None))
print(bool(""))
print(bool(())) #空元组
print(bool([])) #空列表
print(bool({})) #空字典
'''#以上全为False
#选择结构if-else
'''
a = 10
b = 0
if a!= 10: #if 条件表达式:
b = a #执行体
print(b)
else: #else:
print(b) #执行体
'''
#pass语句(什么的不做,只是一个占位符,英语需要写语句的地方)
'''
a = 9
if a == 0:
pass
else:
pass
'''
#内置函数range(star,stop,step)
#不管range对象表示的整数序列有多长,其占用的内存空间相同,只存储star,stop,step
'''
r = range(10) #返回一个迭代器对象r
print(r)
print(list(r)) #返回[0,10) 查看range对象的整数序列,默认从0开始,且相差1(即步长
r = range(1,10) #返回[1,10) 指定从1开始
print(list(r))
r = range(1,10,2) #返回1,3,5,7,9 设置起始和步长
print(list(r))
print(10 in r) #返回False in函数判断10是否在r当中
print(10 not in r) #返回True not in函数判断
'''
#循环结构(while ,for-in)
#while循环
'''
a = 1 #初始值
while a <= 10: #while 判断条件:
print(a) # 循环体
a = a+1
'''
'''0-100的偶数和
a = 1
sum = 0
while a<=100:
if a%2 == 0:
sum += a
a+=1
print(sum)
'''
#for-in循环
'''
for i in "123abc": #for 变量 in 可迭代对象:
print(i) # 循环体
#如果不需要变量,可将其替换成下划线_ 即for _ in 可迭代对象
'''
'''#0-100的偶数和
sum = 0;
for i in range(0,101): #range(0,101) 即[0,101)
if i%2 == 0:
sum+=i
print(sum)
'''
#程序控制语句 break, continue
#循环与else搭配
#循环时没有遇到break语句则执行else语句。如:
'''
for i in range(3):
a = input("Please enter\n")
if a == "123456":
print("Password is right")
break
else:
print("False.Input again")
else: #该else与for-in搭配,即不符合循环条件时执行该else语句
print("Passwords have been inputted three times")
'''
#列表(相当于数组)
lst = [12,4,61,84,20,43,342]
#l_st = list([12,45,6,8,0,3,342])
#print(type(lst)) #返回<class 'list'> 列表类
'''遍历列表
for i in lst:
print(i)'''
#sort()方法从小到大排序
'''
lst.sort() #从小到大排序
#lst.sort(reverse = True) #降序排序
#lst.sort(reverse = False) #升序排序
print(lst)
'''
#sorted()内置函数排序
'''
#lst_0 = sorted(lst) #sorted()产生新的列表,从小到大排序
#lst_0 = sorted(lst,reverse=True) #降序排序
lst_0 = sorted(lst,reverse=False) #升序排序
print(lst_0)
'''
#冒泡排序
'''
i = 0
while i<len(lst)-1: #len()获取列表长度
j = i+1
while j<len(lst):
if lst[i]>lst[j] :
t = lst[i]
lst[i] = lst[j]
lst[j] = t
j+=1
i+=1
print(lst)
print(lst[::-1]) #将已排序的列表逆序输出
'''
#获取列表的多个元素 列表名[star:stop:step],step默认为1
'''
print(lst[1:5:1]) #[4, 61, 84, 20]
print(lst[1:5:2]) #[4, 84]
a = lst[1:6:1] #[4, 61, 84, 20, 43]
print(a)
print(lst[::-1]) #逆序输出 逆索引,从-1,即末端元素开始
'''
#元素增删改
lst_1 = ["hello","world"]
#增加
#lst.append(lst_1) #返回[12, 4, 61, 84, 20, 43, 342, ['hello', 'world']]。在列表末尾添加一个元素
#lst.extend(lst_1) #返回[12, 4, 61, 84, 20, 43, 342, 'hello', 'world']。在列表末尾至少添加一个元素
#lst.insert(0,99) #在索引为0的位置添加99,其他元素在索引位置后移。在列表指定位置添加元素
#lst[1:] = lst_1 #返回[12, 'hello', 'world']。切片:将指定索引区间[)的元素切片替换成指定元素
#删除
#lst.remove(4) #删除元素“4”。在列表中删除指定元素,如果元素重复出现,只删除第一个
#lst.pop(1) #删除元素“4”。在列表中删除指定 索引 的元素。若不指定,则默认删除最后一个元素
#lst_2 = lst[1:3] #返回[4, 61]。切片删除,取指定索引区间的元素,lst[star,stop)
#lst.clear() #清空列表元素,返回空列表
#del lst #删除列表,使列表不存在
#修改
#lst[1] = 100 #把索引1的元素修改为100
#lst[1:3] = lst_1 #切片指定索引区间修改多个元素
#print(lst)
#列表生成式 [元素表达式 for 自定义变量 in 可迭代对象]
'''
lst_3 = [i for i in range(1,10)]
lst_4 = [i*i for i in range(1,10)]
print(lst_3) #返回[1, 2, 3, 4, 5, 6, 7, 8, 9]
print(lst_4) #返回[1, 4, 9, 16, 25, 36, 49, 64, 81]
'''
#字典 字典名 = {'键':值,'键':值}
dic_0 = {'张三':99,'李四':88,"wang五" :55}
#key不可以重复相同
'''
print(dic_0) #返回{'张三': 99, '李四': 88, 'wang五': 55}
print(type(dic_0)) #返回<class 'dict'> 即dict类型
'''
#内置函数dict()创建字典 dict(键:值,键:值)
dic_1 = dict(name='jojo',age=18)
#print(dic_1) #返回{'name': 'jojo', 'age': 18}
#字典元素取值--[]取值和get()取值
'''
print(dic_0['张三']) #返回对应值99.如果不存在,则报错
print(dic_0.get('张三')) #如果不存在,返回None
'''
#key的判断--in ,not in
'''
print('张三' in dic_0) #返回True
print('张三' not in dic_0) #返回False
'''
#字典元素的删除
#del dic_0['张三'] #删除键和值 key,value
#dic_0.clear() #清空字典,变成空字典
#字典元素的增加
#dic_0['陈六'] = 60
#字典元素修改
'''
dic_0['李四'] = 100 #重新赋值,使元素的值改变
print(dic_0)
'''
#获取字典视图
#keys()函数,获取所有键key
keys_ = dic_0.keys()
'''
print(keys_,type(keys_)) #返回dict_keys(['张三', '李四', 'wang五']) <class 'dict_keys'>
print(list(keys_)) #把获取的key转换成列表储存
'''
#value()函数,获取所有值value
val = dic_0.values()
'''
print(val,type(val)) #返回dict_values([99, 88, 55]) <class 'dict_values'>
print(list(val)) #把获取的value转换成列表储存
'''
#items()函数,获取所有元素
items = dic_0.items()
'''
print(items) #返回dict_items([('张三', 99), ('李四', 88), ('wang五', 55)])
print(list(items)) #返回[('张三', 99), ('李四', 88), ('wang五', 55)] 产生元组型列表
'''
#遍历字典
'''
for i in dic_0:
print(i) #输出所有键key
print(dic_0[i]) #输出所有值value
print(i, dic_0[i])
'''
#字典生成式
#zip()内置函数 两个列表生成一个字典
#字典名 = {key:value for key,value in zip(key,value)}
key = ["apple",'pear',"peach"]
value = [4,5,6]
dic_2 = {key:value for key,value in zip(key,value)} #返回{'apple': 4, 'pear': 5, 'peach': 6}
#print(dic_2)
#元组tuple 不可变序列
#元组名 = (元素,元素) 小括号可以省略
tp_1 = ('Hello','world',98)
tp_2 = tuple(("Python",100,'nice')) #内置函数tuple()创建元组 元组名 = tuple((元素))
tp_3 = ('code',) #元组只有一个元素时必须逗号"," 否则为字符串类型
#print(tp_1,type(tp_1)) #返回('Hello', 'world', 98) <class 'tuple'>
tp_4 = (10,[100,200],99)
#元组不允许修改元素,tp_4[0]不可变,而tp_4[1]是列表,列表为可变序列,可以对其进行操作
'''
print(id(tp_4[1]))
print(type(tp_4[0]),type(tp_4[1])) #返回<class 'int'> <class 'list'>
tp_4[1].append(300)
print(tp_4) #返回(10, [100, 200, 300], 99)
print(id(tp_4[1])) #地址不变
'''
#元组的遍历
'''#for 变量名 in 元组名
for i in range(len(tp_1)):
print(tp_1[i])
'''
#集合
s = {'Hello','world',99,99}
#print(s,type(s)) #{99, 'Hello', 'world'} <class 'set'> //自动除去重复元素
#内置函数set()
s1 = set(range(6))
#print(s1) #{0, 1, 2, 3, 4, 5}
#把其他类型转化成集合
s2 = set([1,2,5,3,0])
#print(s2) #{0, 1, 2, 3, 5}
s3 = set((5,2,1,3,6))
#print(s3) #{1, 2, 3, 5, 6}
#元素增加
s2.add(18) #添加一个元素{0, 1, 2, 3, 5, 18}
s2.update({10,20,30}) #添加序列(集合、列表、元组){0, 1, 2, 3, 5, 10, 18, 20, 30}
#print(s2)
#元素删除
s2.remove(18) #删除一个元素。元素不存在,抛出异常KeyError
s2.discard(10) #删除一个元素。元素不存在,正常输出
s2.pop() #删除任意一个元素。不能含参数,否则抛出异常TypeError
#s2.clear() #清空
#print(s2)
#集合的包含关系(False,True)
'''
print(s1 == s3) # ==、!= 判断集合是否相等
print(s1.issubset(s3)) #s1是否是s3的子集
print(s1.isdisjoint(s3)) #两个集合是否含有交集
'''
#集合的数学运算
'''
# 交
print(s1.intersection(s3)) #返回s1与s3重合的元素,即交集元素.{1, 2, 3, 5}
print(s1 & s3) #等同intersection(),返回交集
# 并
print(s1.union(s3)) #返回两个集合的并集。{0, 1, 2, 3, 4, 5, 6}
print(s1 | s3) #等同union()
# 差
print(s1.difference(s3)) #返回s1-s3的差集。{0, 4}
print(s1-s3) #等同difference
#对称差
print(s1.symmetric_difference(s3)) #s1并s2除去s1交s2的元素。{0, 4, 6}
print(s1^s3)
'''
#集合生成式
#{i*i for i in 可迭代对象}
A = {i*2 for i in range(1,10)} #{2, 4, 6, 8, 10, 12, 14, 16, 18}
#print(A)
#字符串
str1 = 'Hello,hello'
'''
print(str1.index('lo')) #查找子串第一次出现的位置,如果不存在抛出ValueError。 3
print(str1.rindex('lo')) #查找子串最后一次出现的位置,如果不存在抛出ValueError。 9
print(str1.find('lo')) #查找子串第一次出现的位置,如果不存在返回-1。 3
print(str1.rfind('lo')) #查找子串最后一次出现的位置,如果不存在返回-1。 9
'''
str2 = 'abcDEF'
Str = str2.upper() #全部转换为大写 ABCDEF
Str = str2.lower() #全部转换为小写 abcdef
Str = str2.swapcase() #大写变小写,小写变大写 abcDEF
Str = str2.capitalize() #第一个字母变成大写,其余变成小写 Abcdef
Str_0 = str1.title() #每个单词第一个字母变成大写 Hello,Hello
#print(Str)
str3 = 'PHP is the best language in the world!'
Str_1 = str3.split() #以空格分隔,把字符串从左到右分隔,返回列表
Str_1 = str3.rsplit() #以空格分隔,把字符串从右到左分隔,返回列表
#['PHP', 'is', 'the', 'best', 'language', 'in','the','world','!']
str4 = 'PHP/is/the/best/language/in/the/world/!'
Str_2 = str4.split(sep='/',maxsplit=2) #以 / 分隔,最大分隔次数为2
#['PHP', 'is', 'the/best/language/in/the/world/!']
Str_3 = str3.replace('PHP','Python') #把“PHP”替换成“Python”,替换1次
Str_4 = str3.replace(' ','|',3) #把空格替换成|,替换3次
group = ('Hello',"world","Python","Java")
#print('/'.join(group)) #jion()把列表或元组中的字符串合并成一个字符串
#Hello/world/Python/Java
#print(ord('a'),chr(98)) #ord()由字符获取字符编号,chr()由数字编号获取字符。 97 b
#字符串切片
str5 = "Hello word"
Str_5 = str5[0:6] #返回Hello 即从第0个字符到第6个字符
#print(Str_5)
#格式化字符串format
# % ,{}作占位符 %s,%d,%f
goods = "衬衫"
p1 = 9
p2 = 15
'''
print("%s的价格是%d磅%d便士" % (goods,p1,p2)) #字符串 % 元组
print("{0}的价格是{1}磅{2}便士".format(goods,p1,p2)) #字符串.format()
print(f'{goods}的价格是{p1}磅{p2}便士') # f"字符串{变量名}"
print('%10d' % 99) #宽度为10。在99前补8个空格
print("%.2f" % 3.1415926) #保留两位小数
'''
#调用函数
'''def 函数名(参数):
函数体
return 返回值
'''
num1 = 10
num2 = 20
def sum(a,b):
add = a+b
return add
result = sum(num1,num2) #从上往下读取代码时,只能调用已有函数
#print(result)
#个数可变参数
'''
def fun1(*num): # *定义个数可变的位置形参,返回元组
print(num)
def fun2(**num): # **定义个数可变的关键字形参,返回字典
print(num)
fun1(10,20) #(10, 20)
fun2(a = 10,b = 20) #{'a': 10, 'b': 20}
'''
抛出异常
#try,except,else,fanally语句
#执行try语句,如果不出错,执行else语句;否则执行except语句
import traceback #导入traceback模块打印异常信息
try:
a = input("first number\n")
b = input("second number\n")
result = int(a) + int(b)
except BaseException as e:
print("Wrong\n",e) #直接使用print()输出异常
traceback.print_exc() #使用trackback调用print()打印异常
else:
print(result)
finally:
print("无论是否出错都会执行")