根据不同条件,进入到不同的处理逻辑逻辑中,条件判断使用if语句。条件判断最好是显性的,写的明明白白的。
例如,取绝对值:
if x < 0:
y = -x
else:
y = x
再如,取两个数中的较小值,可以写在同一行:
smaller = x if x< y else y
上面取绝对值的代码也可以写在一行:
absolute= x if x>0 else -x
条件表达式用 in 或者not in可以大大简化代码,比如:
cmd = 'create'
if cmd in ('create', 'delete', 'update'):
action = 'Do {}'.format(cmd)
else:
action = 'Invalid choice.. try again'
print(action)
if id == 0:
print('red')
elif id == 1:
print('yellow')
else:
print('green')
for循环用于遍历可以迭代对象。可迭代对象包括:列表、元组、集合、字典、字符串等。如何判断一个对象是否可迭代呢?可以参考下面的方法:
from collections import Iterable
print(isinstance('abc', Iterable))
print(isinstance(range(101), Iterable))
print(isinstance([1, 2, 3, 4], Iterable))
print(isinstance((1, 2, 3, 4), Iterable))
print(isinstance({
"web": "selenium", "app": "Appium", "performance": "Jmeter"}, Iterable))
print(isinstance({
"selenium", "Appium", "Jmeter"}, Iterable))
上面print语句将全部输出True,因为他们都是可迭代对象,都可以用for循环迭代。
下面看下for循环的语法
列表、元组、集合
l = [1, 2, 3, 4]
for item in l:
print(item)
l = [1, 2, 3, 4, 5, 6, 7]
for index in range(0, len(l)):
if index < 5:
print(l[index])
l = [1, 2, 3, 4, 5, 6, 7]
for index, item in enumerate(l): # enumerate能返回列表的索引及对应的值
if index < 5:
print(item)
字典
d = {
'name': 'jason', 'dob': '2001', 'gender': 'male'}
for k in d:
print(k)
for v in d.values():
print(v)
for k, v in d.items():
print('key: {}, value: {}'.format(k, v))
字符串
将字符串中所有单词的首字母转成大写,其实就是实现内置的capwords
函数:
run = "pytest will run all files of the form test_*.py or *_test.py in the current directory and its subdirectories. "
upper_run = []
for i in run.split(" "):
upper_run.append(i.capitalize())
print(" ".join(upper_run))
上面的逻辑还可以写在一行上:
print(" ".join(x.capitalize() for x in run.split(" ")))
range
函数在for循环语句中经常出现。它可以产生一系列的整数,来看下它的官方文档:
class range(object):
"""
range(stop) -> range object
range(start, stop[, step]) -> range object
Return an object that produces a sequence of integers from start (inclusive) # 产生start到stop之间的一系列整数
to stop (exclusive) by step. range(i, j) produces i, i+1, i+2, ..., j-1. # 包含start,不包含stop
start defaults to 0, and stop is omitted! range(4) produces 0, 1, 2, 3.
These are exactly the valid indices for a list of 4 elements.
When step is given, it specifies the increment (or decrement). # step是步长,用来设置整数之间的间隔
"""
比如产生1~1000之间的整数的平方数:
for i in range(101): # 所有整数的平方数
print(i * i)
for i in range(0, 101, 2): # 所有偶数的平方数
print(i * i)
for
循环还有一个else
从句,我们大多数人并不熟悉。如果for循环正常结束,else中语句执行。如果for循环中执行了break语句,则不执行else语句。
当你用 for 循环迭代查找列表的中的某个元素时,如果找到了就立刻退出循环,如果迭代完了列表还没找到,需要以另外一种形式(比如异常)的方式通知调用者时,用 for…else… 无疑是最好的选择。
举个例子,找出2到10之间的数字的分解因子。如果是质数,则通过else语句块,告诉我们:
for n in range(2, 10):
for x in range(2, n):
if n % x == 0:
print( n, 'equals', x, '*', n/x)
break
else:
# loop fell through without finding a factor
print(n, 'is a prime number')
质数n只能不能被2~n-1整除,因此if n % x == 0
都不成立,for语句for x in range(2, n)
会执行完毕,接着执行else语句将数字n打印出来。
这是for循环的else语句的最合适的用法。不用else语句的话,通常要设置一个标志位。for循环的else语句用的并不多。
for n in range(2, 10):
is_prime = True
for x in range(2, n):
if n % x == 0:
print(n, 'equals', x, '*', n / x)
is_prime = False
break
if is_prime:
print(n, 'is a prime number')
while 语句后面一般会添加一个表达式,当表达式为True时,一直循环。
count=0
while count<9: # 当count<9为True时执行循环体,当为False时终止循环
print("count is ", count)
count+=1
还有一种表达式是标志位,例如
flag = True
while flag:
try:
text = input('Please enter your questions, enter "q" to exit')
if text == 'q':
flag = Flase # 在某种条件下改变flag,退出循环
print('Exit system')
print(text)
except Exception as err:
print('Encountered error: {}'.format(err))
break
如果条件永远为True,则是无限循环,常用在服务器等到客户端的请求场景下:
while True:
handle, request = wait_for_client()
process(request)
continue
让程序跳过当前这层循环,继续执行下面的循环。
for name, price in name_price.items():
if price >= 1000:
continue
if name not in name_color:
print('name: {}, color: {}'.format(name, 'None'))
continue
for color in name_color[name]:
if color == 'red':
continue
print('name: {}, color: {}'.format(name, color))
break
完全跳出所在的整个循环体。
l = [1, 2, 3, 4, 5, 6, 7]
for index in range(0, len(l)):
print(l[index])
if index > 5:
break
外层循环一次,print(),换行;内层循环一次,打印一个等式。
def mul_table():
for i in range(1, 10):
for j in range(1, i + 1):
print(str(j) + str("*") + str(i)+"=" + str(i*j), end="\t")
print()
if __name__ == '__main__':
mul_table()
def my_range(start, end, step):
return range(start, end + 1, step)
def isperfect(num):
factors = []
for i in range(1, num):
if num % i == 0:
factors.append(i)
return sum(factors) == num
def factorial(num):
result = 1
for i in range(1, num + 1):
result *= i
return result
def fibonacci_recursive(n):
if n < 0: # 递归终止条件
return 0
if n in [1, 2]: # 递归终止条件
return 1
return fibonacci_recursive(n - 1) + fibonacci_recursive(n - 2) # 递归公式
def fibonacci_loop(n):
a, b = 0, 1
while n > 0:
a, b = b, a + b
n -= 1
return a
def fibonacci_generator(n):
a, b = 0, 1
yield a
while n > 0:
a, b = b, a + b
n -= 1
yield a
if __name__ == '__main__':
for i in range(10):
print(fibonacci_recursive(i), end='\t')
for i in range(10):
print(fibonacci_loop(i), end='\t')
print(list(fibonacci_generator(10)))