目录
- [0 前言](#0 前言)
- [1 输出语句、注释](#1 输出语句、注释)
-
- [1.1 输出语句](#1.1 输出语句)
- [1.2 单行、多行注释](#1.2 单行、多行注释)
- [2 变量与对象、输入语句](#2 变量与对象、输入语句)
-
- [2.1 变量与对象](#2.1 变量与对象)
- [2.2 数字类型和运算符](#2.2 数字类型和运算符)
- [2.3 输入语句](#2.3 输入语句)
- [3 条件控制、循环语句](#3 条件控制、循环语句)
-
- [3.1 条件控制](#3.1 条件控制)
- [3.2 循环语句](#3.2 循环语句)
-
- [3.2.1 while...else](#3.2.1 while...else)
- [3.2.2 for...else](#3.2.2 for...else)
- [4 字典](#4 字典)
- [5 元组、列表](#5 元组、列表)
-
- [5.1 元组](#5.1 元组)
- [5.2 列表](#5.2 列表)
- [6 集合、推导式](#6 集合、推导式)
-
- [6.1 集合](#6.1 集合)
- [6.2 推导式](#6.2 推导式)
0 前言
本文是本人学习菜鸟教程的Python 3教程后,整理学习笔记而成。
本文主要给本人查询语法之用,也可供有C/C++基础的其他读者参阅Python 3的语法。OI/ACM选手大多使用C++,大学生学习的第一种语言一般是C;本文主要针对这些读者编写。
本文只包含Python 3的基本用法,大部分内容来自菜鸟教程,但未包含菜鸟教程的全部内容。如果有错误之处,敬请批评指正。
1 输出语句、注释
本节内容包括:
print()
的用法;- Python 3的语法特点;
- 单行、多行注释的写法。
学习本节内容后你将掌握:
编写Hello World程序,并编写注释。
练习题
1.1 输出语句
print()
是常用的输出语句,可以将字符串打印到控制台中。
py
print('Hello, Python!')
注意到print()
语句后没有分号。与C/C++相比,Python代码具有以下特点:
- 语句后分号可加可不加。 特别地,如果一行有多个语句,则它们都必须加分号;
- 不使用大括号{},使用缩进控制代码层次。 处于统一代码块的代码,缩进必须对齐。
此外,在Python中,'
和"
没有区别。
1.2 单行、多行注释
单行注释以#
开头,多行注释的开始和结束都是'''
或"""
。
py
# 第一个注释
# 第二个注释
'''
第三注释
第四注释
'''
"""
第五注释
第六注释
"""
print ("Hello, Python!")
2 变量与对象、输入语句
本节内容包括:
- 对象的类型;
- 变量的定义、赋值、删除等;
- 几种数字类型和运算符;
input()
的用法。
学习本节内容后你将掌握:
- 用Python处理简单数据,并进行简单数学计算;
- 从键盘读入数据;
- 数字类型强制转换。
练习题
洛谷 P1001 A+B Problem
洛谷 P1932 A+B A-B A*B A/B A%B Problem
2.3部分参考了此链接。
2.1 变量与对象
在Python中,变量没有类型,变量所指的对象才有类型。这与C/C++不同。
Python中的变量不需要声明。每个变量在使用前都必须赋值。
py
a=2 #int
b=2.9 #float
c="hi!" #string
d=1+2j #complex
e=True #bool
不再需要一个变量以后,可以删除它。
py
del a, b
2.2 数字类型和运算符
Python有int, float, bool, complex
几种数字类型。可以用type()
判断变量的类型。
py
>>> a, b, c, d = 20, 5.5, True, 4+3j
>>> print(type(a), type(b), type(c), type(d))
<class 'int'> <class 'float'> <class 'bool'> <class 'complex'>
也可以用isinstance()
判断。
py
>>> a = 111
>>> isinstance(a, int)
True
Python的除法和C/C++相比略有不同。
x//y
,x除以y,结果向下取整。比如-9//2=-5
,7.5//3.5=2.0
。x/y
,若x,y是实数,则永远返回一个浮点数;否则返回复数(实数部分则不一定是浮点数)。
此外,x**y
表示x的y次方,相当于pow(x, y)
。比如10**3=1000
。
2.3 输入语句
input()
是常用的输入语句,可以给出提示信息,并从键盘中读入字符串。
py
str=input('Please input a string...')
请看以下示例。
py
a = input("Enter a number: ")
b = input("Enter another number: ")
print("aType: ", type(a))
print("bType: ", type(b))
result = a + b
print("resultValue: ", result)
print("resultType: ", type(result))
py
Enter a number: 100↙
Enter another number: 45↙
aType: <class 'str'>
bType: <class 'str'>
resultValue: 10045
resultType: <class 'str'>
本例中我们输入了两个整数,希望计算出它们的和,但是事与愿违,Python只是它们当成了字符串,+
起到了拼接字符串的作用,而不是求和的作用。
为了解决这个问题,可以用类似C/C++中的强制转换,把string
类对象转为int
类对象。
py
a=int(a)
b=int(b)
除了int()
,Python还有ord(), chr()
。
ord()
将字符转换为对应的 ASCII 码,相当于C/C++的 int()
;
chr()
将 ASCII 码转换为对应的字符,相当于C/C++的 char()
。
3 条件控制、循环语句
本节内容包括:
- 条件控制语法;
- 循环语句语法。
学习本节内容后你将掌握:
if, while...else, for...else
的语法;for
语句的迭代格式。
练习题
3.1 条件控制
if
语句格式如下。
py
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
3.2 循环语句
Python没有do...while
,有while...else
和for...else
。
3.2.1 while...else
py
while condition:
statement1
else:
statement2
其中else
部分可省略。
else
的部分只会在依靠while
的condition
跳出循环以后才会执行。如果while
靠break
语句结束,则else
部分不会执行。比如:
py
a=1
while True:
print(a)
a=a+1
if(a>3):
break
else:
print('else')
1
2
3
3.2.2 for...else
与C/C++不同的是,python 的 for
只需给出变量的变化范围集合(sequence
),而无需给出遍历方式(例如从1到n)。
py
for <variable> in <sequence>:
<statements>
else:
<statements>
比如:
py
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
print(site)
py
word = 'runoob'
for letter in word:
print(letter)
py
for number in range(1, 6):
print(number)
else:
print("Finally finished!")
range(st, ed, step)
能生成一个等差数列,范围是 [ s t , e d ) [st,ed) [st,ed),公差是 s t e p step step(不指定则为1)。因此上述代码的运行结果是:
1
2
3
4
5
Finally finished!
4 字典
本节内容包括:
字典的用法。
学习本节内容后你将掌握:
字典的定义、赋值、修改、迭代。
练习题
字典(Dictionary)是key -> value
无序的映射集合。类似于C/C++的 map
,但不要求 key
和 value
的类型分别一致。
py
dict={}
dict['hello']=1
dict[2]='world'
dt={2:'This is ',1:'another dictionary'}
print(dict['hello']);
print(dict[2]);
print(dt);
print(dt.keys());
print(dt.values());
字典可以迭代,比如:
py
dt={2:'This is ',1:'another dictionary'}
for i in dt.keys():
print(dt[i],end=' ')
This is another dictionary
5 元组、列表
本节内容包括:
元组、列表的用法。
学习本节内容后你将掌握:
- 元组的定义、赋值、迭代等。
- 列表的定义、 赋值、修改、迭代等。
练习题
P1459 [USACO2.1] 三值的排序 Sorting a Three-Valued Sequence
P1162 填涂颜色
5.1 元组
元组是一种只读的列表,在定义后便不可更改,类似于const版本的C/C++的list。
元组可以被双向索引,如下图所示。非负数代表正向索引,负数代表反向索引。
py
tup=('Google','Runoob',1997,2000,26.8,0)
print(tup[2])
print(tup[-2])
a+b
表示首尾相接,a*4
表示a+a+a+a
。此外,元组也可以迭代:
py
for x in (1, 2, 3):
print (x, end=" ")
len(t)
可以求元组t
的元素个数。
5.2 列表
list.append()
可以在列表末尾插入一个元素,del
可以删除一个元素。
py
list.append('Baidu')
del list[2]
其余与元组类似。
6 集合、推导式
本节内容包括:
- 集合的用法;
- 表达式的用法。
学习本节内容后你将掌握:
- 集合的定义、赋值、运算等;
- 表达式的语法和用法。
6.1 集合
顾名思义,每种元素在集合中至多只能出现一次。
py
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # 这里演示的是去重功能
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket # 快速判断元素是否在集合内
True
>>> 'crabgrass' in basket
False
下面展示两个集合间的运算。
py
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a
{'a', 'r', 'b', 'c', 'd'}
>>> a - b # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}
>>> a | b # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}
>>> a & b # 集合a和b中都包含了的元素
{'a', 'c'}
>>> a ^ b # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}
set.add(x)
将x
加入集合set
中,set.discard(x)
将x
从集合set
删除。
此外,还有 len()
、clear()
、x in set
等。
6.2 推导式
推导式可以用简短的代码描述一类对象,就像数学中的集合的一种定义方法
{ x ∣ 一个推导式 } \{x|一个推导式\} {x∣一个推导式}
推导式有两种格式。
py
表达式 for 变量 in 列表
表达式 for 变量 in 列表 if 条件
对列表、字典、集合、元组都适用。举例如下:
py
>>> names = ['Bob','Tom','alice','Jerry','Wendy','Smith']
>>> new_names = [name.upper() for name in names if len(name)>3]
>>> print(new_names)
['ALICE', 'JERRY', 'WENDY', 'SMITH']
py
listdemo = ['Google','Runoob', 'Taobao']
# 将列表中各字符串值为键,各字符串的长度为值,组成键值对
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
{'Google': 6, 'Runoob': 6, 'Taobao': 6}
py
>>> setnew = {i**2 for i in (1,2,3)}
>>> setnew
{1, 4, 9}
py
>>> a = (x for x in range(1,10))
>>> a
<generator object <genexpr> at 0x7faf6ee20a50> # 返回的是生成器对象
>>> tuple(a) # 使用 tuple() 函数,可以直接将生成器对象转换成元组
(1, 2, 3, 4, 5, 6, 7, 8, 9)