day02-基础语法之分支循环结构

分支结构与循环结构

      • 一、分支结构
        • 1.1 单分支结构
        • 1. 2 双分支结构
        • 1.3 多分支结构
        • 1.4 random模块随机数的使用
        • 1.5 嵌套分支结构
        • 1.6 嵌套分支的应用
        • 1.7 三目运算符
        • 1.6 分支结构的综合应用
      • 二、循环结构
        • 1. for 循环结构:
        • 2. while循环结构:
        • 3. 两种跳出循环的关键字
        • 4.面试题(试说明break和continue的区别)
        • 5. for else循环语句及其嵌套循环
        • 6.循环结构的综合应用
          • a、输出100以内所有是2的倍数的和
          • b、输出1~100的乘积:
          • c、输入任意一个整数,判断其是几位数(只允许使用循环)
          • d、输入所有的水仙花数(水仙花数是三位数),形如153 = 1 ** 3 + 5 ** 3 + 3 **3
        • 7. 9x9乘法表的四种表示方法

一、分支结构

  • 分支结构又称选择结构,其关键字主要由 if、elif、else组成。
  • 分支结构细化为四种: 单分支结构、双分支结构、多分支结构、嵌套分支结构。
  • 其中有一种是比较特殊的: 单分支结构可以简化写成 三目运算符 的方式。

1.1 单分支结构

day02-基础语法之分支循环结构_第1张图片

  • 单分支结构由 if 关键字组成。
语法:		if         条件语句:
				代码块或表达式
用法:
# a、常量
print("start~~~~")
if 35:
    print("True")
    
print("end~~~~")

# b、变量
num = "abc"
if num:
    print("True")
    
'''
总结:
	1. 单分支的特点:要么执行,要么不执行。
	2. 只适用于一种情况的判断。
'''

1. 2 双分支结构

day02-基础语法之分支循环结构_第2张图片

  • 双分支结构由if、else关键字组成。
语法:		if         条件语句:
		  	     代码块或表达式
		  else       条件语句:
		  	     代码块或表达式
用法:
# 网吧上网问题:小于18岁的未成年不得上网,满足条件可以充值。
age = 16
if age < 18:
    print("未成年不得进入网吧上网")
else:
    print("欢迎光临,请充值")
    
"""
总结:
	1. 双分支的特点:可以实现二选一的操作,只执行两种方式中的一种。
	2. 能实现两种情况的判断。
"""

1.3 多分支结构

day02-基础语法之分支循环结构_第3张图片

  • 多分支结构由if、else if、else关键字组成,不过在python中,else if 简化成了elif。
语法:		if        条件语句:
		       代码块或表达式
		  elif      条件语句:
		  	   代码块或表达式
	  	  elif      条件语句:
		  	   代码块或表达式
          .....
		  else      条件语句:
		  	   代码块或表达式
其中else 关键字后边条件语句可跟可不跟,但代码块必须得有。
用法:
# 输入表示星期的数字,判断当日是星期几。
day = input("请输入表示星期的数字:")

if day == '1':
	print('Mon')
elif day == '2':
	print("Tues")
elif day == '3':
	print("Wed")
elif day == '4':
    print("Thur")
elif day == '5':
	print("Fri")
elif day == '6':
	print("Sat")
elif day == '7':
	print("Sun")
else:
	print("输入有误,请重新输入")

'''
总结:
	1. 多分支结构的特点:可以实现多选一的操作,只执行其中一条选择代码语句。
	2. 可以适用于3种及3种以上的条件判断。
'''

1.4 random模块随机数的使用

导入随机数模块 random,通常导入模块方法有:

  1. import random
  2. from random import 方法:
# 方法:
# a、random.randint(0,100):导入0~100之中的随机数,闭区间[0,100]
'''
模拟彩票中奖:
	1. 让程序产生一个随机数[0~100]
	2. 让用户输入一个0~100之间的数
	3. 比较:相等即为中奖。
'''
import random

random_num = random.randint(0,100)
print(f"产生的随机数是:{random_num}")

input_num = int(input("请输入一个0~100之间的数:"))

