Python3 语法简明教程

0 前言

本文是本人学习菜鸟教程的Python 3教程后,整理学习笔记而成。

本文主要给本人查询语法之用,也可供有C/C++基础的其他读者参阅Python 3的语法。OI/ACM选手大多使用C++,大学生学习的第一种语言一般是C;本文主要针对这些读者编写。

本文只包含Python 3的基本用法,大部分内容来自菜鸟教程,但未包含菜鸟教程的全部内容。如果有错误之处,敬请批评指正。

1 输出语句、注释

本节内容包括:

  1. print()的用法;
  2. Python 3的语法特点;
  3. 单行、多行注释的写法。

学习本节内容后你将掌握:

编写Hello World程序,并编写注释。

练习题

洛谷 P1000 超级玛丽游戏

1.1 输出语句

print()是常用的输出语句,可以将字符串打印到控制台中。

print('Hello, Python!')

注意到print()语句后没有分号。与C/C++相比,Python代码具有以下特点:

  1. 语句后分号可加可不加。 特别地,如果一行有多个语句,则它们都必须加分号;
  2. 不使用大括号{},使用缩进控制代码层次。 处于统一代码块的代码,缩进必须对齐。

此外,在Python中,'"没有区别。

1.2 单行、多行注释

单行注释以#开头,多行注释的开始和结束都是'''"""

# 第一个注释
# 第二个注释
'''
第三注释
第四注释
'''
"""
第五注释
第六注释
"""
print ("Hello, Python!")

2 变量与对象、输入语句

本节内容包括:

  1. 对象的类型;
  2. 变量的定义、赋值、删除等;
  3. 几种数字类型和运算符;
  4. input()的用法。

学习本节内容后你将掌握:

  1. 用Python处理简单数据,并进行简单数学计算;
  2. 从键盘读入数据;
  3. 数字类型强制转换。

练习题

洛谷 P1001 A+B Problem
洛谷 P1932 A+B A-B A*B A/B A%B Problem

2.3部分参考了此链接

2.1 变量与对象

在Python中,变量没有类型,变量所指的对象才有类型。这与C/C++不同。

Python中的变量不需要声明。每个变量在使用前都必须赋值。

a=2		#int
b=2.9	#float
c="hi!"	#string
d=1+2j	#complex
e=True	#bool

不再需要一个变量以后,可以删除它。

del a, b

2.2 数字类型和运算符

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++相比略有不同。

  1. x//y,x除以y,结果向下取整。比如-9//2=-57.5//3.5=2.0
  2. x/y,若x,y是实数,则永远返回一个浮点数;否则返回复数(实数部分则不一定是浮点数)。

此外,x**y表示x的y次方,相当于pow(x, y)。比如10**3=1000

2.3 输入语句

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()

3 条件控制、循环语句

本节内容包括:

  1. 条件控制语法;
  2. 循环语句语法。

学习本节内容后你将掌握:

  1. if, while...else, for...else的语法;
  2. for语句的迭代格式。

练习题

洛谷 P1035 [NOIP2002 普及组] 级数求和

3.1 条件控制

if语句格式如下。

if condition_1:
    statement_block_1
elif condition_2:
    statement_block_2
else:
    statement_block_3

3.2 循环语句

Python没有do...while,有while...elsefor...else

3.2.1 while…else

while condition:
	statement1
else:
	statement2

其中else部分可省略。

else的部分只会在依靠whilecondition跳出循环以后才会执行。如果whilebreak语句结束,则else部分不会执行。比如:

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)。

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!

4 字典

本节内容包括:

字典的用法。

学习本节内容后你将掌握:

字典的定义、赋值、修改、迭代。

练习题

洛谷 P2580 于是他错误的点名开始了

字典(Dictionary)是key -> value无序的映射集合。类似于C/C++的map,但不要求keyvalue的类型分别一致。

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 

5 元组、列表

本节内容包括:

元组、列表的用法。

学习本节内容后你将掌握:

  1. 元组的定义、赋值、迭代等。
  2. 列表的定义、 赋值、修改、迭代等。

练习题

P1459 [USACO2.1] 三值的排序 Sorting a Three-Valued Sequence
P1162 填涂颜色

5.1 元组

元组是一种只读的列表,在定义后便不可更改,类似于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的元素个数。

5.2 列表

list.append()可以在列表末尾插入一个元素,del可以删除一个元素。

list.append('Baidu')
del list[2]

其余与元组类似。

6 集合、推导式

本节内容包括:

  1. 集合的用法;
  2. 表达式的用法。

学习本节内容后你将掌握:

  1. 集合的定义、赋值、运算等;
  2. 表达式的语法和用法。

6.1 集合

顾名思义,每种元素在集合中至多只能出现一次。

>>> 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 等。

6.2 推导式

推导式可以用简短的代码描述一类对象,就像数学中的集合的一种定义方法
{ 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)
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值