本文是本人学习菜鸟教程的Python 3教程后,整理学习笔记而成。
本文主要给本人查询语法之用,也可供有C/C++基础的其他读者参阅Python 3的语法。OI/ACM选手大多使用C++,大学生学习的第一种语言一般是C;本文主要针对这些读者编写。
本文只包含Python 3的基本用法,大部分内容来自菜鸟教程,但未包含菜鸟教程的全部内容。如果有错误之处,敬请批评指正。
本节内容包括:
print()
的用法;学习本节内容后你将掌握:
编写Hello World程序,并编写注释。
练习题
洛谷 P1000 超级玛丽游戏
print()
是常用的输出语句,可以将字符串打印到控制台中。
print('Hello, Python!')
注意到print()
语句后没有分号。与C/C++相比,Python代码具有以下特点:
此外,在Python中,'
和"
没有区别。
单行注释以#
开头,多行注释的开始和结束都是'''
或"""
。
# 第一个注释
# 第二个注释
'''
第三注释
第四注释
'''
"""
第五注释
第六注释
"""
print ("Hello, Python!")
本节内容包括:
input()
的用法。学习本节内容后你将掌握:
练习题
洛谷 P1001 A+B Problem
洛谷 P1932 A+B A-B A*B A/B A%B Problem
2.3部分参考了此链接。
在Python中,变量没有类型,变量所指的对象才有类型。这与C/C++不同。
Python中的变量不需要声明。每个变量在使用前都必须赋值。
a=2 #int
b=2.9 #float
c="hi!" #string
d=1+2j #complex
e=True #bool
不再需要一个变量以后,可以删除它。
del a, b
Python有int, float, bool, complex
几种数字类型。可以用type()
判断变量的类型。
>>> 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()
判断。
>>> 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
。
input()
是常用的输入语句,可以给出提示信息,并从键盘中读入字符串。
str=input('Please input a string...')
请看以下示例。
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))
Enter a number: 100↙
Enter another number: 45↙
aType: <class 'str'>
bType: <class 'str'>
resultValue: 10045
resultType: <class 'str'>
本例中我们输入了两个整数,希望计算出它们的和,但是事与愿违,Python只是它们当成了字符串,+
起到了拼接字符串的作用,而不是求和的作用。
为了解决这个问题,可以用类似C/C++中的强制转换,把string
类对象转为int
类对象。
a=int(a)
b=int(b)
除了int()
,Python还有ord(), chr()
。
ord()
将字符转换为对应的 ASCII 码,相当于C/C++的 int()
;
chr()
将 ASCII 码转换为对应的字符,相当于C/C++的 char()
。
本节内容包括:
学习本节内容后你将掌握:
if, while...else, for...else
的语法;for
语句的迭代格式。练习题
洛谷 P1035 [NOIP2002 普及组] 级数求和
if
语句格式如下。
if condition_1:
statement_block_1
elif condition_2:
statement_block_2
else:
statement_block_3
Python没有do...while
,有while...else
和for...else
。
while condition:
statement1
else:
statement2
其中else
部分可省略。
else
的部分只会在依靠while
的condition
跳出循环以后才会执行。如果while
靠break
语句结束,则else
部分不会执行。比如:
a=1
while True:
print(a)
a=a+1
if(a>3):
break
else:
print('else')
1
2
3
与C/C++不同的是,python 的 for
只需给出变量的变化范围集合(sequence
),而无需给出遍历方式(例如从1到n)。
for <variable> in <sequence>:
<statements>
else:
<statements>
比如:
sites = ["Baidu", "Google","Runoob","Taobao"]
for site in sites:
print(site)
word = 'runoob'
for letter in word:
print(letter)
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!
本节内容包括:
字典的用法。
学习本节内容后你将掌握:
字典的定义、赋值、修改、迭代。
练习题
洛谷 P2580 于是他错误的点名开始了
字典(Dictionary)是key -> value
无序的映射集合。类似于C/C++的 map
,但不要求 key
和 value
的类型分别一致。
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());
字典可以迭代,比如:
dt={2:'This is ',1:'another dictionary'}
for i in dt.keys():
print(dt[i],end=' ')
This is another dictionary
本节内容包括:
元组、列表的用法。
学习本节内容后你将掌握:
练习题
P1459 [USACO2.1] 三值的排序 Sorting a Three-Valued Sequence
P1162 填涂颜色
元组是一种只读的列表,在定义后便不可更改,类似于const版本的C/C++的list。
元组可以被双向索引,如下图所示。非负数代表正向索引,负数代表反向索引。
tup=('Google','Runoob',1997,2000,26.8,0)
print(tup[2])
print(tup[-2])
a+b
表示首尾相接,a*4
表示a+a+a+a
。此外,元组也可以迭代:
for x in (1, 2, 3):
print (x, end=" ")
len(t)
可以求元组t
的元素个数。
list.append()
可以在列表末尾插入一个元素,del
可以删除一个元素。
list.append('Baidu')
del list[2]
其余与元组类似。
本节内容包括:
学习本节内容后你将掌握:
顾名思义,每种元素在集合中至多只能出现一次。
>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana'}
>>> print(basket) # 这里演示的是去重功能
{'orange', 'banana', 'pear', 'apple'}
>>> 'orange' in basket # 快速判断元素是否在集合内
True
>>> 'crabgrass' in basket
False
下面展示两个集合间的运算。
>>> 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
等。
推导式可以用简短的代码描述一类对象,就像数学中的集合的一种定义方法
{ x ∣ 一个推导式 } \{x|一个推导式\} {x∣一个推导式}
推导式有两种格式。
表达式 for 变量 in 列表
表达式 for 变量 in 列表 if 条件
对列表、字典、集合、元组都适用。举例如下:
>>> 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']
listdemo = ['Google','Runoob', 'Taobao']
# 将列表中各字符串值为键,各字符串的长度为值,组成键值对
>>> newdict = {key:len(key) for key in listdemo}
>>> newdict
{'Google': 6, 'Runoob': 6, 'Taobao': 6}
>>> setnew = {i**2 for i in (1,2,3)}
>>> setnew
{1, 4, 9}
>>> 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)