Chapter05 修炼python基本功:条件语句和循环

文章目录

  • 前言
  • 条件语句和if
  • 循环语句
    • for循环
    • while循环
    • 条件与循环的复用


前言

在前面我们学习的是python的基本数据类型:列表、元组、字典、集合和字符串等。那么我们如何去很好的使用这些基本的数据类型呢?这就需要用到条件、循环。很多人把这个叫做python基本功,因为它控制着代码的逻辑,是程序的中枢系统。所有的东西都是在条件和循环上建立起来的。

可以这么说优美的代码绝对有条件和循环。

条件语句和if

对于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循环实现。

for循环

# 遍历列表中的所有元素,并打印输出
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()函数拿到索引,再去遍历访问集合中的元素。

  • range(start, end, step)
  • start 指的是计数起始值,默认是 0;stop 指的是计数结束值,但不包括 stop ;step 是步长,默认为 1,不可以为 0。
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,完全跳出所在的循环体。

在程序中适当的加入continue和break,往往使程序更加简洁、易读。

while循环

对于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]

熟练的写成这样,代码会非常简洁。

要注意条件与循环的复用,简单功能,直接完成,极大地提高代码质量与效率。

你可能感兴趣的:(python,开发语言)