day05-if语句、循环语句学习

一、if结构

语句块通过且只能通过缩进来表示(不使用begin/end,也不使用花括号),if 后面的条件判断语句也不用跟圆括号

if语句用于有条件地执行,语句条件为True时候执行,条件为False,跳出子句,并能够嵌套。

1. 语法构成:

* if 关键字
* 条件(求值为True或者False的表达式)
* 冒号
* 缩进的代码块

其实所有的控制流语句都是以冒号结尾 ,例如 if 、while 、for 、else等

简单示例:

name = input("请输入用户名:")
if name == "root":
    passwd = input("请输入密码:")
    if len(passwd) > 5 and passwd == "123456":
        print(f"欢迎您,{name}")
    else:
        print(f"{name},你的密码不正确")
else:
    print(f"找不到用户:{name}")

2. 常见的类假:

用作布尔表达式(如用作if语句中的条件)时,下面的值都将被解释器视为假:
False None 0 “” () [] {} 0.0

举例:

s1 = ""
num1 = 0
s2 = None
b1 = False
t1 = ()
t2 = []
t3 = {}
# or短路,只要有个一个为真打印True
if s1 or s2 or b1 or t1 or t2 or t3:
    print("True")
else:
    print("False")
# not 取反 and 短路
if not s1 and not s2 and not b1 and not t1 and not t2 and not t3:
    print("True")
else:
    print("False")

输出结果:

False
True

3. elif语句

python 中没有switch case 语句,但我们可以通过 if… elif… elif… else 来实现

举例:

http_code = input("请输入一个HTTP状态码:")
if http_code == "200":
    print("请求成功")
elif http_code == "404":
    print("Not Found")
elif http_code == "500":
    print("服务器内部错误,无法完成请求")
else:
    print("找不到代码")

Python中没有用花括号来构造代码块而是使用了缩进的方式来表示代码的层次结构,如果if条件成立的情况下需要执行多条语句,只要保持多条语句具有相同的缩进就可以了。换句话说连续的代码如果又保持了相同的缩进那么它们属于同一个代码块,相当于是一个执行的整体。缩进可以使用任意数量的空格,但通常使用4个空格,建议大家不要使用制表键或者设置你的代码编辑工具自动将制表键变成4个空格,pycharm默认制表键就是4个空格。

当然也可以使用结构模式匹配 match case语句

match case 实现上述的状态码查看:

http_code = input("请输入一个HTTP状态码:")
match http_code:
    case "200":
        print("请求成功")
    case "404":
        print("Not Found")
    case "500":
        print("服务器内部错误,无法完成请求")
    case _:
        print("找不到代码")

注意:match case 是python 3.10版本才引入的!!!


二、循环结构

在Python中构造循环结构有两种做法,一种是for-in循环,一种是while循环。

1. for-in循环

1.1.语法构成:

* for 关键字
	* 一个或者多个变量名
	* in 关键字
	* 可用于遍历的对象

1.2 使用场景:

1.当要遍历一个可迭代对象,例如(str、list、tuple、dict等对象)使用for in循环

例如:

s1 = "好好学习,天天向上"
for s in s1:
    print(s)
numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
for number in numbers:
	print(number)

2.当明确循环次数是可以使用:

示例1-100求和:

#1-100求和
sum = 0
for num in range(1, 101):
    sum += num
print(sum)

示例2素数判断:

#以下是判断2-9中的哪些数是否是素数
#素数指的是只能被1和自身整除的正整数(不包括1)。
for num in range(2, 10):
    is_prime = True
    for factor in range(2, int(math.sqrt(num)) + 1):
        if num % factor == 0:
            is_prime = False
            break
    if is_prime:
        print(num, end=' ')
  • 上面的range(2,10),可以用来构造一个2到10 的范围
  • 上面内容中的break:终止它所在的那个循环 ,另外一个关键字continue 则是跳到本次循环开始处,重新对循环条件求值 。
  • 上面内容演示了循环结构也是可以嵌套的,构成多次循环
  • 上面的math.sqrt(num) 用于返回一个数的平方根;不能用于负数
range([start, ]stop[, step])  
#根据参数start(包含,默认为0)、 stop(不包含)和step(默认为1)以序列的方式返回指定范围内的一系列值(注意范围是左闭右开)

range用法示例:

for num in range(1, 10):
    print(num,end=' ')
print()
for num in range(1, 10, 2):
    print(num, end=' ')
print()
for num in range(10, 1, -2):
    print(num, end=' ')

输出:

1 2 3 4 5 6 7 8 9 
1 3 5 7 9 
10 8 6 4 2

2. while循环:

2.1 语法构成:

  • while 关键字
  • 条件(求值为True或者False的表达式)
  • 冒号
  • 缩进的代码块

使用场景:

构造不知道具体循环次数的循环结构, 推荐使用while循环。

示例用while 实现1-100求和:

sum, num = 0, 1
while num <= 100:
    sum += num
    num += 1
print(sum)

示例用while实现猜数字,没猜对就一直猜

import random
secret_number = random.randint(1, 10)  # 1<=secret_number<=10
while True:
    num = int(input("请输入1-10内你要猜的数字:"))
    if num > secret_number:
        print("猜大了")
    elif num < secret_number:
        print("猜小了")
    else:
        print("猜对了")
        break

三、练习:

打印三角形

*
   ***
  *****
 *******
*********

参考答案:

for i in range(5):
    for _ in range(5 - i - 1):
        print(' ', end='')
    for _ in range(2 * i + 1):
        print('*', end='')
    print()