python分支和循环

部分内容整理来自《零基础入门学习Python》–小甲鱼 编著

条件为假:
 在Python看来,只有以下内容会被看做是假(注意冒号括号里面啥都没有,连空格都不要有!)
False None 0 () “”  ‘’  []  {}

短路逻辑(short - circuit logic)或者叫惰性求值(lazy evaluation)
 逻辑操作符有个有趣的特性:在不需要求值的时候不再进行操作。举个例子:表达式x and y,需要x 和 y另个变量同时为真(True)的时候,结果才为真。因此,如果当x变量的值是假(False)的时候,表达式立刻返回False,而不用去管y变量的值。

  • and 和 or 反着记忆
  • x and y 若x为真,取y;x为假,取False。
  • x or y 若x为真,取x;x为假,取y。
 print(0 or 4 and 3 or 2)   # 0 or 3 or 2 ==3
  # or 只要第一个条件为真,那就等于第一个
 print(2 or 1 < 3 and 2)    # 2 or True(1) and 2 ==2 or 1 ==2 
 # print(3 and 2 > 1)  # 3 and True == True
# print(2 > 1 and 3)  # True and 3 == 3
# print(2 > 1 or 6)   # True(短路逻辑)
6 or 2 > 1  # 6 or True == 6
3 or 2 > 1  # 3 or True == 3
0 or 5 < 4  # 0 or False == 0  False
5 < 4 or 3  # False or 3 == 3
5 > 2 or 6  # True or 6 == True

3 and 2 > 1  # 3 and True == True
0 and 3 > 1  # 0 and True == 0
2 > 1 and 3  # True and 3 == 3
3 > 1 and 0  # True and 0 == 0
3 > 1 and 2 or 2 < 3 and 4 or 3 > 2  # (True and 2) or (True and 4) or True
                                     == 2 or 4 or True ==2

条件分支:if
if 条件:
  条件为真(True)执行的操作
else:
  条件为假(False)执行的操作

while 循环
while 条件:
 条件为真(True)执行的操作
 
while 循环 +else:干完了能怎样,干不完就别想怎样

while 条件:
	条件为真执行的代码
	if 条件:
		break
else:
	while 循环没有被打断(没有被break)时执行的代码

条件表达式(三元操作符)
  我门说“多少元”操作符的意思是这个操作符有多少个操作数。例如赋值操作符’=’是二元操作符,所以它有左边和右边两个操作数。例如‘-’是一元操作符,它表示负号,因为他只有一个操作数。自然,三元操作符也就是有三个操作数的运算符啦。
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 5 < 7
>>> assert 5 > 7
Traceback (most recent call last):
  File "<pyshell#16>", line 1, in <module>
    assert 5 > 7
AssertionError

一般来说,可以用它在程序中置入检查点,当需要确保程序中的某个条件一定为真才能让程序正常工作的时候,assert关键字就非常有用了。

for循环语句
  虽说Python是c语言编写而来的,但是它的for 循环语句跟c语言的循环不太一样,Python的for循环显得更加智能和强大!它主要变现为他会自动地调用迭代器next()的方法,会自动捕获StopIteration异常并结束循环,所以它更像一个具有现代化气质的for循环语句。
have a try:

>>> kugua = "I am studying python!"
>>> for each in kugua:
	print(each,end='')

I am studying python!

range( )
for 循环的小伙伴:range( )内建函数。
语法:
range( [start, ] stop[, step=1] )
  这个BIF有三个参数,其中中括号括起来的是两个表示两个参数是可选的。step=1表示第三个参数的默认值是1.
  range( )这个BIF的作用是生成一个从start 参数的值开始,到stop参数的值结束的数字序列。经常和for循环混迹于各种计数循环之间。
  只传递一个参数的range(),例如range(5),他会将第一个参数默认设置为0,生成0~5的所有数字(注:包含0而不包含5)

>>> for i in range(5):
	print(i)

0
1
2
3
4

>>> for i in range(2, 5):
	print(i)

2
3
4

传递三个参数的range():

>>> for i in range(1, 10, 2):
	print(i)

1
3
5
7
9

>>> for i in range(10,0,-2):
	print(i)

10
8
6
4
2

range( )可以说是跟for 循环最合适做搭档的小伙伴了,当然for循环魅力强大,它还有其他各式各样的小伙伴配合实现乱七八糟的功能。
range()
break 语句
  break语句的作用是用来终止当前循环,跳出循环体。

>>> for i in range(10):
	if i == 4:
		break
	print(i)

0
1
2
3

continue 语句
   continue语句的作用是终止本轮循环并开始下一轮循环(这里要注意的是:在开始下一轮循环之前,会先测试循环条件)。举个例子:

>>> for i in range(10):
	if i % 2 ==0:
		print(i)
		continue
	i += 2
	print(i)

0
3
2
5
4
7
6
9
8
11

作业:
1.写一个程序,判断给定的年份是否是闰年。
闰年定义:能被4整除但不能被100整除,或者能被400整除。

# 判断闰年
temp = input("Please input a year:")
while not temp.isdigit():
    temp = input("Your input is wrong! Please input again:")
year = int(temp)
if (year % 4 == 0 and year % 100 != 0) or year % 400 == 0:
    print(year, "is a leap year!")
else:
    print(year, "is not a leap year!")

2.请编写一个程序,打印出0 ~ 100的所有奇数。

row = 0  # 用于分行
for i in range(100):
    row += 1
    if i % 2 == 1:
        print(i, end=' ')
    if row % 10 == 0:
        print()  # 打印空行

3.说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 or 9
not or and 的优先级为:not > and > or
按照优先级给它们加上括号:(not 1) or (0 and 1) or (3 and 4) or (5 and 6 )or(7 and 8) or 9
就是== 0 or 0 or 0 or 4 or 6 or 9 == 4
为什么是4?短路逻辑,3 and 4 = 4,而3 or 4 ==3.
4.目测以下程序会打印什么?

while True:
    while True:
        break
        print(1)
    print(2)
    break
print(3)

break
会打印:
2
3
5. 编写一个程序,求100~999之间的所有水仙花数。
如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如153=1^3 + 5^3 + 3^3。

for i in range(100, 1000):
    sum = 0
    temp = i
    while temp:
        sum += (temp % 10) ** 3  # 以此取得个、十、百位的三次幂
        temp //= 10  # 依次去掉个、十、百位
    if sum == i:
        print(i)

6.计算 1 - 2 + 3 - 4 + … +99中除了88以外所有数的值

sum_number = 0
for i in range(1, 100):
    if i == 88:
        continue
    if i % 2 == 1:  # 奇数
        sum_number += i
    else:
        sum_number += -i
print(sum_number)

7.设计一个验证用户密码的程序,用户只有三次机会输入错误,不过用户输入的内容包括“*”则不计算在内。

count = 3
_passwd = "jacky001"
while count:
    passwd = input("Please input your password:")
    if passwd == _passwd:
        print("hello jack, entering the project...")
    elif "*" in passwd:
        print("There can't be '*' in the password, ", count, "times left", end=' ')
        continue
    else:
        print("your password is wrong,", count - 1, "times left.", end=' ')
        count -= 1
  • #写完作业的小伙伴不妨在评论区扣个1,也许你经常不这么做,haha…
  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值