thu-blogger

10102学习

# 基本语法

## 1.0 第一个Python程序

print('Hello world')

## 1.1 代码的组织形式

for x in range(10):
print(x)

a = 1; b = 2; c = 3

a = 1
b = 2
c = 3

# print(a)
print(b)
print(c)

print(a)  # 我把注释放在了代码后面

s1 = 'I am very very very very very very very very very very very very very very very very very very very very very very long'
s1 = 'I am very very very very very very very very very very \
very very very very very very very very very very very very long'

## 1.2 数据类型和变量

### 1.2.1 变量

a = 1  # 变量a是一个整数。
t_007 = 'T007'  # 变量t_007是一个字符串。

a = 123  # a是整数
a = 'ABC'  # a变为字符串

a = 'ABC'
b = a
a = 'XYZ'
print(b)

ABC

PI = 3.14159265359

### 1.2.2 数值类型

• int： 任意精度整数;
• float： 双精度（64位）浮点数（注意没有double类型）。

int数值可以存储任意大的数：

big_value = 1234567891011121314151617181920
print(big_value)

1234567891011121314151617181920

float数值也可以用科学计数法表示：

a = 1314.15
print(a)
a = 1.31415e3
print(a)

1314.15
1314.15

a = 1  # 这里a是int数值
a = 1.  # 这里a是float数值

