Python基础语法
Python基础
# print absolute value of an integer:
a = 100
if a >= 0:
print(a)
else:
print(-a)
Python的语法比较简单
#开头的语句是注释当语句以冒号
:结尾时,缩进的语句视为代码块缩进实用四个空格的缩进
议input
用
input()读取用户的输入birth = input('birth: ') if birth < 2000: print('00前') TypeError: unorderable types: str() > int()因为
input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数s = input('birth: ') birth = int(s) if birth < 2000: print('00前')可以得到正确地结果
议不可变对象:str是不变对象,list是可变对象
对于可变对象,比如list
>>> a = ['c', 'b', 'a'] >>> a.sort() >>> a ['a', 'b', 'c']对于不可变对象,比如str
>>> a = 'abc' >>> b = a.replace('a', 'A') >>> b 'Abc' >>> a 'abc'对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的
注意,赋值语句:
a, b = b, a + b相当于:
t = (b, a + b) # t是一个tuple a = t[0] b = t[1]
数据类型
整数:可以处理任意大小,用十六进制表示比较方便
0xff00浮点数:小数,对于很大或很小的浮点数,就必须用科学计数法
- 1.23x109是
1.23e9,或者12.3e8,0.000012可以写成1.2e-5
- 1.23x109是
字符串:以单引号
'或双引号"括起来的任意文本- 字符串内部既包含
'又包含"怎么办?可以用转义字符\来标识 - 比如
\n表示换行,\t表示制表符,字符\本身也要转义,所以\\表示的字符就是\ r''表示''内部的字符串默认不转义
- 字符串内部既包含
布尔值
- 以直接用
True、False表示布尔值(请注意大小写) - 布尔值可以用
and、or和not运算
- 以直接用
空值
- 空值是Python里一个特殊的值,用
None表示
- 空值是Python里一个特殊的值,用
变量:
- 变量名必须是大小写英文、数字和
_的组合,且不能用数字开头 - 等号
=是赋值语句,可以把任意数据类型赋值给变量,同一个变量可以反复赋值,而且可以是不同类型的变量 - 这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错
- 变量名必须是大小写英文、数字和
常量:
不能变的常量
在python中有两种除法
/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:>>> 9 / 3 3.0//,称为地板除,两个整数的除法仍然是整数:>>> 10 // 3 3
字符串和编码
字符编码
只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为
ASCII编码Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了Unicode对于全英文会耗费空间,本着节约的精神,UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节字符 ASCII Unicode UTF-8 A 01000001 00000000 01000001 01000001 中 01001110 00101101 11100100 10111000 10101101 计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码

