Python基础
print()
函数可以接受多个字符串,用逗号“,”隔开,就可以连成一串输出:
>>> print('The quick brown fox', 'jumps over', 'the lazy dog') The quick brown fox jumps over the lazy dog
Python的语法比较简单,采用缩进方式;
# print absolute value of an integer: a = 100 if a >= 0: print(a) else: print(-a)
# 开头的是注释;其他每一行都是一个语句,当语句以冒号:
结尾时,缩进的语句视为代码块。
缩进的坏处就是“复制-粘贴”功能失效了,这是最坑爹的地方。当你重构代码时,粘贴过去的代码必须重新检查缩进是否正确。
Python程序是大小写敏感的,如果写错了大小写,程序会报错。
数据类型和变量
整数、浮点数、字符串
如果 ' 本身也是一个字符,那就可以用 "" 括起来,比如 "I'm OK" 包含的字符是I,',m,空格,O,K这6个字符。
字符串内部既包含'又包含" ---可以用转义字符\
来标识
'I\'m \"OK\"!'
转义字符\
可以转义很多字符,比如\n
表示换行,\t
表示制表符,字符\
本身也要转义,所以\\
表示的字符就是\
>>> print('I\'m ok.') I'm ok. >>> print('I\'m learning\nPython.') I'm learning Python. >>> print('\\\n\\') \ \
布尔值可以用and
、or
和not
运算。
空值是Python里一个特殊的值,用None
表示。None
不能理解为0
,因为0
是有意义的,而None
是一个特殊的空值。
a = 'ABC' b = a a = 'XYZ' print(b)
最后一行打印出变量b
的内容到底是'ABC'
呢还是'XYZ'
?如果从数学意义上理解,就会错误地得出b
和a
相同,也应该是'XYZ'
,但实际上b
的值是'ABC'。
执行a = 'ABC'
,解释器创建了字符串'ABC'
和变量a
,并把a
指向'ABC'
:
执行b = a
,解释器创建了变量b
,并把b
指向a
指向的字符串'ABC'
:
执行a = 'XYZ'
,解释器创建了字符串'XYZ',并把a
的指向改为'XYZ'
,但b
并没有更改:
所以,最后打印变量b
的结果自然是'ABC'
了。
在Python中,通常用全部大写的变量名表示常量。
在Python中,有两种除法:
一种除法是/
>>> 10 / 3 3.3333333333333335
/
除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:
>>> 9 / 3 3.0
还有一种除法是//
,称为地板除,两个整数的除法仍然是整数:
>>> 10 // 3 3
Python还提供一个余数运算,可以得到两个整数相除的余数:
>>> 10 % 3 1
字符串和编码
Python 3版本中,字符串是以Unicode编码的,也就是说,Python的字符串支持多语言
>>> print('包含中文的str') 包含中文的str
对于单个字符的编码,Python提供了ord()
函数获取字符的整数表示,chr()
函数把编码转换为对应的字符:
>>> ord('A') 65 >>> ord('中') 20013 >>> chr(66) 'B' >>> chr(25991) '文'
计算str
包含多少个字符,可以用len()
函数:
>>> len('ABC') 3 >>> len('中文') 2
Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3 # -*- coding: utf-8 -*-
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;
第二行注释是为了告诉Python解释器,按照UTF-8编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
使用list和tuple
Python内置的一种数据类型是列表:list。list是一种有序的集合,可以随时添加和删除其中的元素。
>>> classmates = ['Michael', 'Bob', 'Tracy'] >>> classmates ['Michael', 'Bob', 'Tracy']
变量classmates
就是一个list。用len()
函数可以获得list元素的个数:
>>> len(classmates)
3
用索引来访问list中每一个位置的元素,记得索引是从0
开始的,
>>> classmates[0] 'Michael' >>> classmates[1] 'Bob' >>> classmates[2] 'Tracy' >>> classmates[3] Traceback (most recent call last): File "<stdin>", line 1, in <module> IndexError: list index out of range
最后一个元素的索引是len(classmates) - 1
。
如果要取最后一个元素,除了计算索引位置外,还可以用-1
做索引,直接获取最后一个元素:
>>> classmates[-1] 'Tracy'
往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']
另一种有序列表叫元组:tuple。tuple和list非常类似,但是tuple一旦初始化就不能修改,比如同样是列出同学的名字:
>>> classmates = ('Michael', 'Bob', 'Tracy')
不可变的tuple有什么意义?因为tuple不可变,所以代码更安全。如果可能,能用tuple代替list就尽量用tuple。
只有1个元素的tuple定义时必须加一个逗号,
,来消除歧义(括号()
既可以表示tuple,又可以表示数学公式中的小括号,这就产生了歧义):
>>> t = (1,) >>> t (1,)
看一个“可变的”tuple:
>>> t = ('a', 'b', ['A', 'B']) >>> t[2][0] = 'X' >>> t[2][1] = 'Y' >>> t ('a', 'b', ['X', 'Y'])
表面上看,tuple的元素确实变了,但其实变的不是tuple的元素,而是list的元素(tuple的第三个元素是list)。
条件判断
在Python程序中,用if
语句实现:
age = 20 if age >= 18: print('your age is', age) print('adult')
age = 3 if age >= 18: print('your age is', age) print('adult') else: print('your age is', age) print('teenager')
注意不要少写了冒号 :
elif
是else if
的缩写,完全可以有多个elif
,所以if
语句的完整形式就是:
if <条件判断1>: <执行1> elif <条件判断2>: <执行2> elif <条件判断3>: <执行3> else: <执行4>
if
语句执行有个特点,它是从上往下判断,如果在某个判断上是True
,把该判断对应的语句执行后,就忽略掉剩下的elif
和else
,所以,下面的程序打印的是teenager
:
age = 20 if age >= 6: print('teenager') elif age >= 18: print('adult') else: print('kid')
str字符串转为整数:使用 int() 函数
循环
Python的循环有两种,一种是 for...in 循环
names = ['Michael', 'Bob', 'Tracy'] for name in names: print(name)
for x in ...
循环就是把每个元素代入变量x
,然后执行缩进块的语句。
想计算1-10的整数之和,可以用一个sum
变量做累加:
sum = 0 for x in [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]: sum = sum + x print(sum)
如果要计算1-100的整数之和,从1写到100有点困难,幸好Python提供一个range()
函数,可以生成一个整数序列,再通过list()
函数可以转换为list。比如range(5)
生成的序列是从0开始小于5的整数:
>>> list(range(5))
[0, 1, 2, 3, 4]
range(101)
就可以生成0-100的整数序列
sum = 0 for x in range(101): sum = sum + x print(sum)
第二种循环是while循环,只要条件满足,就不断循环,条件不满足时退出循环。
计算100以内所有奇数之和:
sum = 0 n = 99 while n > 0: sum = sum + n n = n - 2 print(sum)
在循环内部变量n
不断自减,直到变为-1
时,不再满足while条件,循环退出。
在循环中,break
语句可以提前退出循环:
n = 1 while n <= 100: if n > 10: # 当n = 11时,条件满足,执行break语句 break # break语句会结束当前循环 print(n) n = n + 1 print('END')
打印出1~10后,紧接着打印END
,程序结束。break
的作用是提前结束循环。
在循环过程中,也可以通过continue
语句,跳过当前的这次循环,直接开始下一次循环。
打印1-10之间的奇数:
n = 0 while n < 10: n = n + 1 if n % 2 == 0: # 如果n是偶数,执行continue语句 continue # continue语句会直接继续下一轮循环,后续的print()语句不会执行 print(n)
打印的不再是1~10,而是1,3,5,7,9。
continue
的作用是提前结束本轮循环,并直接开始下一轮循环。
使用dict和set
dict
>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85} >>> d['Michael'] 95
要删除一个key,用pop(key)
方法,对应的value也会从dict中删除:
>>> d.pop('Bob') 75 >>> d {'Michael': 95, 'Tracy': 85}
set
set和dict类似,也是一组key的集合,但不存储value。
教程:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/001431658427513eef3d9dd9f7c48599116735806328e81000