if input_num == random_num:
    print("恭喜你,中大奖了")
else:
    print("谢谢参与")
    
# b、random.choice(容器):可以控制步长,得到奇数或者偶数。
import random

random_num = random.choice(range(101))
print(f"产生的随机数是:{random_num}")

input_num = int(input("请输入一个0~100之间的数:"))

if input_num == random_num:
    print("恭喜你,中大奖了")
else:
    print("谢谢参与")
    
'''
总结:注意这两者的区别
	1. random.randint(start,end): 取得是闭区间的值,步长不可改变。[start,end]
	2. random.choice(容器):后边接的是容器,可以是range容器、或者是字符串、列表、元组等可迭代对象,步长可变。
'''

1.5 嵌套分支结构

  • 嵌套分支结构就是,在一种分支结构内部另外嵌套分支结构,适用于只有在一种情况满足后的情况下,才能对剩下的条件作出判断。
  1. 嵌套分支可以单分支、双分支、多分支里的任意两种或者多种的组合。
  2. 嵌套分支通常是用来解决互相关联的选择性问题。
  3. 为了代码的可读性,嵌套层数一般最好不要超过4层。
  4. 嵌套分支里边,注意缩进问题。indent

1.6 嵌套分支的应用

# 1.判断一个年份是否是闰年
year = input("请输入一个年份:")

# 字符串.isdigit():判断字符串非空且全部由数字组成,结果为True。
if year.isdigit():
    year = int(year)
    if (year % 4 == 0 and year % 100 != 0) or (year % 400 == 0):
        print(f"{year}是闰年")
    else:
        print(f"{year}是平年")
else:
    print("输出有误")
    
# 2. 从控制台输入一个五位数,判断是不是回文数。
'''
回文数的特点:
	1.形如12321、12221、13531,头尾相等。
	2.最少是三位数。
'''
five_num = input("请输入一个五位数:")

if five_num.isdigit() and len(five_num) == 5:
	if five_num[0] == five_num[4] and five_num[1] == five_num[3]:
        print(f"{num}是一个回文数")
    else:
        print(f"{num}不是一个回文数")
else:
    print("格式错误,请重新输入")

1.7 三目运算符

  • 三目运算符本质上就是双分支结构的简化写法,其基本语法结构如下:
语法:      变量 = 结果1 if 条件语句 else 结果2

用法:
# 判断用户是否成年
# 方案一:双分支写法
age = int(input("请输入你的年龄:"))

if age < 18:
    print("未成年")
else:
    print("成年")
    
# 方案二:三目运算符简化写法
age = int(input("请输入你的年龄:"))

result = "未成年" if age < 18 else "成年"
print(result)

1.6 分支结构的综合应用

  • a、判断用户登录密码是否正确
# 制作一个简单的登录系统
userName = input('请输入你的用户名:')
    pwd  = input('请输入你的登录密码:')
    
if userName == 'admin' and pwd == '123456':
	print(用户登录成功)
else:
	print(账户或密码输入有误,请重新输入)
  • b、根据学生的相应成绩划分等级。
# 给学生成绩划分ABCDE等级
score = int(input('请输入你的成绩:'))

if score >= 90:
	print('A')
elif 80 <= score <90:
	print('B')
elif 70<= score <80:
	print('C')
elif 60 <= score <70:
	print('D')
else:
	print('E')
  • c、判断一个数是不是偶数,然后再判断能不能被10整除。
# 判断一个数是不是偶数,然后再判断能不能被10整除
number1 = int(input('请输入一个数字:'))

if number1 % 2 == 0print(f'{number1}是一个偶数')
	if number1 % 10 == 0:
		print(f'{number1}能够被10整除')
	else:
		print(f'{number1}不能够被10整除')
else:
	print(f'{number1}是一个奇数')
  • d、判断一个年份是不是闰年?
'''
判断一个年份是不是闰年的条件:
1. 年份能够被400整除的是闰年,否则是平年。
2. 年份能够被4整除,并且不能被100整除的是闰年,否则是平年。
'''
# a、双分支分支结构实现
year= 2022
if year % 400 == 0 or(year % 4 == 0 and year % 100 != 0):
	print(f'{year}是闰年')