a = 3
b = 2
print(a + b)  # 推荐二元运算符前后各加一个空格
print(a - b)
print(a * b)
print(a / b)
print(a // b)  # a除以b，结果只取整数部分
print(a ** b)  # a的b次幂，注意和乘法的区别

5
1
6
1.5
1
9

### 1.2.3 布尔值

Python中的布尔值有两个，True和False，举例如下：

a = True
b = False
print(a)
print(b)

True
False

a = 3 == 2  # ==表示是否等于
b = 3 != 2  # !=表示是否不等于
c = 3 > 2
d = 3 >= 2
print(a)
print(b)
print(c)
print(d)

False
True
True
True

a = True
b = False
print(not a)  #取反操作
print(a & b)  #与操作
print(a and b)  #与操作，与上面等价
print(a | b)  # 或操作
print(a or b)  # 或操作，与上面等价
print(a ^ b)  # 异或操作

False
False
False
True
True
True

a = True
if a is True:  # 尽管这里也可以写成a == True,但对于布尔值变量，建议用关键字is
print(a)

if a is not False:
print(a)

True
True

### 1.2.4 空值类型

None是Python的空值类型：

a = None
if a is None:
print(a)
print(type(a))

None
<class 'NoneType'>

None变量会用于变量的初始化，函数的默认参数，函数的默认返回值等。

### 1.2.5 字符串类型

Python具有强大而灵活的字符串处理能力。Python的字符串类型是str，你可以用单引号或双引号来定义字符串：

a = 'this is a string'
b = "this is another string"
print(a)
print(b)

this is a string
this is another string

c = '''
This is a string
with mutiple lines.
'''
print('c is')
print(c)

c is

This is a string
with mutiple lines.

a = "this's a string"
b = 'this is "another" string'
print(a)
print(b)

# 另一种方式，采用反斜杠
a = 'this\'s a string'
b = "this is \"another\" string"
print(a)
print(b)

this's a string
this is "another" string
this's a string
this is "another" string

c = '''
This is a string
with mutiple lines.
'''
print(len(c))

38

c = '''
This is a string
with mutiple lines.
'''
print(list(c))

['\n', 'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 's', 't', 'r', 'i', 'n', 'g', '\n', 'w', 'i', 't', 'h', ' ', 'm', 'u', 't', 'i', 'p', 'l', 'e', ' ', 'l', 'i', 'n', 'e', 's', '.', '\n']

c = '''
This is a string
with mutiple lines.
'''
print(c.count('\n'))

3

c = '''This is a string
with two lines.
'''
print(c.count('\n'))

2

a = 'this is a string\n'
print(a)
a = 'this is a string\\n'
print(a)

this is a string

this is a string\n

a =  r'this is a string\n'
print(a)

this is a string\n

a = 'this is a string'
print(len(a))
b = a[0]  # 我们选取了a的第1个字符，即t；注意在Python中，无论是字符串还是后面介绍的其他支持切片操作的数据结构，下标都从0开始计数
print(b)
b = a[:4]  # 我们选取了a的第1个到第4个字符，其中第1个字符包含在b中，第5个字符不包含在b中，也就是说Python中的切片是前闭后开
print(b)
b = a[0:4]  # 等价于b=a[:4]
print(b)
b = a[4:]  # 我们选取了a的第5个字符之后的所有字符
print(b)
b = a[4:20]  # 尽管这里我们可以设置超过a的长度的数值，Python没有报错，但建议用上面那种形式
print(b)
b = a[-6:]  # Python也支持负数计数的切片下标，例如取最后6个字符串，等价于b = a[10:]
print(b)
b = a[10:]
print(b)

16
t
this
this
is a string
is a string
string
string

a = 'This is the first string'
b = a.replace('first', 'second')  # 'first'是a中被替换的部分，'second'是用来替换的部分
print(a)
print(b)
a = 'This is the first string'
b = a.replace('is', 'iss')  # replace会替换所有出现的is，使用的时候需要留意
print(b)

This is the first string
This is the second string
Thiss iss the first string

a = 1
a_str = str(a)
print(type(a))
print(type(a_str))

<class 'int'>
<class 'str'>

Python提供了两个字符串直接相加，得到一个新的字符串的功能。

a = 'this is a string'
b = 'this is another string'
c = a + b
print(a)
print(b)
print(c)

c = ' '.join([a, b])
print(c)

this is a string
this is another string
this is a stringthis is another string
this is a string this is another string

a = 'Hello, %s' % 'world'
print(a)
a = 'Hi, %s, you have \$%d.' % ('Michael', 1000000)
print(a)

Hello, world
Hi, Michael, you have \$1000000.

a = 'the number is %.4f' % 123.45678  #这里%.4f指定了小数部分保留4位
print(a)
a = 'the number is %.8f' % 123.45678  #如果小数位数不足，Python会补0
print(a)
a = 'the number is %5.f' % 123.45678  #这里%5.f指定了整数部分保留5位，小数部分默认不保留，Python会在前面补上空格，可以用于数据显示的对齐
print(a)
a = 'the number is %2.4f' % 123.45678  #如果整数部分指明的位数小于实际的数值，以实际的数值为准
print(a)

the number is 123.4568
the number is 123.45678000
the number is   123
the number is 123.4568

a = 'the number is %s' % 123.45678
print(a)

the number is 123.45678

a = 'the number is %s%%' % 123.45678
print(a)

the number is 123.45678%

template = '{0:.2f} {1:s} are worth US\${2:d}'
# {0:.2f}表示格式化第一个参数为带有两位小数的浮点数。
# {1:s}表示格式化第二个参数为字符串。
# {2:d}表示格式化第三个参数为一个整数。
a = template.format(4.5560, 'Argentine Pesos', 1)  # 传入对应的具体数值，替换模板template中的占位符
print(a)

## 1.3 运算符号

### 1.3.1 基本算术运算符号

Python中包含加法、减法、乘法、除法、幂运算、模运算（取余数）、整除等基础的算术运算。在加法、减法、乘法以及幂运算中，需要注意：

• 整型和整型之间的运算，得到的结果是整型；
• 整型与浮点型之间的运算，得到的结果是浮点型；
• 浮点型与浮点型之间的运算，得到的结果是浮点型。

print(2 + 3)
print(8 - 7)
print(2 * 1.5)
print(5 ** 2)  # 这里是5的2次方
print(5 / 2)  # 结果是浮点数
print(5 % 2)  # 模运算取余数
print(5 // 2)  # 整除会向下取整

5
1
3.0
25
2.5
1
2

### 1.3.2 关系运算符号

Python中包含了等于、不等于、大于、大于等于、小于、小于等于这六类关系运算符号：

print(2 == 2)  # 等于
print(2 != 3)  # 不等于
print(3 > 2)  # 大于
print(3 >= 2)  # 大于等于
print(2 < 3)  # 小于
print(2 <= 3)  # 小于等于

### 1.3.3 成员运算符号

Python的成员运算符号in和not in可以判断一个变量是否在指定的另一个变量（列表、元组、字符串等）中找到相应的值：

print(1 in [1, 2, 3])
print(1 not in [1, 2, 3])  # not in的结果和in相反

True
False

## 1.4 控制流

Python有若干内建的关键字进行条件逻辑、循环和其它控制流操作。这些操作不仅让Python可以实现更多的功能，也增加了代码的可读性。

### 1.4.1 if、elif和else

if检查一个变量或者语句，如果为True，就执行后面的语句，否则会跳过：

a = 3
if a > 2:  # if语句后面加上一个语句
print('condition 1 holds')
if a > 3:
print('condition 2 holds')

b = True
if b:  # if语句后面加上一个变量
print('condition 3 holds')
c = 1
if c:  # 不为0的数值默认转换为True（建议避免这种默认转换的情况，采用更明确的比较语句）
print('condition 4 holds')
d = 0
if d:  # 为0的数值默认转换成False
print('condition 5 holds')

condition 1 holds
condition 3 holds
condition 4 holds

if后面可以跟一个或多个elif，所有条件都是False时，还可以添加一个else：

a = 1
if a > 2:
print('condition 1 holds')
elif a > 1:
print('condition 2 holds')
else:
print('condition 3 holds')

condition 3 holds

a = 1
b = 2
c = 4
d = 3
if a < b or c > d:
print('condition holds')

condition holds

if-else语句也可以通过三元表达式放到一行里，举例如下：

a = 3
print('True') if a > 2 else print('False')

True

### 1.4.2 range函数

range函数返回一个迭代器，它产生一个均匀分布的整数序列：

print(range(10))
print(list(range(10)))

range(0, 10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

range(10)返回的结果是range(0,10)这个迭代器。要查看对应的具体数值，我们可以调用list函数。

range的三个参数是（起点，终点，步进）：

print(list(range(10)))  # 当只有一个参数时，默认从0开始，到终点结束（但不包括终点）
print(list(range(1, 10)))  # 当有两个参数时，代表了起点和终点
print(list(range(1, 10, 2)))  # 三个参数是最完整的情况
print(list(range(10, 1, -2)))  # 步进也可以是负数，只要此时起点大于终点，同样会生成一个递减的整数序列

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 2, 3, 4, 5, 6, 7, 8, 9]
[1, 3, 5, 7, 9]
[10, 8, 6, 4, 2]

### 1.4.3 for循环

for循环是在可迭代的对象（包含字符串、range函数生成的迭代器、后面会讲到的列表、元组、字典的键值对等）中进行迭代。举例如下：

a = 'this is a string'
for s in a:  # 打印字符串a中的每一个字符
print(s)

for i in range(5):  # 打印一个整数序列中的值
print(i)

t
h
i
s

i
s

a

s
t
r
i
n
g
0
1
2
3
4

a = 'this is a string'
for s in a:
if s == ' ':  # 如果碰到空格，跳过
continue
print(s)

t
h
i
s
i
s
a
s
t
r
i
n
g

a = 'this is a string'
for s in a:
if s == ' ':  # 如果碰到空格，跳出for循环，结束打印过程
break
print(s)

t
h
i
s

for i in range(3):
for j in range(4):
if j > 2:
break
print('j: %d' % j)
print('i: %d\n' % i)

j: 0
j: 1
j: 2
i: 0

j: 0
j: 1
j: 2
i: 1

j: 0
j: 1
j: 2
i: 2

### 1.4.4 while循环

while循环指定了条件和代码，当条件为False或用break退出循环，代码才会退出：

a = 10
while a > 4:
print(a)
a -= 1

10
9
8
7
6
5

### 1.4.5 pass语句

pass是Python中的非操作语句。代码块不需要任何动作时可以使用（作为未执行代码的占位符）；因为Python需要使用空白字符划定代码块，所以需要pass：

x = 0
if x < 0:
print('negative!')
elif x == 0:
# TODO: put something smart here
pass
else:
print('positive!')

pass语句不会产生输出。