写一个程序:
按照100分制,90分以上的成绩为A,80~90为B,60~80为C,60一下为D,当用户输入分数时,自动转化为ABCD形式打印
① 第一种写法
score = int(input("请输入分数:"))
if 100 >= score >= 90:
print("A")
if 90 > score >= 80:
print("B")
if 80 > score >= 60:
print("C")
if 60 > score >= 0:
prit("D")
if score < 0 or score > 100:
print("输入错误")
② 第二种写法
score = int(input("请输入分数:"))
if 100 >= score >= 90:
print("A")
else:
if 90 > score >= 80:
print("B")
else:
if 80 > score >= 60:
print("C")
else:
if 60 > score >= 0:
print("D")
else:
print("输入错误")
③ 第三种写法
score = int(input("请输入分数:"))
if 100 >= score >= 90:
print("A")
elif 90 > score >= 80:
print("B")
elif 80 > score >= 60:
print("C")
elif 60 > score >= 0:
print("D")
else:
print("输入错误")
结果分析:
按照第一种方法是第一次判断成立,接着打印A,但接着后面几次继续判断,然后条件不符合,退出程序
第二种和第三种方法,在第一次判断成立打印A后,接着后面的判断就不需要进行,直接退出程序
以输出98为例,假如每一次判断会消耗一次CPU时间,那么第一种比第二种和第三种方法多消耗400%的时间
悬挂else
什么是“悬挂else”?
举个C语言的例子
if (hi>7)
if (hi>7)
printf("好棒!好棒!")
else
printf("切~")
在这个例子中,虽然else是想跟外层的if匹配,但是根据C语言的就近原则,这个else属于内层的if,这就容易导致bug的产生
而python的缩进使用强制规定使得必须对齐,所以python不可能导致悬挂else的问题
条件表达式(三元操作符)
多少元操作符的意思是:这个操作符有多少个操作数,例如赋值运算符“=”是二元操作符,左右两边两个操作数,“-”为一元操作符,表示负号,因此三元操作符就是三个操作数
有了三元操作符的条件表达式,可以使用一条语句来完成条件的判断和赋值操作
if x < y:
small = x
else:
small = y
三元操作符的语法:
a = x if 条件 else y 表示当条件为True时,a的赋值为x,否则赋值为y
small = x if x < y else y
断言
assert这个关键字成为“断言”,当这个关键字后边的条件为假的时候,程序自动崩溃并抛出AssertionError的异常
什么时候需要这样的代码呢?在我们测试程序的时候就很好用了,因为与其让错误程序导致程序今后莫名其妙的崩溃,不如在错误条件出现的瞬间实现“自动毁灭”
>>> assert 3 < 4
>>> assert 3 > 4
Traceback (most recent call last):
File "<pyshell#1>", line 1, in <module>
assert 3 > 4
AssertionError
>>>
一般来说在,可以用它在程序中置入检查点,当需要确保程序中的某个条件一定为真时才能让程序正常工作,assert就很有用了
while循环语句
while循环与if条件分支类似,在条件为真的时候,执行一段代码,不同的是,只要条件为真,while循环会一直重复执行那段代码,把那段代码成为循环体
while 条件:
循环体
for循环语句
for循环语句又称之为计数器循环,for循环会自动调用迭代器的next()方法,会自动捕获StopIteration异常并结束循环
>>> favorite = "meat"
>>> for each in favorite:
print(each,end="")
meat
>>>
range()
for循环对应的内建函数range()
语法: range([start,] stop[,step=1])
range这个BIF的作用是生成一个从start参数的值开始,到stop参数的值结束的数字序列,常与for循环用于计数循环
只传递一个参数的range(),例如range(5),它会将第一个参数默认设置为0,生成0~5的所有数字,不包括5
>>> for i in range(5):
print(i)
0
1
2
3
4
>>>
传递两个参数:
>>> for i in range(2,5):
print(i)
2
3
4
传递三个参数:
>>> for i in range(1,10,2):
print(i)
1
3
5
7
9
>>>
break语句
break语句的作用是终止当前循环,跳出循环体
bingo = "妹子你在哪"
answer = input('请告诉我你在想什么:')
while True:
if answer == bingo:
break
answer = input('抱歉,错了,请再说一次:')
print('真腻害')
print('666')
continue语句
continue语句的作用是终止本轮循环开始下一轮循环(在开始下一轮循环前,会测试循环条件)
for i in range(10):
if i % 2 != 0:
print(i)
continue
i = i + 2
print(i)
作业题:
1.if not (money < 100):上边这行代码相当于?
if money >= 100
2.assert的作用是什么?
当assert关键字后的条件为假时,程序自动崩溃并抛出AssertionError的异常
当我们测试程序的时候,不希望程序突然的崩溃,还不如在程序出问题的瞬间自爆更好
用它在程序中置入检查点,当确保程序中某个条件为真的时候程序才可以正常运行,assert就很有用了
3.假设有x = 1,y = 2,z = 3,请问如何快速将三个变量的值互相交换?
x,y,z = z,y,x
4.你听说过成员资格运算符吗?
python有一个成员资格运算符:in,用于检查一个值是否在序列当中,如果在序列当中返回True,否则返回False
>>> name = "小老鼠"
>>> '小' in name
True
>>> '猫' in name
False
>>>
5.将下面代码改为三元运算操作符:
x,y,z = 6,5,4
if x < y:
small = x
if z < small:
small = z
elif y < z:
small = y
else:
small = z
更为:
small = x if (x<y and x<z) else (y if y<z else z)
6.break语句和continue语句
break语句的作用是终止当前循环,跳出循环体
continue语句的作用是终止本轮循环并开始下一轮循环(再开始下一轮循环前,会测试循环条件)
7.觉得下面代码的效率怎么样,有没有办法改进(仍然使用while)?
i = 0
string = 'I love python'
while i < len(string):
print(i)
i += 1
改进:
i = 0
string = 'I love python'
length = len(string)
while i < length:
print(i)
i += 1
动手写程序:
1.写一个用户密码验证程序,允许用户输入错误的机会,如果用户输入*则不包括计算在内
count = 3
pwd = 'HelloWorld'
while count:
passwd = input("请输入密码:")
if passwd == pwd:
print("输入正确")
break
elif '*' in passwd:
print("密码中不能含有'*',你还有",count,"次机会",end="")
continue
else:
print("输入错误,你还有",count-1,"次机会",end=" ")
count -= 1
2.编写一个程序,求100~999之间所有的水仙花数(如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数)
for i in range(100,1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10
if sum == i:
print(i)
3.三色球问题
有红、黄、蓝三种颜色的求,其中红球 3 个,黄球 3 个,绿球 6 个。先将这 12 个球混合放在一个盒子中,从中任意摸出 8 个球,编程计算摸出球的各种颜色搭配
for red in range(0,4):
for yellow in range(0,4):
for green in range(2,7):
if red + yellow + green == 8:
print(red,'\t',yellow,'\t',green)