else:
	print(f'{year}是平年')

# b、三目运算符结构实现
year = 2022
result ='闰年' if year % 400 == 0 or(year % 4 == 0 and year % 100 != 0) else '平年'
print(result)

二、循环结构

  • 循环结构的关键字由 for 、in、while、break、continue、else组成。

1. for 循环结构:

day02-基础语法之分支循环结构_第4张图片

  • for 循环结构由关键字 for、in、和容器构成。其语法为:
语法:		for 变量  in   容器:
				 代码块或表达式
用法:
# 计算1~100的和
total = 0
for i in range(1,101):
    total += i
print(total)				# 5050

# 容器型数据结构的遍历
# a、字符串
str1 = 'abcde'
for i in str1:
    print(i)				# a b c d e

# b、列表
list1 = [23,4,5]
for i in list1:
    print(i)				# 23 4 5

# c、元组
tuple1 = (1,2,3,4,5)
for i in tuple1:
    print(i)				# 1 2 3 4 5

那么你有没有注意到此时print语句是和for 关键字在同一缩进级别呢,print 放到缩进里边去试一试有什么不同?

# print在缩进里边,连续打印多个值
sum = 0
for i in range(0,4):
	sum += i
	print(sum)				# 0 1 3 6

# print在缩进外边,只打印最后一个值
sum = 0
for i in range(0,4):
    sum += i
print(sum)					# 6

'''
总结:使用for - in 循环需要注意的几点问题。
	1. 常用来解决重复繁琐的问题,只适合循环次数已经确定的问题。
	2. for循环语句后边的冒号不可遗失,切要注意中英文下的符号。
	3. 注意缩进格式:
	- 如果需要连续打印值,print就在缩进里边。
	- 只打印一次值,那么放在缩进外边就好。
'''
  • for循环中range()容器的用法:
# range()容器是左闭右开区间[)。
# M是范围的起点,N是范围的终点,step是步长,默认值为1,可以不写。
range(M,N,step) 

range(1,11)				# 获取1-10十个元素。
range(1,11,3)			# 获取1、4、7、10四个元素
range(10)				# 获取0-9十个元素
range(12,4)				# 获取不到元素
range(0,10,-1)			# 获取不到元素
range(11,1,-1)			# 从11取到2,一共10个元素

for i in range(1,11):
    print(i)
    
for i in range(1,11,3):
    print(i)

for i in range(10):
    print(i)
    
for i in range(11,1,-1):
    print(i)

2. while循环结构:

day02-基础语法之分支循环结构_第5张图片

  • while循环结构由关键字while构成,其语法为:
语法:			while     条件:
                代码块或表达式

用法:
# 计算1~100的和
total = 0
i = 1
while i <= 100:
    total += i
    i += 1
print(total)			# 5050

'''
总结:
	1. while循环既适合循环次数确定的循环问题,又适合循环次数不确定的循环问题。
	2. while使用前变量的值需要初始化,否则将会报错:变量未定义。
	3. 注意缩进问题,否则死循环。
	4. 通常使用while循环,常和break语句搭配使用。
'''

3. 两种跳出循环的关键字

  • break:立刻结束当前所在循环只可以跳出当前层次所在的循环,退出程序。
  • continue:直接跳过当前所在循环,进入下一次循环,继续执行程序。
用法:
# break
for i in range(1, 11):
	if i % 5 == 0:
	print('*****')
	break
    print('-----')
else:
	print(i)						# 1 2 3 4 *****
    
# continue
for i in range(1, 11):
	if i % 5 == 0:
	print('*****')
	continue
    print('-----')
else:
	print(i)						# 1 2 3 4 ***** 6 7 8 9 *****

4.面试题(试说明break和continue的区别)

两种循环终止语句的特点和区别:

  1. break: 打断,表示结束当前循环【break书写在哪一个循环中,就结束哪个循环,就近原则。】
  2. continue: 继续,表示结束当前循环的本次循环,继续下一次循环。

