【python学习笔记】分支与循环

写一个程序:

按照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)

猜你喜欢

转载自blog.csdn.net/mr_humi/article/details/80787530