我心中的王者:Python-第5章 程序的流程控制使用if语句
一个程序如果是按部就班从头到尾,中间没有转折,其实是无法完成太多工作。设计过程难免会需要转折,这个转折在程序设计的术语称流程控制,本章将完整讲解有关if语句的流程控制。另外,与程序流程设计有关的关系运算符与逻辑运算符也将在本章做说明,因为这些是if语句流程控制的基础。
5-1 关系运算符
Python语言所使用的关系运算符表:
上述运算如果是真会传回True,如果是伪会传回False。
实例1: 下列会传回True。
实例2: 下列会传回False。
5-2 逻辑运算符
Python所使用的逻辑运算符:
and —相当于逻辑符号AND
or —相当于逻辑符号OR
not —相当于逻辑符号NOT
下列是逻辑运算符and的图例说明。
下列是逻辑运算符or的图例说明。
实例1: 下列会传回True。
实例2: 下列会传回False。
实例3: 下列会传回True。
实例4: 下列会传回False。
下列是逻辑运算符not的图例说明。
逻辑运算结果如果是真则传回True,如果是伪则传回False。
**实例5:**下列会传回True。
**实例6:**下列会传回False。
5-3 if语句
这个if语句的基本语法如下:
if (条件判断):
程序代码区块
上述观念是如果条件判断是True,则执行程序代码区块,如果条件判断是False,则不执行程序代码区块。如果程序代码区块只有一道指令,可将上述语法写成下列格式。
if (条件判断): 程序代码区块
可以用下列流程图说明这个if语句:
如果读者有学习过其他程序语言,例如,Visual Basic、C、JavaScript等,在条件表达式中是使用大括号“{ }”,将if语句的程序代码区块包夹做区隔。如下所示(以C语言为实例):
if (age < 20) {
printf(“你年龄太小”);
printf(“需年满20岁才可购买烟酒”);
}
在Python内是使用内缩方式区隔if语句的程序代码区块,编辑程序时可以用Tab键内缩或是直接内缩4个字符空间,表示这是if语句的程序代码区块。相同内容,可以用下列方式处理。
If (age < 20):# 程序代码区块1
print(“你年龄太小”) # 程序代码区块2
print(“需年满20岁才可购买烟酒”)# 程序代码区块2
在Python中内缩程序代码是有意义的,相同的程序代码区块,必须有相同的内缩,否则会产生错误。
实例1: 正确的if语句程序代码。
实例2: 不正确的if语句程序代码,下列因为任意内缩造成错误。
上述笔者讲解if语句是True时需内缩4个字符空间,读者可能会问可不可以内缩5个字符空间,答案是可以的,但是记得相同程序区块必须有相同的内缩空间。不过如果你是使用Python的IDLE编辑环境,当输入if语句后,只要单击Enter键,编辑程序会自动内缩4个字符空间
。
程序实例ch5_1.py: if语句的基本应用。
# ch5_1.py
age = input("请输入年龄: ")
if (int(age) < 20):
print("你年龄太小")
print("需年满20岁才可以购买烟酒")
执行结果
请输入年龄: 15
你年龄太小
需年满20岁才可以购买烟酒
程序实例ch5_2.py: 输出绝对值的应用。
# ch5_2.py
print("输出绝对值")
num = input("请输入任意整值: ")
x = int(num)
if (int(x) < 0):
x = abs(x)
print("绝对值是 %d" % int(x))
执行结果
输出绝对值
请输入任意整值: 11
绝对值是 11
5-4 if … else语句
程序设计时更常用的功能是条件判断为True时执行某一个程序代码区块,当条件判断为False时执行另一段程序代码区块,此时可以使用if … else语句,它的语法格式如下:
if (条件判断): # 小括号可以省略
程序代码区块一
else:
程序代码区块二
上述观念是如果条件判断是True,则执行程序代码区块一,如果条件判断是False,则执行程序代码区块二。可以用下列流程图说明这个if … else语句:
程序实例ch5_3.py: 重新设计ch5_1.py,多了年龄满20岁时的输出。
# ch5_3.py
age = input("请输入年龄: ")
if (int(age) < 20):
print("你年龄太小")
print("需年满20岁才可以购买烟酒")
else:
print("欢迎购买烟酒")
执行结果
请输入年龄: 40
欢迎购买烟酒
程序实例ch5_4.py: 奇数偶数的判断。
# ch5_4.py
print("奇数偶数判断")
num = input("请输入任意整值: ")
rem = int(num) % 2
if (rem == 0):
print("%d 是偶数" % int(num))
else:
print("%d 是奇数" % int(num))
执行结果
奇数偶数判断
请输入任意整值: 65
65 是奇数
5-5 if … elif …else语句
这是一个多重判断,程序设计时需要多个条件作比较时就比较有用,例如:在美国成绩计分是采取A、B、C、D、F等,通常90-100分是A,80-89分是B,70-79分是C,60-69分是D,低于60分是F。若是使用Python可以用这个语句,很容易就完成这个工作。这个语句的基本语法如下:
if (条件判断一):
程序代码区块一
elif (条件判断二):
程序代码区块二
…
else:
程序代码区块n
上述观念是,如果条件判断一是True则执行程序代码区块一,然后离开条件判断。否则检查条件判断二,如果是True则执行程序代码区块二,然后离开条件判断。如果条件判断是False则持续进行检查,上述elif的条件判断可以不断扩充,如果所有条件判断是False则执行程序代码n区块。下列流程图是假设只有2个条件判断说明这个if … elif … else语句。
程序实例ch5_5.py:请输入数字分数,系统将响应A、B、C、D或F等级。
# ch5_5.py
print("计算最终成绩")
score = input("请输入分数: ")
sc = int(score)
if (sc >= 90):
print(" A")
elif (sc >= 80):
print(" B")
elif (sc >= 70):
print(" C")
elif (sc >= 60):
print(" D")
else:
print(" F")
执行结果
计算最终成绩
请输入分数: 68
D
程序实例ch5_6.py: 有一地区的票价收费标准是100元。
但是如果小于等于6岁或大于等于80岁,收费是打2折。
但是如果是7-12岁或60-79岁,收费是打5折。
请输入岁数,程序会计算票价。
# ch5_6.py
print("计算票价")
age = input("请输入年龄: ")
age = int(age)
ticket = 100
if age >= 80 or age <= 6:
ticket = ticket * 0.2
print("票价是: %d" % ticket)
elif age >= 60 or age <= 12:
ticket = ticket * 0.5
print("票价是: %d" % ticket)
else:
print("票价是: %d" % ticket)
执行结果
请输入年龄: 22
票价是: 100
上述程序的第6行和第9行,如果你对于运算符执行的优先级没有太大的把握,建议可以直接用小括号将条件判断括起来,可参考ch5_6_1.py。
# ch5_6_1.py
print("计算票价")
age = input("请输入年龄: ")
age = int(age)
ticket = 100
if (age >= 80) or (age <= 6):
ticket = ticket * 0.2
print("票价是: %d" % ticket)
elif (age >= 60) or (age <= 12):
ticket = ticket * 0.5
print("票价是: %d" % ticket)
else:
print("票价是: %d" % ticket)
程序实例ch5_7.py: 这个程序会要求输入字符,然后会告知所输入的字符是大写字母、小写字母、阿拉伯数字或特殊字符。
# ch5_7.py
print("判断输入字符类别")
ch = input("请输入字符: ")
if ord(ch) >= ord("A") and ord(ch) <= ord("Z"):
print("这是大写字符")
elif ord(ch) >= ord("a") and ord(ch) <= ord("z"):
print("这是小写字符")
elif ord(ch) >= ord("0") and ord(ch) <= ord("9"):
print("这是数字")
else:
print("这是特殊字符")
执行结果
请输入字符: a
这是小写字符
5-6 嵌套的if语句
所谓的嵌套的if语句是指在if语句内有其他的if语句,下列是一种情况的实例。
其实Python允许加上许多层,不过层次一多,未来程序维护会变得比较困难。
程序实例ch5_8.py: 测试某一年是否润年,润年的条件是首先可以被4整除(相当于没有余数),这个条件成立时,还必须符合,它除以100时余数不为0或是除以400时余数为0,当2个条件皆符合才算润年。
# ch5_8.py
print("判断输入年份是否润年")
year = input("请输入年分: ")
rem4 = int(year) % 4
rem100 = int(year) % 100
rem400 = int(year) % 400
if rem4 == 0:
if rem100 != 0 or rem400 == 0:
print("%s 是润年" % year)
else:
print("%s 不是润年" % year)
else:
print("%s 不是润年" % year)
执行结果
请输入年分: 1737
1737 不是润年
5-7 尚未设定的变量值None
有人在程序设计时,喜欢将所有变量一次先予以定义,在尚未用到此变量时先设定这个变量的值是None,如果此时用type( )函数了解它的类别时将显示“NoneType”,如下所示:
通常在程序设计时,可使用下列方式自我测试。
程序设计ch5_9.py: if语句与None的应用。
# ch5_9.py
flag = None
if flag == None:
print("尚未定义flag")
执行结果
尚未定义flag
习题
-
请设计一个程序,如果输入是负值则将它改成正值输出,如果输入是正值则将它改成负值输出,如果输入非数字则列出输入错误。
-
请设计一个程序,此程序可以执行下列3件事:
若输入是大写字符,请改成小写字符输出。
若输入是小写字符,请改成大写字符输出。
若输入是阿拉伯数字,则直接输出。
若输入其他字符,则列出输入错误。
3. 请重新设计第四章实作题第4和5题,用户可以先选择温度转换方式,然后输入一个温度,可以转换成另一种温度。
-
有一个百货公司庆祝50年周年庆,消费满10万元可打9折,消费满8万元可打95折,消费满5万元,可打98折。如果今年是50岁的消费者不论消费金额都打95折,请设计这个程序。
-
假设麦当劳打工薪资如下:
小于120小时(月),每小时是120小时工资的80%。
等于120小时(月),每小时是150元。
介于121至150小时(月),每小时是120小时工资的1.2倍。
大于150小时(月),每小时是120小时工资的1.6倍。
请输入工作时数,然后可以计算薪资。