5. for else循环语句及其嵌套循环

  • for else 循环由for、else两种关键字组成。
  • 重点:
  1. for循环正常结束之后(即条件都不满足时),else语句被触发;

  2. 如果for循环非正常结束(被break或者是continue结束后),else语句不会被触发。

  • 其基本语法为:
语法:				for    变量  in   容器:
					  	    代码块或表达式
				  else:
				  		    代码块或表达式
用法:
# 找出100以内所有的素数
'''
素数:
	1. 只有1和本身两个因子的整数叫做素数。
	2. 2是最小的素数。
'''
for i in range(2,101):
    if i == 2:
        print("2是素数")
    else:
        for j in range(2,i):
            if i % j == 0:
                print(f"{i}不是素数")
                break
        else:
            print(f"{i}是素数")

6.循环结构的综合应用

  • a、输出100以内所有是2的倍数的和
# 打印出100以内所有是2的倍数的数字的和
sum = 0
for i in range(2, 101, 2):
	sum += i
print(sum)

# 方案二:while循环解决问题
i = 0
sum = 0
while i <= 100:
    if i % 2 == 0:
        sum += i
    i += 1
print(sum)
  • b、输出1~100的乘积:
# 打印出1*2*3* ......*100的和
i = 1
total = 1
while i <100:
	total *= i
	i += 1
print(total)

# 方案二:
total = 1
for i in range(1,101):
    total *= i
print(total)
  • c、输入任意一个整数,判断其是几位数(只允许使用循环)
# 判断位数未知,使用while循环。
random_integer = int(input("请输入任意一个正整数:"))

count = 0											# 统计输入数的位数
while True:
    random_integer //= 10							# 将原数从十位开始计数
    count += 1
    if random_integer == 0:							# 个位除尽,结束程序。
        break
print(f"random_integer是:{count}位数")
  • d、输入所有的水仙花数(水仙花数是三位数),形如153 = 1 ** 3 + 5 ** 3 + 3 **3
# 方案一
for i in range(100,1000):
    bw = i // 100
    sw = i // 10 % 10
    gw = i % 10
    if i == (bw ** 3 + sw ** 3 + gw ** 3):
        print(f"水仙花数是:{i}")

# 方案二
i = 100
while i <= 1000:
	bw = i // 100
    sw = i // 10 % 10
    gw = i % 10
    if i == (bw ** 3 + sw ** 3 + gw ** 3):
        print(f"水仙花数是:{i}")
    i += 1
  • e、* 打印出一个正直角三角形
# 重复打印5行星星
j = 0								# j 表示行号
while j <= 4:
    i = 0							# 一行星星的打印
    while i <= j:
        print('*',end='')			# 一行内的星星不能换行,取消print默认结束符\n。
        i += 1
	print()							# 每行结束要换行,end结束符默认换行。
    j += 1

7. 9x9乘法表的四种表示方法

day02-基础语法之分支循环结构_第6张图片
9x9乘法表的的实现过程,我认为是最能体现Python中嵌套分支的题目了,没有之一。

代码如下:

# a,使用for循环打印正三角9 * 9乘法口诀表
# 外层循环代表行
for i in range(1, 10):
      # 内层循环代表列
    for j in range(1, i+1):
        # \n换行;\t表示制表符tab。
        # \t能将字符串的长度变整齐,能将字符串的长度变为4的倍数。
        print(f'{i} * {j} = {i * j}', end = '\t')
    print()

# b,使用while循环打印 9*9乘法口诀表
i = 1
while i <= 9:
    j = 1
    while j <= i:
        print(f'{i} * {j} = {i * j}', end = '\t')
        j +=1
    print()
    i +=1
    
# c,使用While - for 循环套用
i = 1
while i <= 9:
    for j in range(1, i + 1):
        print(f'{i} * {j} = {i * j}', end = '\t')
    i +=1
    print()

# d,使用for - while 循环打印乘法表
for i in range(1, 10):
    j = 0
    while j < i:
        j +=1
        print(f'{i} * {j} = {i * j}', end = '\t')
    print()

你可能感兴趣的:(Python知识集,python,开发语言,ipython)