和其他编程语言一样,python也提供了用于流程控制的语句,比如while、if等。
1、if 语句
x = int(input("请输入一个整数:"))
# if语句,不用括号(),不用大括号{}
if x < 0:
x = 0
print("负数")
elif x == 0:
print("零")
else:
print("正数")
需要注意的是:
- python中以“缩进”代表代码块
- elif相当于其他语言中的else if
- python中没有switch语句
- 在python中,和其他语言不通,所有不为零的数据都判定为True,比如:
if "7":
print("7 also means true!")
2、for 语句
# 如果序列是安全的(不可变)
words = ['cat', 'dog', 'lion']
for w in words:
print(w, 'length is:', len(w))
# 如果序列不安全(是可变的list),可以遍历"副本"
for w in words[:]:
if len(w) < 4:
words.insert(0, w)
print(words)
# 对Dictionary类型进行循环时,默认循环的是dict.keys()
# 相当于for k in user.keys()
for k in user:
print(k)
for v in user.values():
print(v)
需要注意的是:
- python中没有类似java中的for(int i = 0;i<list.size();i = i+2)的,可以自定义步长的循环
- 在python的for循环中,循环变量在循环结束后仍然存在:
# for循环中的循环变量在循环结束的时候仍然存在
for x in range(10):
x += 1
print(x)
3、While 语句
n = 100
num_sum = 0
counter = 1
while counter <= n:
num_sum += counter
counter += 1
print("1到%d之和为:%d" % (n, num_sum))
需要注意的是:
- python中没有do…while语句
4、range() 函数
如果需要一个数值序列,python的内置函数range()可以方便的生成一个等差数列:
# range(5)生成从0到4的序列[0,5[
for i in range(5):
# 打印出0 1 2 3 4
print(i, end=' ')
# 打印出range(0,5)
print(range(5))
# range(5,10)生成从5到9的序列[5,10[
for i in range(5, 10):
print(i, end=' ')
print()
# 生成从0到9,步长为3的序列
for i in range(0, 10, 3):
# 打印出0 3 6 9
print(i, end=' ')
range()函数的可以用于获取迭代列表的索引(替代其他语言中的for i循环):
words = ['cat', 'dog', 'lion']
for i in range(len(words)):
print("%s的索引是%d" % (words[i], i))
5、break、continue和循环中的else语句
break、continue的作用和Java中相同,break跳出最近的循环,continue进入下一次迭代。
和Java中不同的是,python中的循环语句可以有一个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:
# 当循环条件 x in range(2,n)不满足时,会进行else中的代码
# 注意如果因为break终止循环,else中的代码不会被调用
print(n, 'is a prime number')
需要注意的是:
- else代码在循环正常结束时调用
- 如果因为break终止循环,else中的代码不会被调用
6、pass语句
pass语句为python独有,代表“什么也不做”,用于必须有什么语句,但是什么也不做的场合。
比如:
# 由于while、for、if等语句之后不能什么都没有,不像java中可以写while(true){},所以要写pass
while True:
# 等待使用Ctrl + C终止程序
pass
7、循环技巧
除了使用4中提到的range(len(list))以获取索引进行循环以外,有以下循环技巧:
- 使用items()方法同时获取字典的key和value
# 使用items()方法(相当于Java中的Map.Entry),循环时同时获取key和value
user = {"name": "pierre", "password": "123456"}
for k, v in user.items():
print("key: %s, value: %s" % (k, v))
- 使用enumerate()方法同时获取序列的index和value
# 使用enumerate()方法,在循环序列时同时获取索引和值
words = ['cat', 'dog', 'lion']
for index, v in enumerate(words):
print("index: %d, value: %s" % (index, v))
- 使用zip()方法同时循环两个序列
# 使用zip()同时循环两个序列,项数以少的序列为准,比如下面的序列中的'lion'会被忽略
words1 = ['cat', 'dog', 'lion']
words2 = ['apple', 'pear']
for w1, w2 in zip(words1, words2):
print("%s eat %s" % (w1, w2))
# zip()实际上把两个序列的每一项拿出来放到一个元组里
# 同时获取索引:
for index, words in enumerate(zip(words1, words2)):
print("index:", index, "word1:", words[0], "word2:", words[1])
- 使用reversed()方法逆向循环序列
# 逆向循环序列
words = ['cat', 'dog', 'lion']
for w in reversed(words):
print(w)
- 使用sorted()方法对排序后的序列循环
# 获取排序后的序列的副本
# 注意sorted不会改变原序列
words = ['cat', 'dog', 'lion']
for w in sorted(words):
print(w)
8、空字符串、0、1
在python中,0和False、1和True可以互转,用在条件判断式中同样可以通用:
if 1:
print(1 == True)
if not 0:
print(0 == False)
而空字符串”则比较特别:
- 在条件判断式中相当于False
- ” == Flase返回False,空字符串和False不能互转
# 在python中空字符串在条件判断中相当于False
if not '':
print('空字符相当于False')
# '' == False返回Flase
print('' == False)