Python学习_01
一、Basic Input and Output
1.1 Input
-
python的输入默认String类型
-
如果需要输入整数或小数,则需使用int或float函数进行转换,将字符串转为整数再执行加法运行
-
x = input("Enter a number: ") print(type(x)) <class 'str'> #Output int(a)+1 #转为int类型进行加法运算
-
输入多个值方法
#spilt()使用任何空格字符作为默认分隔符 x,y = input('Enter two numbers: ').split() # 但此时x,y是两字符串,可转换为int var1, var2 = [int(x) for x in input("Enter two numbers here: ").split()]
1.2 Output
-
使用 print函数(无需 “;”)
-
#无参数时,print函数输出一个空行 print() #输出一个对象 print(111) #输出多个对象,默认空格分隔 print('abc',33,'def') #可用sep参数指定特定符号作为输出对象的分隔符号 print('abc',33,'def', sep='#') #默认输出结尾,输出在两行 print('age'); print(100) #指定输出结尾,输出在一行 print('age',end='='); print(100)
-
Output to file
#打开文件 file1 = open('a.txt','w') #用file参数指定输出到文件 print((123,'abc',45,'book',file=file1) #关闭文件 file1.close() #输出从文件中读出的内容 print((open('a.txt').read())
二、Grammar
2.1 Indentation
-
python 依靠缩进来决定代码块(注意:tap键和空格键)
-
for i in range(10) print(i,' ',end='')
2.2 Comments
-
单行注释
#单行 #注释
-
文档字符串
#三个""" """
"""Hello,world!"""
#三个''' '''
'''Hello,world!'''
def add(a,b):
"""Hello,world!"""
return a+b
"""In[1]:add.__doc__"""
'''Out[1]:Hello,world!'''
#文档字符串是包、模块、类或者函数里的第一个语句,可以通过对象的 _ _doc_ _ 成员自动提取![点击并拖拽以移动](data:image/gif;base64,R0lGODlhAQABAPABAP///wAAACH5BAEKAAAALAAAAAABAAEAAAICRAEAOw==)
2.3 Import
- 导包要有顺序,避免混乱导致包的覆盖(eg.自己命名的变量名覆盖原有函数)
- 顺序:python内嵌–>第三方的包–>自己
2.4 backslash
-
内容过多,有多行内容,需要换行
-
x='aaaaaaaa\ aaaaaaa' y=('aaaaaaa' 'aaaaaaa')
三、Using help
#查看内置函数和类型的帮助信息
help(max)
#查看模块中的成员函数信息
import os
help(os.fdopen) # 查看os模块中的fdopen成员函数信息
#查看整个模块的信息
import math #查看前,注意先import导入该模块
help(math) #查看math整个模块的帮助信息
dir(math) #查看数学模块包含的内容
四、Data Types
4.1 Numbers
-
数值类型的数据是不允许改变的。即,如果改变数值类型数据的值,将重新分配内存空间,原本的数值还在原来分配的内存空间里
-
c = 1 print(id(c)) c = 2 # 1 还在 第一个id(c) 的地址 print(id(c))
4.1.1 Integer
-
不限制大小
-
运算与C基本一样(特别:整数除法、divmod(m,n)、幂、允许连续比较)
-
m, n=5, 2 print('5.0//2.0=',5.0//2.0) #输出2 print('5/2 =',m/n) #输出2.5 print('divmod(m,n) =',divmod(m,n)) #输出(2,1) print('m**n =',m**n) #输出25 print('7 > 3 >= 3',7>3>=3) #输出True print('7 < 22 < 10',7<22<10) #输出False #进制:无前缀 decimal;0b前缀 binary;0o前缀 octal;0x前缀 hexadecimal print('33 bin ',bin(33)) #输出0b100001 print('33 oct ',oct(33)) #输出0o41 print('33 hex ',hex(33)) #输出0.30000000000000004
4.1.2 Float
-
国际标准为17位小数,超过使用科学计数法、有效位数
-
进制转换导致精度误差;尽量避免"==",用a-b小于一个非常小的数字,只要小于一个非常小的数字看作相等
-
print('0.2+0.1 =',0.2+0.1) #输出0.2+0.1 = 0.30000000000000004
4.1.3 Imaginary
- 支持常见数字,a+bj(a、b为整数)
- 支持常见运算;特别:(a+bj).imag 提取虚部;(a+bj).real 提取实部
- 只能做相等比较,无大小判断
- abs(a+bj) 取模;abs((a+bj)-(c+dj)) 是(a,b)和(c,d)两点距离
- cmath模块:面向复数
模块包含:数学函数+复数在平面直角坐标和极坐标之间转换
4.2 Bool
-
只有True/False
-
逻辑运算:
-
“与” and 同时成立–>True; True and True -->True
-
“或” or 只要一个成立–>True; False or True --> True
-
“非“ not 写在逻辑值True/False前面; not False -->True, not True --> False
-
-
优先级 not>and>or (单目运算符>双目运算符)
-
各种类型对应的真值:
- int/float/复数:0–假;非0–真;
- 字符串:空串""–假;非空串–真;
- 序列类型(包含字符串):空序列–假;非空序列–真;
- 空值None:无意义–假
-
bool值也可视作数值,加入计算:True–>1;False–>0
4.3 String
-
字符串类型的数据也是不允许改变的。即,如果改变字符串类型数据的值,将重新分配内存空间
-
不支持字符类型,单字符在python中也是作为一个字符串使用
-
表示方法:单引号和双引号的灵活使用,能够让你在字符串中包含引号和撇号
-
"abc" 'abc' 'I told my friends,"Python is my favorite language"' "I told my mother's friends,'Python is my favorite language'"
-
字符串的编号(两种):
- 从第一个0开始,顺向编号
- 从最后一个 -1开始,反向编号
-
获取字符串长度 len函数
print(len('abc')) print(len('峨眉'))
-
+将两字符串进行连接;* 将字符串重复若干次–>新字符串
print('abc'+'def') print('abc'*3)
-
切片操作 slice
S='Severus Snape' print(S[0])#取索引0的字符 print(S[4:9:2])#s[start:end:step]以":"隔开 “step"步长:以步长跳开提取;取时:前闭后开 print(S[0:6])
-
判断字符串是否包含某个字符串: in 、not in
a = 'Hello' 'H' in a #成员运算符,返回布尔类型 'M' not in a
-
删除空格(该方法不改变原变量值,如果要永久删除空白,需要为变量重新赋值):
-
str.strip() 前后空格
-
print(str.strip(' abc '))
-
-
str.lstrip() 前/左部空格
-
str.rstrip 后/右部空格
-
-
判断字母数字:
-
str.isalpha() 是否全字母
-
print(str.isalpha('abc'))
-
-
str.isdigit() 是否全数字
-
str.isalnum() 是否仅有数字和字母而没有特殊字符 eg.‘+’ ‘-’
-
-
输出转义字符(即原始字符串)用 r或R
print(r'\n prints \n')
-
输出单字符在ASCII里的编号;输出ASCII里的对应字符
print(ord('a')) print(chr(11))
-
高级操作:
-
split() 分割
-
print('You are my sunshine.'.split(' '))#以' '为切割点
-
-
join 合并
-
print('-'.join(['Love','You'])) #输出Love-You a = 'Hello' c = '+' print(c.join(a)) #输出'H+e+l+l+o'
-
-
upper变大写/lower变小写/swapcase变成相反的(大->小,小->大)
-
存储数据时,方法lower() 很有用。很多时候,无法依靠用户来提供正确的大小写,因此需要将字符串先转换为小写,再存储它们。以后需要显示这些信息时,再将其转换为最合适的大小写方式。
-
S = 'HELLO WORLD' S = S.lower() print(S) print(S.title()) #title() 方法以首字母大写的方式显示每个单词
-
-
ljust/centre/rjust 文本排版左中右对齐
-
center() 前后固定空格排版
print('Severus Snape'.center(20))
-
-
替代 replace
print('Hello China'.replace('China','World'))#后代替前
-
String Formatted Output
-
python用一个元组将多个值传递给格式化的模板,每个值对应一个字符串格式符
-
print ("My name is %s, and my age is %d. " % ('Jelly', 22)) #输出My name is Jelly, and my age is 22.
-
Symbol Description Symbol Description %c 格式化字符 %x 格式化十六进制数 %s 格式化字符串 %X 格式化十六进制数(大写) %d 格式化十进制整数 %f 格式化化浮点数字,可指定小数点后的精度 %u 格式化无符号整型 %e 用科学计数法格式化浮点数 %o 格式化八进制数 %p 用十六进制数格式化变量的地址
-
-
f-strings
-
在字符串前面加上字母**“f”或“F”**, 然后变量可以直接输入到字符串中的括号中进行替换
-
name = 'Severus' working = 'Doctor' phrase1 = f"His name is {name}.He is a {working}"
-
可使用input函数,让用户输入:先解析input 函数,再替换
-
print(f'name: {input('Input name: ')} age: {input('Input age: ')} sex: {input('Input sex: ')}')
-
4.4 None
- 不支持任何操作,也不支持任何内置函数方法
- None与任何其他数据类型进行比较总是返回False
- python中未指定返回值的函数会自动返回None
4.5 Sequence
- 按整数顺序排列的数据
- String 是一种特殊的序列类型
- 与String类似:从0开始索引;切片;len函数;“+”连接;“*”重复多次;"in"判断是否存在
- Lists、Tuples、String 是有序的(输入输出是一个顺序)
Dictionaries字典、Sets集合 是无序的(输入是一个顺序,输出乱序)
4.4.1 Lists
-
访问List中的元素
-
list1=['Severus','Snape','Draco','Malfoy'] print(list1[0])#取索引 print(list1[1:6])#切片访问 多出来,不报错 print(list1[-1])#倒序访问 因为要求start<end print(list1[-4:-2])
-
改List:直接改
-
list1[2] = 'lucius' print(list1)
-
增加List:append()、insert()
-
list1.append('Malfoy') # 使用列表的append()方法,增加元素至列表尾部 list1.insert(4,'Draco') # 使用列表的insert()方法,增加元素至列表指定位置 print(list1)
-
删除List中的元素:del(删指定元素)、pop()(删任何位置)、remove()(删指定值)
-
del list1[2] # 使用Python内置函数del,删除列表指定元素 print(list1) s = list1.pop(0) # 可以使用pop() 来删除列表中任何位置的元素 print(s) print(list1) # 每当使用pop()时,被弹出的元素就不再在列表中了 list1.remove('Malfoy') # 使用方法列表的remove()方法来删除指定值的元素 print(list1) #方法remove() 只删除第一个指定的值。如果要删除的值可能在列表中出现多次,就需要使用循环来判断是否删除了所有这样的值。
-
Making Numerical Lists
-
list(range(10)) #range(stop) 输出[0,1,2,3,4,5,6,7,8,9] list(range(0, 30, 5)) #range(start, stop[, step]) 输出[0,5,10,15,20,25] #注意:start<stop list(range(0, -10, -1)) #[0,-1,-2,-3,-4,-5,-6,-7,-8,-9]
-
多维列表(嵌套列表):类似矩阵;但可以任意维,矩阵不可以
-
举例来说,三维列表是包含了二维列表的列表,二维列表是包含了一维列表的列表
-
matrix = [[[1,2], [2,4], [5,6], [3,4]],[[5,7], [6,8], [7,8], [10,11]]]
-
多一个索引来访问某个元素
-
print(matrix[0][2][1]) #输出6
-
-
List Comprehensions(列表推导式)
-
variable = [out_exp_res for out_exp in input_list if out_exp == 2]
-
迭代input_list,根据条件(if out_exp == 2)过滤哪些值被迭代,传入out_exp
-
将out_exp传入out_exp_res表达式中
-
列表生成元素表达式out_exp_res,可以是有返回值的函数
-
squares = [x**2 for x in range(10)] print(squares) # 输出[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
-
-
List Operator
-
print([1,2,3]+[4,5,6]+[7,8,9]) #list combination (列表组合) print([122]*3) #list repeats (列表重复) print(3 in [1,2,3]) #List member operations (元素是否存在于列表中) #iterative operation (迭代操作) for x in [1,2.3] print(x,end=' ')
-
# len(list) Return the length (the number of items) of a list len([1, 2, 3, 4, 5]) # max(list) Return the largest item in an iterable (list) max([1, 2, 3, 4, 5]) # min(list) Return the smallest item in an iterable (list) min([1, 2, 3, 4, 5]) #list(seq) Convert other sequence type data to list list((1, 2, 3, 4, 5))#[1, 2, 3, 4, 5] list({1, 2, 3, 4, 5})#[1, 2, 3, 4, 5] list({'a':1, 'b':2, 'c':3})#['a', 'b', 'c']
-
list2 = [0,1,2,3,4] #list.append(obj) 在列表末尾添加新的对象 list2.append(5) #list.insert(index, obj) 将对象插入列表指定位置 list2.insert(1,'a') #list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表) list3 = ['A','B','C'] list2.extend(list3) #list.pop(index) 移除列表中的某个元素(无参数,则默认移除最后一个元素),并且返回该元素的值 list2.pop(0) #list.remove(obj) 移除列表中某个值的第一个匹配项 list2.remove('A') #list.sort([func]) 对原列表进行排序 # list 的 sort 方法返回的是对已经存在的列表进行操作,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。 list4 = [1,3,5,2,6] list4.sort() list5=sorted(list4) #list.reverse() 反转列表中元素顺序 list2.reverse() #list.index(obj) 从列表中找出某个值第一个匹配项的索引位置 list2.index(5) #list.count(obj)统计某个元素在列表中出现的次数 list2.count(6)
-
Copying a List 正确拷贝
list6 = list2 [:] 更改 list6 或 list2 互相不影响
list6 = list2 更改 list6 或 list2 会在另一个里也显现出来
# 区别 list6 = list2[:] 和 list6 = list2 list6 = list2[:]
-
4.4.2 Tuples
-
List是可变的,但,有时,我们需要建立不可变的列表,即Tuples
-
Tuples使用“( )”,List使用“[]”
-
定义与访问
person = ('Helen', 'Female', 170, 50) Options = "a", "b", "c", "d" tup_empty = () #定义一个空元组 tup_1 = (50,) #若元组只有一个因素,需要在最后加上“,” print (person[0]) #访问元组中的元素 print (Options[0:2]) # slice operation print (Options[1:]) # slice to the last element
-
连接与重复
tup1 = (12, 34, 56) tup2 = (78, 90) tup3 = tup1 + tup2 # Concatenate tuples to create a new tuple print(tup3) tup4 = tup1 * 2 # output tuple twice print(tup4)
-
不可变与可变
#不可变性 tup1 = (12, 34, 56) tup1[0] = 100 # TypeError: 'tuple' object does not support item assignment # 不可以修改,但可以重新定义 tup1 = (78, 90) print (tup1) #可变的Tuples 在Tuple中定义了一个可改变的元素,就可以修改 tup = [['Severus','Snape','Draco','Malfoy'],'Lucius','Malfoy'] tup[0][1] = '1' # Modify the value of the first element in the tuple print(tup) tup[0].append('4') # Modify the value of the first element in the tuple again print(tup) #关于删除 person = ('JellY', 'Female', 160, 50) del person[3] #会报错“TypeError: 'tuple' object doesn't support item deletion” print(person) del person # you can use the del statement to delete the entire tuple print(person) #会报错“ NameError: name 'person' is not defined”
-
类似于List
# Tuples Operator tup3 = (1, 2, 3) + (4, 5, 6)#tuple combination (元组组合) tup4 = ('Hi!',) * 4 #tuple repeats (元组重复) print(3 in (1, 2, 3)) # tuple member operations (元素是否存在于元组中) for x in (1, 2, 3): print(x, end=" ") #iterative operation (迭代操作) #Built-in functions for tuples #len(tuple) len((1, 2, 3, 4, 5))#Return the length (the number of items) of a tuple #max(tuple) max((1, 2, 3, 4, 5)) #Return the largest item in an iterable (tuple) #min(tuple) min((1, 2, 3, 4, 5))#Return the smallest item in an iterable (tuple) #tuple(seq) Convert other sequence type data to tupl tuple([1, 2, 3, 4, 5]) tuple({1, 2, 3, 4, 5}) tuple({'a':1, 'b':2, 'c':3})
-
通过元组进行赋值
# You can use tuples to assign values to multiple variables at once (x, y, z) = (1, 2, 3) a, b, c = 3, 4, 5 #可直接交换值 x, y = y, x
-
strings, lists 和 tuples之间的转换
nums_L = [1, 3, 5, 7, 8, 13, 20] nums_T = tuple(nums_L) nums_S = str(nums_T)
4.4.3 Dictionaries
-
字典是一种映射类型,形如 {key1:value1, key2:value2}
-
key值必须是不可变的以及唯一的,value是可变和不唯一的
- key可取Numbers/String/Tuple,不可以取Lists/Dictionary
- value无上述限制
-
Dictionary Operator
-
#Create a Dictionary stu1 = {'SN': 20234987, 'Name': 'Jelly', 'Score': 98} info_dict = {'Name': 'xmj', 'Age': 17, 'Name': 'Manni'} #后name覆盖前面的 #dict Comprehensions(字典推导式) m = {'a': 10, 'b': 34, 'A': 7, 'Z': 3} m_freq = { k.lower(): mcase.get(k.lower(), 0) + mcase.get(k.upper(), 0) # 键值对生成元素表达式 # get方法访问一个不存在的键时,没有异常,返回None,也可以指定一个返回的默认值。这里就是返回0 for k in m.keys() # 迭代 mcase 中的key-->k,将过滤后的k传入上面的键值对生成表达式中 if k.lower() in ['a','b'] # 根据条件过滤元素 }
-
# Accessing Values in a Dictionary print(stu1['Name']) # print(stu1['Age'])#key 不存在 报错: NameError: name 'Age' is not defined v = stu1.get('Age') print(v) #使用get方法,尽管key不存在,不报错,返回None
-
# Adding New Key-Value Pairs print(stu1) stu1['Age'] = 19 print(stu1)
-
# Modifying Values in a Dictionary stu1['Score'] = 100 print(stu1)
-
# Removing Key-Value Pairs del stu1['Name'] # del statement to completely remove a key-value pair print(stu1) stu1.clear() # Empty all elements of the dictionary print(stu1) del stu1 # Delete the dictionary, the dictionary does not exist #print(stu1) #报错:NameError: name 'stu1' is not defined
-
# Break a larger dictionary into several lines stu2 = { 'Name':'Helen', 'SN':20231000, 'Math Score':120, 'English Score':90, } #可以在最后一个键值对后加上"," 以便准备添加新的键值对
-
-
遍历整个 Dictionary
-
Looping Through All Key-Value Pairs
# items() method 将在字典中的每个键值对形成一个元组Tuple,并返回这些元组 print(stu2) print(stu2.items()) for k,v in stu2.items(): print(f'Key: {k}') print(f'Value: {v}')
-
Looping Through All the Keys in a Dictionary
# keys() method 将在字典中所有key值形成一个列表,并返回这个列表,即: print(stu2.keys()) # 但是,遍历字典时,会默认遍历所有的键(Key),所以不用keys()方法也可以 for k in stu2: print(k) # 可是,显式使用keys()方法,可以让代码更容易理解。 for k in stu2.keys(): print(k) #还可以使用keys() 确定某个人是否接受了调查 favorite_languages = { 'jen': 'python', 'sarah': 'c', 'edward': 'ruby', 'phil': 'python', } if 'Helen' not in favorite_languages.keys(): print("Please take our poll!")
-
Looping Through All the Values in a Dictionary
# values() method 将在字典中所有value值形成一个列表,并返回这个列表 for language in favorite_languages.values(): print(language.title()) # 由于字典中的value值是可以重复的,所以为了去重,可以使用set()方法,将list转换为set,自然就去重了 for language in set(favorite_languages.values()): print(language.title())
-
4.4.4 Sets
-
无序的集合,里面的元素互不相同且不可改变
-
创建Sets
# Use a comma-separated list of elements within braces Set1 = {'Tom', 'Jim', 'Mary', 'Tom', 'Jack', 'Rose'} # Use the type constructor set() Set2 = set() #创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典 Set3 = set('foobar') Set4 = set(['a', 'b', 'foo']) # Use a set comprehension Set5 = {x for x in 'abracadabra' if x not in 'abc'} print(Set5)
-
Set Operator
s1 = {'a','b','c'} s2 = {'a','b','c','d','e','f','g','h','i','j'} s3 = {'a','b','c','d','e','f','g','h','i','j'} s4 = {'d','e','f','g','h'} # issubset(other)测试set与other的子集、超集关系 print(s1<=s2) #是否s1是s2子集 <-> s2是s1超集 print(s2<s3) #是否s2是s3真子集 print(s1.issubset(s2)) print(s2.issuperset(s3)) print('a' in s1) # s1是否包含元素a print('b' not in s2) # union, intersection, difference, symmetric_difference并、交、差、对称差集 # set | other | ... Return a new set with elements from the set and all others. s5 = s1 | s4 print(s5) # set & other & ... Return a new set with elements common to the set and all others s6 = s1 & s2 print(s6) # set - other - ... Return a new set with elements in the set that are not in the others. s7 = s2 - s1 print(s7) # set ^ other Return a new set with elements in either the set or other but not both s8 = s1 ^ s2 print(s8)
-
Built-in functions for sets
- len(set)
Return the number of elements in sets. - max(set)
Return the largest item in an iterable (set) - min(set)
Return the smallest item in an iterable (set) - set(stu2)
Convert other sequence type data to set
- len(set)
-
Methods of Sets
# set.add(elem) # 增加元素 s1.add('z') # set.remove(elem) # 删除元素(如果元素不存在,会报错) s1.remove('y') #报错 # set.discard(elem) # 删除集合中存在的元素 s1.discard('a') # set.pop() #随机删除并返回一个集合中的元素(如果是空集合会报错) s10 = s1.pop() print(s10) # set.clear() # 删除集合中所有元素 s1.clear() # set.copy() # Return a shallow copy of the set. s9 = s2.copy() print(s9) # set.isdisjoint(other) # Return True if the set has no elements in common with other. Sets are disjoint if and onlyif their intersection is the empty set print(s4.isdisjoint(s2))