python入门(七) -- 流程控制

和其他编程语言一样,python也提供了用于流程控制的语句,比如while、if等。

1、if 语句

x = int(input("请输入一个整数:"))
# if语句,不用括号(),不用大括号{}
if x < 0:
    x = 0
    print("负数")
elif x == 0:
    print("零")
else:
    print("正数")

需要注意的是:

  1. python中以“缩进”代表代码块
  2. elif相当于其他语言中的else if
  3. python中没有switch语句
  4. 在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)

需要注意的是:

  1. python中没有类似java中的for(int i = 0;i<list.size();i = i+2)的,可以自定义步长的循环
  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))

需要注意的是:

  1. 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)

 

    原文作者:python入门
    原文地址: https://my.oschina.net/pierrecai/blog/895889
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