Python 学习笔记(四)
## python第二课
### 课程内容
1、条件判断
2、循环
3、函数
4、类
### 条件判断
```python
#伪代码表示
if condition:
do something
else:
do something
```
#### 应用题:小明买水果,合计金额为32.5元,水果店搞活动,满30打九折,求小明的实际花费?
```python
total_cost = 32.5
if total_cost >30:
discount = 0.9
else:
discount = 1
total_cost *= discount
print('小明的实际花费为: {}元'.format(total_cost))
```
小明的实际花费为: 29.25元
#### 应用题:如果购买水果超过30元,打九折,超过50元,打八折,求小明的实际花费?
```python
total_cost = 62.5
is_vip = True
if total_cost > 50:
if is_vip:
discount = 0.8
else:
discount = 1
elif total_cost >30:
discount = 0.9
else:
discount = 1
total_cost *= discount
print('小明的实际花费为: {}元'.format(total_cost))
```
小明的实际花费为: 50.0元
### 重点
1、条件判断可以任意组合
第一层意思:elif可以有0到任意多个,else可有可无
第二层意思:条件判断可以进行嵌套
2、着重看一下condition
```python
bool(''),bool({}),bool([])
```
(False, False, False)
```python
condition = ''
if condition:
print('True')
else:
print('False')
```
False
#### 从理解的角度来讲,一个值被当做布尔值,概念上更像是有与没有的区别。
and or not
### 布尔型变量做运算
```python
a = True
b = False
print('a and b is {}'.format(a and b))
print('a or b is {}'.format(a or b))
```
a and b is False
a or b is True
### 非布尔型变量做and or not 运算
```python
a = 'hello world'
b = []
print(bool(b))
print('a and b is {}'.format(a and b))
print('a and b is {}'.format(a or b))
```
False
a and b is []
a and b is hello world
```python
#非布尔型变量 and 运算
a = [1,2,3]
b = 10
print(a and b)
#非布尔型变量 or 运算
a = 'ni hao'
b = {'apple': 100}
print(a or b)
#非布尔型变量 not 运算,永远返回True或者False
print (not b)
```
10
ni hao
False
### 条件判断的近亲 - 断言
```python
#伪代码
if not condition:
crash program
#它的意思是说:我断言它肯定是这样的,如果不是这样,那我就崩溃。
```
```python
age = 19
assert age == 18,'他竟然不是18岁'
```
---------------------------------------------------------------------------
AssertionError Traceback (most recent call last)
<ipython-input-22-b5515fdbbb07> in <module>()
1 age = 19
----> 2 assert age == 18,'他竟然不是18岁'
AssertionError: 他竟然不是18岁
### 循环
for 循环 - 遍历循环
while循环 - 条件循环
```python
costs = [3,4,12,23,43,100]
for cost in costs:
print('消费 {} 元'.format(str(cost).center(10)))
```
消费 3 元
消费 4 元
消费 12 元
消费 23 元
消费 43 元
消费 100 元
### 生成一个长度为20的随机列表
```python
import random
random_numbers = []
while len(random_numbers) < 20:
random_numbers.append(random.randint(1,10))
print(random_numbers,len(random_numbers))
```
[3, 4, 2, 3, 1, 1, 5, 10, 3, 7, 10, 7, 6, 8, 6, 5, 6, 3, 9, 4] 20
#### 编程建议:只要能使用For循环,就不要使用while循环。
```python
random_numbers = []
for i in range(20):
random_numbers.append(random.randint(1,10))
print(random_numbers,len(random_numbers))
```
[9, 5, 3, 6, 1, 3, 4, 9, 8, 10, 2, 7, 10, 4, 7, 5, 7, 1, 6, 7] 20
#### 什么时候必须用while循环:当循环的条件跟数量没有关系时,只能用while
#### 题目:往空列表中添加随机数,直到添加的随机数为9,则终止
```python
random_numbers = []
while (9 not in random_numbers):
random_numbers.append(random.randint(1,10))
print(random_numbers,len(random_numbers))
```
[6, 1, 10, 4, 4, 4, 3, 6, 9] 9
### 重点:只有一个元素的列表
#### 问题:a = [1,2,3] , b = 1, c = (b in a),猜测一下c是什么类型,它是不是一个元祖呢?
```python
# 死循环演示
import time
number = 0
while True:
time.sleep(1)
number += 1
print('hello world, {}'.format(number),end = '\r')
```
hello world, 54
---------------------------------------------------------------------------
KeyboardInterrupt Traceback (most recent call last)
<ipython-input-36-ef3ff4317da5> in <module>()
2 number = 0
3 while True:
----> 4 time.sleep(1)
5 number += 1
6 print('hello world, {}'.format(number),end = '\r')
KeyboardInterrupt:
```python
a = []
b = ()
type(a),type(b)
```
(list, tuple)
```python
a = [1]
b = (1)
type(a),type(b),b
```
(list, int, 1)
```python
a = [1]
b = (1,)
type(a),type(b),b,len(b)
```
(list, tuple, (1,), 1)
```python
a = [1,2,3]
b = 1
c = (b in a)
type(a),type(b),type(c),c
```
(list, int, bool, True)
#### 上题中c不是一个元祖,它是一个布尔型变量
```python
random_numbers
```
[6, 1, 10, 4, 4, 4, 3, 6, 9]
#### continue 跳过
```python
for number in random_numbers:
if number % 2 == 0:
print('{} is 偶数'.format(number))
else:
# print('{} is 奇数'.format(number))
continue
print('没有跳过')
```
6 is 偶数
没有跳过
10 is 偶数
没有跳过
4 is 偶数
没有跳过
4 is 偶数
没有跳过
4 is 偶数
没有跳过
6 is 偶数
没有跳过
#### break 跳出循环
```python
for number in random_numbers:
if number % 2 == 0:
print('{} is 偶数'.format(number))
else:
break
print('没有结束')
```
6 is 偶数
没有结束
#### 循环中的else:如果在循环过程中没有碰到break语句,就会执行else里面的代码
```python
random_numbers = [4,2,4]
for number in random_numbers:
if number % 2 == 0:
print('{} is 偶数'.format(number))
else:
break
print('没有结束')
else:
print('all')
```
4 is 偶数
没有结束
2 is 偶数
没有结束
4 is 偶数
没有结束
all
#### for循环可以构建推导式
#### 所谓推导式,就是从一个数据序列构建另一个数据序列的方法
```python
random_numbers = list(range(10))
random_numbers
```
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
```python
new_numbers = []
for number in random_numbers:
new_numbers.append(number*10)
new_numbers
```
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
#### 列表推导式
```python
#for循环构建的推导式
new_numbers = [number*10 for number in random_numbers]
new_numbers
```
[0, 10, 20, 30, 40, 50, 60, 70, 80, 90]
#### 字典推导式
```python
dict_numbers = {number:'A' for number in random_numbers}
dict_numbers
```
{0: 'A',
1: 'A',
2: 'A',
3: 'A',
4: 'A',
5: 'A',
6: 'A',
7: 'A',
8: 'A',
9: 'A'}
```python
tuple_numbers = (number*10 for number in random_numbers)
tuple_numbers
```
<generator object <genexpr> at 0x0000021E4B4F6E08>
#### 生成器
```python
#运行第一次和第二次的数据是不一样的,第二次为空列表,生成器只能生成一次
tuple(tuple_numbers)
```
()