在前面我们学习的是python的基本数据类型:列表、元组、字典、集合和字符串等。那么我们如何去很好的使用这些基本的数据类型呢?这就需要用到条件、循环。很多人把这个叫做python基本功,因为它控制着代码的逻辑,是程序的中枢系统。所有的东西都是在条件和循环上建立起来的。
可以这么说优美的代码绝对有条件和循环。
对于python中的绝对值,换成条件语句:
# abs(x)
if x >= 0:
y = x
else:
y = -x
这就是python的条件语句,需要注意,条件语句的末尾必须加上冒号,这是python特有的语法规范。
python不支持switch语句,但是我们也可以用elif来数显多个条件判断。
if condition1:
statement1
elif condition2:
statement2
...
elif condition_n-:
statement_n-1
else:
statement_n
整个条件语句是按顺序执行的,如果遇到一个条件满足,则在执行完statement后便会退出整个条件语句。
不过要注意的是,if语句是可以单独使用的,但elif、else都必须和if成对使用。
n = input('please input a number(1-3):')
if n == '1':
print('your input is 1')
elif n == '2':
print('your input is 2')
else:
print('your input is 3')
控制台:
please input a number(1-3):2
your input is 2
另外,我们在进行条件判断时,不少人喜欢省略判断的条件,比如:
s = 'a'
if s: # s是个字符串
print(s)
ls = [1, 2, 3]
if ls: # ls是个列表
print(ls)
n = 1
if n: # i是个整数
print(n)
判断条件的省略用法:
数据类型 | 判断结果 |
---|---|
String | 空字符串解析为False,其余为True |
Int | 0解析为False,其余为True |
Bool | True为True,其余为Fasle |
list/ tuple/ dict/ set | iterable为空解析为False,其余为True |
Object | None解析为False,其余为True |
python循环一般通过for循环和while循环实现。
# 遍历列表中的所有元素,并打印输出
ls = [1,2,3,4,5,6]
for i in ls:
print(i)
python中的数据结构只要是课迭代的,比如列表、集合等,都可以通过这种方式遍历:
for item in <iterable>:
...
注意,字典本身只有键是可以迭代的。
如果我们要遍历它的值和键值对时,就需要通过内置函数values(),items()。
dic = {
'name': '张三',
'birth': 20000101,
'job': 'stu'
}
for k in dic:
print(k)
print('-' * 10)
for v in dic.values():
print(v)
print('-' * 10)
for key, value in dic.items():
print(key, value)
输出:
name
birth
job
----------
张三
20000101
stu
----------
name 张三
birth 20000101
job stu
我们通常可以通过range()函数拿到索引,再去遍历访问集合中的元素。
ls = [1,2,3,4,5,6]
for i in range(1, len(ls)):
if i < 3:
print(ls[i])
输出:
2
3
如果我们同时需要索引和元素,则可以使用函数enumerate()函数。
ls = [1,2,3,4,5,6]
for idx, item in enumerate(ls):
print(idx, ':', item)
0 : 1
1 : 2
2 : 3
3 : 4
4 : 5
5 : 6
continue 和 break
在程序中适当的加入continue和break,往往使程序更加简洁、易读。
对于while循环,原理也是一样的。当它的condition满足时,一直重复循环内部的操作,直到condition不再满足,就跳出循环。
while condition:
...
ls = ['a', 'b', 'c', 'd']
idx = 0
while idx < len(ls):
print(ls[idx])
idx += 1
输出:
a
b
c
d
我们同样可以使用while循环来遍历一个已知的可迭代序列。
但是如果你只是遍历一个已知的可迭代序列,那么使用for循环更加简洁。
例如,当用户输入文字,系统可以根据内容做出相应的回答。为了实现这个功能,我们一般会使用while循环;
while True:
try:
input_info = int(input('please input your choice(1-3): '))
if input_info == 'q':
print('Exit system')
break
elif input_info == 1:
print('your input is 1。')
elif input_info == 2:
print('your input is 2.')
else:
print('your input is 3.')
except Exception as err:
print('encountered error:{}'.format(err))
break
同时我们要注意的是,for循环和while循环的效率问题;
range() 函数是直接由C语言写的,调用它速度非常快。而while循环中的’i += 1‘这个操作,得通过python解释器间接调用底层的C语言,这个操作有涉及到了对象的创建和删除,显然,for循环的效率更胜一筹。
在阅读代码的时候,你应该常常会发现,有很多将条件与循环并做一行的操作;
expressions1 if condition else expressions for item in iterable
将这个表达式分解开来,其实就等同于下面这段:
for item in iterable:
if condition:
expression1
else:
expression2
如果没有else语句,则需要写成;
expression for item in iterable if condition
y = [value * 2 + 5 if value > 0 else -value*2 + 5 for value in x]
t = [(x, y) for x in xx for y in yy if x != y]
熟练的写成这样,代码会非常简洁。
要注意条件与循环的复用,简单功能,直接完成,极大地提高代码质量与效率。