Python 是一种解释型、面向对象、动态数据类型(弱类型)的高级程序设计语言。
Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。
像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU General Public License) 协议。
官方宣布,2020 年 1 月 1 日, 停止 Python 2 的更新。
Python 2.7 被确定为最后一个 Python 2.x 版本。
Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。
开发工具:Visual Studio Code
1.查询是否安装python3
在Visual Studio Code终端的运行结果
apple@192 python % python3
Python 3.12.1 (v3.12.1:2305ca5144, Dec 7 2023, 17:23:38) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
2.cnotrol加Z字退出命令编译状态
在Visual Studio Code终端的运行结果
apple@192 python % python3
Python 3.12.1 (v3.12.1:2305ca5144, Dec 7 2023, 17:23:38) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
zsh: suspended python3
apple@192 python %
clear命令可以在命令行清除屏幕信息,但是在python3命令编译状态下执行clear无效。
3.直接运行.py文件
在在Visual Studio Code终端的命令行执行:python3 test.py
apple@192 python % python3 test.py
Python 在代码编写时,没有大括号约定代码块的边界,而是用缩进来组织,默认为 4 个空格,比如以下 object c 语言的代码:
int a = 1;
if(a>0) {
print(“a>0”);
}else{
print(“a<=0”);
}
而在 Python 里面,是没有大括号的,但需要前面缩进 4 个空格表示代码块:
a = 1 # float(input("输入一个数字: "))
if a>0:
print('a>0')
else:
print('a<=0')
打印结果:
a>0
整体缩进:
Tab
整体取消缩进:
Tab + Shift
- Python数据类型
4.1 整数、浮点数
Python 的整数和浮点数与其它语言比较类似,都是通过正常数字表达。
但 Python 允许我们在数字中加下划线 _ 分隔很大的数,比如:十进制 10_000_000_000,十六进制也可以 0xa5b3_c3d。
并且,Python 的整数和浮点数都没有大小限制,但是超过一定范围后(比如:计算机的位数不足以表示这个数)就直接表示为 inf(无限大)。
print(float("inf") > 20000)
打印结果:
True
4.2 字符串
Python 中的字符串用两个单引号 ‘’ 表示,比如 ‘Hello World’。
当字符串内部既包含 ’ 又包含 " 时,可以用转义字符 \ 来标识引号,比如:
‘I’m"OK"!’, 即:I’m “OK”!
Python 还用了 r’’ 表示 ‘’ 内部的字符串默认不转义:
print('\\t\\') #转义时
打印结果:
\t\
print(r'\\\t\\') #不转义时
打印结果:
\\\t\\
如果字符串内部有很多换行,可以用 ‘’‘’‘’ 的格式表示多行内容:
print('''line1
line2
line3''')
打印结果:
line1
line2
line3
多行字符串 ‘’‘’‘’ 还可以在前面加上 r 使用,转义符会失效:
print(r'''hello,\n
...world''')
打印结果:
hello,\n
...world
4.3 布尔值与空值
布尔值
Python 用 True/False 来表示布尔:
print(True)
print(False)
print(3 > 1)
print(3 > 5)
打印结果:
True
False
True
False
布尔值可以用与、或和非(and、or和not表示)运算:
print(True and False)
print(True or False)
print(not False)
print(not 1 > 2)
打印结果:
False
True
True
True
空值
和 Java 中的 null、Go 语言中的 nil 一样,Python 用 None 来表示空值。空值没有数据类型,判断空值:
print(False==None)
print(None==None)
print(1==None)
打印结果:
False
True
False
4.4 变量与常量
变量不仅可以是数字,还可以是任意数据类型。变量在程序中用变量名表示,变量名必须是大小写英文、数字和 _ 的组合,且不能用数字开头,比如:
a = 1
t_007 = ‘T007’
Ans = True
注意:和其它固定类型不同,Python 中的变量名可以反复赋值,而且可以是不同数据类型的变量:
a = 123
print(a)
a = ‘ABC’
像 Python 这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如 Go 就是静态语言,赋值语句如下(// 表示注释):
a := 100 // a被定义为整数类型变量
a = “abc” // 报错:不能把字符串赋给整型变量
与 Go、Java 等静态语言相比,Python 作为动态语言更灵活,就是这个原因。
4.5 list 和 tuple
list
和大多数语言一样,list 作为一个列表,表示多个元素组合:
books = ['Chinese', 'Math', 'English']
print(books)
打印结果:
['Chinese', 'Math', 'English']
Python 作为动态语言,一个 list 中的元素可以是不同类型,比如:
l2 = ['Chinese', True, 123]
print(l2)
打印结果:
['Chinese', True, 123]
Python 提供了很多数组相关的函数,可以直接使用,如:
len(),获取列表的元素个数;
print(len(l2))
打印结果:
3
append,插入元素到列表的尾端;
l2.append(123456)
print(l2)
打印结果:
['Chinese', True, 123, 123456]
insert,插入元素到数组指定位置;由于insert是动态的,当插入的下标超过list的总长度时页能插入到list的尾部
books.insert(2, 12334)
print(books)
books.insert(10, 1233456)
print(books)
打印结果:
['Chinese', 'Math', 12334, 'English']
['Chinese', 'Math', 12334, 'English', 1233456]
pop,删除指定下标的元素,默认删除尾端元素。若下标大于等于list的总长度就报错
books.pop(4)
print(books)
打印结果:
['Chinese', 'Math', 12334, 'English']
tuple
tuple 元组是 Python 中独有的数据结构,表示一组不可变的元素:
classmate = (‘zhangs’, ‘lis’, ‘wangw’)
tuple 没有 append、insert、pop 这样的方法,也没有赋值操作。
不可变的元组 tuple 的意义是:代码更安全。
Python官方说明:如果可能,能用 tuple 代替 list 就尽量用 tuple。
classmate = ('zhangs', 'lis', 'wangw')
print(classmate)
打印结果:
('zhangs', 'lis', 'wangw')
4.6 dict 和 set
dict
字典(dict)也叫 map,是存储键值对(key-value,简称 k-v)的数据结构,采用 hash 算法存储数据,具有极快的查找速度。
定义一个 dict,赋值:
d = {} # 存储名字和年龄的映射
d["zhangsan"] = 18
d["lisi"] = 19
print(d)
打印结果
{'zhangsan': 18, 'lisi': 19}
或者:
d = {"zhangsan": 18, "lisi": 19}
print(d)
打印结果
{'zhangsan': 18, 'lisi': 19}
当获取 dict 中的 value 值时,可以用 get() 方法:
print(d.get("zhangsan"))
print(d['zhangsan'])
打印结果:
18
或者直接用:
print(d['zhangsan'])
打印结果:
18
删除 key 时,用 pop(key) 方法。
d.pop("zhangsan")
print(d)
打印结果:
{'lisi': 19}
Python 中使用 dict 需要注意的两点:
如果 key 不存在,d[key] 会报错;
dict 中的 key 必须是不可变对象,如字符串、整型数等等,list 是可变的,所以不能作为 dict 的 key;
d[1] = 20
print(d)
打印结果:
{'lisi': 19, 1: 20}
set集合
set 和 dict 类似,也是无序的数据结构,且重复元素会被自动过滤。
s = set([1, 2, 3, 1, 2])
print(s) # {1,2,3
打印结果:
{'lisi': 19, 1: 20}
{1, 2, 3}
set 可以理解为 dict 中的 value 为空的数据结构,在其它语言里,比如 Go 语言里是不存在 set 类型的,要定义一组不重复的元素,只能用 dict 来做。
set 提供了很多操作元素的方法:
add(key),添加元素;
s.add(4)
print(s)
s.add(3)
print(s)
打印结果:
{1, 2, 3, 4}
{1, 2, 3, 4}
remove(key),删除元素;
和 dict 一样,set 内部不允许放入可变对象,如 list。若删除的元素不存在会报错
s.remove(3)
print(s)
s.remove(5)
print(s)
打印结果:
{1, 2, 4}
Traceback (most recent call last):
File "/Users/apple/小鸡科技/工作/python/test.py", line 70, in <module>
s.remove(5)
KeyError: 5
- 基本操作
5.1 条件判断
和大多数编程语言一样,在Python 中,采用 if-else 来作为条件控制:
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
names = ['b', 'a', 'c']
打印结果:
kid
和其它语言相比,Python 需要注意三点:
判断语句的冒号不能省略;
Python 的条件判断代码块不用大括号 {} 装起来,而是以缩进代码块来判断(VsCode 中可以采用 tab 键和 shift+tab 键调节缩进);
新增 elif 代替 else if 语句。
5.2 循环
Python 有两种循环 for 和 while。
for 循环
循环打印列表里的元素:
sum = 0
for x in range(101):
sum = sum+x
print(sum) #5050 注意:实际是0~100的和
打印结果:
5050
Python 中自带的 range(n) 方法,可以生成列表 [0, 2, …, n-1],注意编码是从0开始倒n-1,不包括n,n大于等于1
s1 = range(30)
print(s1)
print(len(s1))
打印结果:
range(0, 30)
30
while 循环
只有条件满足,就不断循环,只到不满足条件时退出。比如计算 100 以内的所有奇数之和:
sum = 0
num = 99
while num>0:
sum = sum+num
num = num-2
print(sum)
打印结果:
2500
break 和 continue
和其它语言的循环类似,Python 也提供了 break 和 continue 关键字用来控制循环:
d = ["zhangsan", "lisi", "wangwu"]
for name in d:
if name == "lisi":
print(name)
break # 找到对应的元素就退出循环
打印结果:
lisi
lisi
和 break 不同,continue 只是跳过当前循环:
d = ["zhangsan", "lisi", "wangwu"]
for name in d:
if name == "lisi":
continue
print(name)
打印结果:
zhangsan
wangwu
利用循环开发一个猜数字游戏
游戏说明:随机生成一个 0-100 的数,参与者最多可以猜 5 次,看能否猜出随机数是多少。
参考代码:
import random
num = random.randint(0,100)
x = 0
n1 = 0 #记录猜的最近数
n2 = 100 #记录猜的最近数的距离
flag = False
while x<5:
x = x+1
n = int(input('随机输入一个数:'))
if n == num:
flag = True
print('你真聪明,只用了%d次就猜对了,答案是%d'%(x, num))
break
elif n>num:
print('太大了!')
if n-num<n2:
n2 = n-num
n1 = n
else:
print('太小了!')
if num-n<n2:
n2 = num-n
n1 = n
if not flag:
print('都猜错了!答案是%d,你猜的数%d很接近了,下次努力!'%(num,n1))
打印结果:
随机输入一个数:5
太大了!
随机输入一个数:3
太大了!
随机输入一个数:2
你真聪明,只用了3次就猜对了,答案是2
- 小结
Python 为我们提供了非常完善的系统库,我们写程序时可以随取随用,让代码十分精简。比如,完成一个简单的定时任务,C 语言要写 1000 行代码,Go 需要 100 行,而 Python 可能只用 20 行就能实现。
所以 Python 是一种相当高级的语言。理论上来说,越高级的语言,我们入门的成本越低,上手也比较快。
这时,聪明的同学可能就开始问了:那既然 Python 这么好,为什么还需要其它语言呢?
是的,Python 也有它不会的地方,也有它的局限性。比如写操作系统,这个只能用低级语言写;写手机 App,只能用 Swift/Objective-C(iPhone)或 Java(Android);写终端控制器,最好用 C 或 C++。
而且 Python 的运行时间比 C/C++ 等语言都要慢,在性能敏感的程序上,Python 显然不是一个很好的选择。
代码汇总:
print(100+200)
a = 1 # float(input("输入一个数字: "))
if a>0:
print('a>0')
else:
print('a<=0')
print('I\'m \"OK\"!')
print('\\t\\') #转义时
print(r'\\\t\\') #不转义时
print('''line1
...line2
...line3''')
print('''line1\n
line2\n
line3''')
print('''line1
line2
line3''')
print(r'''hello,\n
...world''')
print(r'''hello,\n
world''')
print(True)
print(False)
print(3 > 1)
print(3 > 5)
print(True and False)
print(True or False)
print(not False)
print(not 1 > 2)
print(float("inf") > 20000)
print(False==None)
print(None==None)
print(1==None)
books = ['Chinese', 'Math', 'English']
print(books)
l2 = ['Chinese', True, 123]
print(l2)
print(len(l2))
l2.append(123456)
print(l2)
books.insert(2, 12334)
print(books)
books.insert(10, 1233456)
print(books)
books.pop(4)
print(books)
classmate = ('zhangs', 'lis', 'wangw')
print(classmate)
d = {} # 存储名字和年龄的映射
d["zhangsan"] = 18
d["lisi"] = 19
print(d)
d = {"zhangsan": 18, "lisi": 19}
print(d)
print(d.get("zhangsan"))
print(d['zhangsan'])
d.pop("zhangsan")
print(d)
d[1] = 20
print(d)
s = set([1, 2, 3, 1, 2])
print(s) # {1,2,3
s.add(4)
print(s)
s.add(3)
print(s)
s.remove(3)
print(s)
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
names = ['b', 'a', 'c']
for name in names:
print(name)
sum = 0
for x in range(101):
sum = sum+x
print(sum) #5050
s1 = range(30)
print(s1)
print(len(s1))
sum = 0
num = 99
while num>0:
sum = sum+num
num = num-2
print(sum)
d = ["zhangsan", "lisi", "wangwu"]
for name in d:
if name == "lisi":
print(name)
break # 找到对应的元素就退出循环
d = ["zhangsan", "lisi", "wangwu"]
for name in d:
if name == "lisi":
continue
print(name)
import random
num = random.randint(0,10)
x = 0
n1 = 0 #记录猜的最近数
n2 = 100 #记录猜的最近数的距离
flag = False
while x<5:
x = x+1
n = int(input('随机输入一个数:'))
if n == num:
flag = True
print('你真聪明,只用了%d次就猜对了,答案是%d'%(x, num))
break
elif n>num:
print('太大了!')
if n-num<n2:
n2 = n-num
n1 = n
else:
print('太小了!')
if num-n<n2:
n2 = num-n
n1 = n
if not flag:
print('都猜错了!答案是%d,你猜的数%d很接近了,下次努力!'%(num,n1))
打印结果:
apple@192 python % python3 test.py
300
a>0
I'm "OK"!
\t\
\\\t\\
line1
...line2
...line3
line1
line2
line3
line1
line2
line3
hello,\n
...world
hello,\n
world
True
False
True
False
False
True
True
True
True
False
True
False
['Chinese', 'Math', 'English']
['Chinese', True, 123]
3
['Chinese', True, 123, 123456]
['Chinese', 'Math', 12334, 'English']
['Chinese', 'Math', 12334, 'English', 1233456]
['Chinese', 'Math', 12334, 'English']
('zhangs', 'lis', 'wangw')
{'zhangsan': 18, 'lisi': 19}
{'zhangsan': 18, 'lisi': 19}
18
18
{'lisi': 19}
{'lisi': 19, 1: 20}
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4}
{1, 2, 4}
kid
b
a
c
5050
range(0, 30)
30
2500
lisi
zhangsan
wangwu
随机输入一个数:5
太大了!
随机输入一个数:3
太大了!
随机输入一个数:2
你真聪明,只用了3次就猜对了,答案是2
apple@192 python %