python字符串
ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符>>> ord('中') 20013 >>> chr(25991) '文'内存中以
Unicode表示,要在网络上传输,或者保存到磁盘上,就需要把str变为以字节为单位的bytes,用带b前缀的单引号或双引号表示:x = b'ABC'以Unicode表示的
str通过encode()方法可以编码为指定的bytes,例如:'中文'.encode('utf-8') b'\xe4\xb8\xad\xe6\x96\x87'bytes变为str,就需要用decode()方法:>>> b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') '中文'计算
str包含多少个字符,可以用len()函数:>>> len('ABC') 3 >>> len('中文') 2如果换成
bytes,len()函数就计算字节数:>>> len(b'ABC') 3 >>> len(b'\xe4\xb8\xad\xe6\x96\x87') 6
字符串格式化
使用占位符,变量可以变化,用
%%来表示一个%>>> 'Hello, %s' % 'world' 'Hello, world' >>> 'Hi, %s, you have $%d.' % ('Michael', 1000000) 'Hi, Michael, you have $1000000.'使用以
f开头的字符串,字符串如果包含{xxx},就会以对应的变量替换>>> 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
使用
list和tuple**
list** 是一种有序的集合,可以随时添加和删除其中的元素>>> classmates = ['Michael', 'Bob', 'Tracy'] >>> classmates ['Michael', 'Bob', 'Tracy']>>> len(classmates) 3用索引来访问list中每一个位置的元素,记得索引是从
0开始的:>>> classmates[0] 'Michael' >>> classmates[3] IndexError: list index out of range>>> classmates[-1] 'Tracy' >>> classmates[-2] 'Bob' >>> classmates[-4] IndexError: list index out of range可以往list中追加元素到末尾:
>>> classmates.append('Adam') >>> classmates ['Michael', 'Bob', 'Tracy', 'Adam']把元素插入到指定的位置,比如索引号为
1的位置:>>> classmates.insert(1, 'Jack') >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']删除list末尾的元素,用
pop()方法:>>> classmates.pop() 'Adam' >>> classmates ['Michael', 'Jack', 'Bob', 'Tracy']要删除指定位置的元素,用
pop(i)方法,其中i是索引位置:>>> classmates.pop(1) 'Jack' >>> classmates ['Michael', 'Bob', 'Tracy']把某个元素替换成别的元素,可以直接赋值给对应的索引位置:
>>> classmates[1] = 'Sarah' >>> classmates ['Michael', 'Sarah', 'Tracy']list里面的元素的数据类型也可以不同,比如:
>>> L = ['Apple', 123, True]拿到
'php'可以写p[1]或者s[2][1],list元素也可以是另一个list>>> p = ['asp', 'php'] >>> s = ['python', 'java', p, 'scheme']一个list中一个元素也没有,就是一个空的list,它的长度为0:
>>> L = [] >>> len(L) 0
tuple: 一旦初始化就不能修改没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用
classmates[0],classmates[-1],但不能赋值成另外的元素>>> t = (1, 2) >>> t (1, 2)只有1个元素的tuple定义时必须加一个逗号
,,来消除歧义:>>> t = (1,) >>> t (1,)看一个“可变的”tuple:理解:指向不变
>>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >>> t[2][1] = 'Y' >>> t ('a', 'b', ['X', 'Y'])
条件判断
if语句的完整形式就是:if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4>不要少写了冒号
:,用elif做更细致:age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid')if判断条件还可以简写,比如写:if x: print('True')只要
x是非零数值、非空字符串、非空list等,就判断为True,否则为Falsematch语句score = 'B' match score: case 'A': print('score is A.') case 'B': print('score is B.') case 'C': print('score is C.') case _: # _表示匹配到其他任何情况 print('score is ???.')- 使用
match语句时,我们依次用case xxx匹配,并且可以在最后(且仅能在最后)加一个case _表示“任意值”,代码较if ... elif ... else ...更易读
age = 15 match 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.')- 第一个
case x if x < 10表示当age < 10成立时匹配,且赋值给变量x,第二个case 10仅匹配单个值,第三个case 11|12|...|18能匹配多个值,用|分隔
- 使用
循环
for...in循环,依次把list或tuple中的每个元素迭代出来sum = 0 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: sum = sum + x print(sum)range(101)就可以生成0-100的整数序列,计算如下:
sum = 0 for x in range(101): sum = sum + x print(sum)while循环sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum)提前结束循环,可以用
break语句:n = 1 while n <= 100: if n > 10: # 当n = 11时,条件满足,执行break语句 break # break语句会结束当前循环 print(n) n = n + 1 print('END')用
continue语句跳过某些循环:n = 0 while n < 10: n = n + 1 if n % 2 == 0: # 如果n是偶数,执行continue语句 continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行 print(n)
使用
dict和setdict内部存放的顺序和key放入的顺序是没有关系的
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95通过key放入:
>>> d['Adam'] = 67 >>> d['Adam'] 67key不存在,dict就会报错:
>>> d['Thomas'] KeyError: 'Thomas'要避免key不存在的错误
一是通过
in判断key是否存在:>>> 'Thomas' in d False通过dict提供的
get()方法,如果key不存在,可以返回None,或指定的value:>>> d.get('Thomas') >>> d.get('Thomas', -1) -1
删除一个key,用
pop(key)方法,对应的value也会从dict中删除:>>> d.pop('Bob') 75 >>> d {'Michael': 95, 'Tracy': 85}set也是一组key的集合,但不存储value,没有重复的key
创建一个set,用
{x,y,z,...}列出每个元素:>>> s = {1, 2, 3} >>> s {1, 2, 3}重复元素在set中自动被过滤:
>>> s = {1, 1, 2, 2, 3, 3} >>> s {1, 2, 3}通过
add(key)方法可以添加元素到set中,可以重复添加,但不会有效果:>>> s.add(4) >>> s {1, 2, 3, 4} >>> s.add(4) >>> s {1, 2, 3, 4}通过
remove(key)方法可以删除元素:>>> s.remove(4) >>> s {1, 2, 3}