section3 python Foudamentals
part one:data types and variables
数据类型:整数、浮点数、字符串、布尔值、空值
#整型,没有大小限制
>>>9 / 3 #3.0
>>>10 // 3 #3 地板除
>>>10 % 3 #1 取余#浮点型,没有大小限制,但超过一定范围表示为inf(无限大)
>>>print(2*100 == 2e2) #True#字符串
>>>print('I\'m \"OK\"!') #I'm "OK"!
>>>print(r'\\\n\\') #\\\n\\ ##r默认字符串内部不转义
>>>print('''ready?
...line2
...line3''') #多行输入保留原换行符用三个单引号#布尔值
>>>True and False #False
>>>not 1 > 2 #True#空值用None表示
此外还有:列表、字典等。
变量在计算机中可以是任意数据类型,在程序中用变量名表示,规范编程要遵循一定的命名规则。
变量是一个名称,指向内存中的某个地址,地址中存储了一个常量,也就是变量的值。
>>>a = 'ABC'
>>>b = a
>>>a = 'XYZ'
>>>print(b)
ABC
#理解过程
常量通常用大写字母表示,但在python中没有确保常量名称代表的值不会被修改的机制
part two:strings and encoding
字符串需要转化为01串存储在计算机中,字符串编码方式包括
- ASCII(一字节)
- GB2312(中文编码)
- Unicode(二字节通用编码)
- UTF-8(可变长通用编码,为了节省存储空间)
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或传输的时候,转化为UTF-8编码。
- 例一:记事本使用Unicode编码,但txt类型的文件存储时使用的是UTF-8编码
- 例二:服务器使用的是Unicode编码,但输出到浏览器的网页使用的是UTF-8编码
python3中,使用Unicode编码
>>>ord('A') #获取字符的整数表示
65
>>>chr(66) #把编码转化为对应的字符
'B'
>>>'\u4e2d\u6587 #中文也有编码
'中文'>>>'ABC'.encode('ascii') #编码为指定的bytes
b'ABC' #bytes数据用带 b 前缀的单引号或双引号表示
>>> '中文'.encode('utf-8')
b'\xe4\xb8\xad\xe6\x96\x87'>>> b'ABC'.decode('ascii') #bytes变为str
'ABC'
>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8')
'中文'
>>> b'\xe4\xb8\xad\xff'.decode('utf-8', errors='ignore') #忽略错误部分
'中'>>>len(xxx) #len计算str字符数、bytes字节数
格式化输出字符串有多种形式
# %格式化
>>>'Hello, %s' % 'python'
'Hello, python'
>>>'%2d - %02d' %(3, 1)
3 - 01
>>>'%.2f' %3.1415926
3.14
>>> 'Age: %s. Gender: %s' % (25, True)
'Age: 25. Gender: True'# format()格式化
>>>'Hello, {0}. This is {1:.1f}%'.format('小牛', 17.125)
'Hello, 小牛. This is 17.1%'# f-string格式化
>>> r = 2.5
>>> s = 3.14 * r ** 2
>>> print(f'The area of a circle with radius {r} is {s:.2f}')
The area of a circle with radius 2.5 is 19.62
part three:list and tumple
list列表,有序集合,可随时删改元素
>>>List = ['Bob', 35, 44.0]
>>>List[2]
44.0
>>>list[-1]
44.0
>>>len(List)
3#插入删除
>>>List.append('Tom')
>>>List
['Bob', 35, 44.0, 'Tom']
>>>List.insert(1, 'Mack')
>>>List
['Bob', 'Mack', 35, 44.0, 'Tom']
>>>List.pop() #可添加参数指定位置,缺省默认为最后一个
['Bob', 'Mack', 35, 44.0]
# list元素可为不同类型,可嵌套
** tips about insert**
list使用
insert(pos, val)
插入值,由于list是可变对象,该函数返回值是None
。
写法L_1 = L.insert(x, y)
返回的L_1
是空值!!!
tumple元组与list类似,但一旦初始化就不能修改
>>>t = () #空元组
>>>t = (1,) #一个元素的元组后面要加逗号
>>>t = (1, 3) #多元素元组
>>>t = ('a', 'b', ['X', 'Y']) #元组不可变,但固定指向列表,但列表内元素可变
part four:Conditional judgment
条件判断是计算机可以做自动化任务的关键能力之一
s = input('请输入你的年龄')
age = int(s)
if age >= 18:print('adult')
elif age >= 6:print('teenager')
else:print('kid')
tips about input
python3中input返回的永远是字符串类型,需要其它类型时用强制转换实现。
当条件判断有很多分支时,可以考虑使用模式匹配
age = 15match age:case x if x < 10: #绑定到变量print(f'< 10 years old: {x}')case 10:print('10 years old.')case 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18:print('11~18 years old.')case 19:print('19 years old.')case _: #其它情况print('not sure.')#匹配列表
args = ['gcc', 'hello.c', 'world.c']
# args = ['clean']
# args = ['gcc']match args:# 如果仅出现gcc,报错:case ['gcc']:print('gcc: missing source file(s).')# 出现gcc,且至少指定了一个文件:case ['gcc', file1, *files]:print('gcc compile: ' + file1 + ', ' + ', '.join(files))# 仅出现clean:case ['clean']:print('clean')case _:print('invalid command.')
part five:Loop
循环简化相似任务的操作流程
# 依次遍历list或tumple中元素
names = ['Bob', 'Tom', 'mack']
for name in names:print(name)
for x in range(101):print(x)# while循环
n = 10
while n > 0:print(n)
break\continue可以放在循环代码段中。
break
代表结束循环,continue
表示跳过本轮循环。
part six:dict and set
dict字典以键值对形式存储数据,
d = {'first':3, 'second': 5, 'end':7}
print(d[first]) #3# 避免key不存在的错误
'first' in d #Trued.get('second', -1) #第二个参数表示key不存在时返回的值,默认为None#pop(key)用于删除
牢记,dict的key 必须是不可变对象
set集合用于表示无序不重复数据集
s = set([1, 2, 3, 4]) #创建set需要list作为输入s.add(x) #添加, 重复元素自动过滤
s.remove(x) #删除
#set可以执行集合相关的操作,"&" "|"操作都可以
tips about Immutable objects
对于不变对象来说,调用对象自身的任意方法,不会改变该对象自身的内容。事实上,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。