• 程序的描述语言:
  1. 自然语言:使用人类语言直接描述程序
  2. 流程图
  3. 伪代码
  • 程序的组织结构
    顺序结构
点击查看代码
示例4-1 顺序结构的使用
#赋值运算符的顺序 从右到左
name='张三'
a=b=c=('room')#链式赋值
a,b,c,d='room'#字符串分解赋值
print(a)
print(b)
print(c)
print(d)

print('---------输入输出结构也是典型的顺序结构----------')
name=input('请输入您的姓名:')
age=eval(input('请输入您的年龄:'))
luck_number=eval(input('请输入您的幸运数字:'))
print('姓名:',name)
print('年龄:',age)
print('幸运数字:',luck_number)


一、选择/分支结构(True就执行,Flase就跳过

1、单分支结构

if 表达式:
    语句块
点击查看代码
示例4-2 单分支结构
number=eval(input('请输入您的六位号码:'))
#使用if 语句
if number==987456: #等值判断
    print('恭喜你,中奖了')

if number!=987654:
    print('您未中本期大奖')

print('------以上if判断表达式,是通过比较运算计算出来的,结果是bool类型-----')
n=98 #赋值操作
if n%2: #98%2的余数是零,0的布尔值Flase,非0的布尔值是True
    print(n,'是奇数')

if not n%2:
    print(n,'是偶数')


print('---------如何判断一个字符串是空字符串-----------')
x=input('请输入一个字符串:')
if x: #在Pathon中一切对象每个对象都有一个布尔值,而非空字符串的布尔值为True,空字符串的布尔值为Flase
    print('x是一个非空字符串')

if not x:#空字符串的布尔值为Flase
  print('x是一个空字符串')

print('----表达式也可以是一个单纯的布尔型变量--------')
flag=eval(input('请输入一个布尔类型的值:True或Flase'))
if flag:
    print('flag的值为True')
if not flag:
    print('flag的值为Flase')

print('-----语句中只有一句代码,可以把语句直接写在冒号后面------')
a=10
b=5
if a>b:max=a #语句只有一句,赋最大值
print('a和b的最大值为:',max)

2、多分支结构

if 表达式:
    语句块
else:
    语句块
点击查看代码
示例4-3双分支分支结构
number=eval(input('请输入您的中奖号码:'))
#if...else
if number==987654:
    print('恭喜你中奖了')
else:
    print('您未中本期大奖')

print('------以上代码可以使用条件表达式进行简化(只有两种选择)----')

result='恭喜你中奖了!' if number==987654 else '您未中本期大奖'
print(result)

print('恭喜你中奖了!' if number==987654 else '您未中本期大奖')

3、多分支结构

  if 表达式1:
     语句块1
 elif 表达式2:
     语句块2
 elif 表达式n:
     语句块n
 else
     语句块n+1
点击查看代码
示例4-4多分支结构
score=eval(input('请输入您的成绩:'))
#多分支结构
if score<0 or score>100:
    print('成绩有误')
elif 0<=score<60:
    print('E')
elif 60<=score<=70:
     print('D')
elif 70<=score<80:
    print('C')
elif 80<=score<90:12
    print('B')
else:
    print('A')

4、选择结构的嵌套
点击查看代码
示例4-5嵌套if的使用
answer=input('请问您喝酒了吗?')
if answer=='y':#表示喝酒了
    poof=eval(input('请输入酒精含量:'))
    if poof<20:
        print('构不成酒驾,祝您一路平安')
    elif poof<80: #20<=poof<80
        print('已构成酒驾,请不要开车')
    else:
        print('已构成醉驾,请千万不要开车')

else:
    print('你走吧,没你啥事')

在使用and连接多个条件判断时,只有同时满足多个条件,才能执行if后面语句块

点击查看代码
示例4-6使用and连接多个选择条件
use_name=input('请输入您的用户名:')
pwd=input('请输入您的密码:')
if use_name=='ysj' and pwd=='888888':
    print('登陆成功')
else:
    print('用户名或密码不正确')

在使用or连接多个条件判断时,只要满足一个条件,就能执行if后面语句块

点击查看代码
示例4-7使用or连接多个条件
score=eval(input('请输入您的成绩:'))
if score<0 or score>100:
    print('成绩无效')
else:
    print('您的成绩为:',score)


示例4-8Pathon3.11新特性——模式匹配
score=input('请输入成绩等级:')
match score:
    case 'A':
        print('优秀')
    case 'B':
        print('良好')
    case 'C':
        print('中等')
    case 'D':
        print('及格')
    case 'E':
        print('不及格')


二、循环结构

遍历循环结构for,无限循环结构while

for 循环变量 in 遍历对象:
      语句块
for 循环变量 in 遍历对象:
     语句块1
else:
     语句块2

点击查看代码
示例4-9遍历for'循环的使用
#遍历字符串
for i in 'hello':
    print(i)

#range()函数,Pathon中的内置函数,产生一个(n,m)的整数序列,包含n,但不包含m
for i in range(1,11):
    #print(i)
 if i%2==0:
     print(i,'为偶数')

#计算1-10之间的累加和
s=0 #用于存储累加和
for i in range(1,11):
    s+=i
print('1-10之间的累加和为',s)
print('-----------判断100-999之间的水仙花数-----')
'''
153=3*3*3+5*5*5+1*1*1
'''
for i in range(100,1000):
    sd=i%10#获取个位上的数字
    tend=i//10%10#获取百位上的数字
    hundred=i//100 #获取百位上的数字
    #判断
    if sd**3+tend**3+hundred**3==i:
        print(i,'为水仙花数')

示例4-10遍历循环的扩展形式
s=0 #用于存储累加和
for i in range(1,11):
    s+=i
else:
    print('1-10之间的累加和为',s)

while 表达式:
    语句块
while 表达式:
    语句块1
else:
    语句块2

while 循环的四个步骤:
1)初始化变量
2)条件判断
3)语句块
4)改变变量

点击查看代码
示例4-11无限循环while的使用
#(1)初始化变量
answer=input('今天要上课吗?y/n')
while answer=='y': #(2)条件判断
    print('好好学习,天天向上')#(3)语句块
    #(4)改变变量
    answer=input('今天要上课吗?y/n')

#求1-100之间的累加和
s=0 #存储累加和
i=1 #(1)初始化变量
while i<=100: #(2)条件判断
    s+=i #(3)语句块
    #(4)改变变量
    i+=1 #相当于i=i+1
print('1-100之间的累加和为:',s)

示例4-12无限循环while的扩展形式
#求1-100之间的累加和
s=0 #存储累加和
i=1 #(1)初始化变量
while i<=100: #(2)条件判断
    s+=i #(3)语句块
    #(4)改变变量
    i+=1 #相当于i=i+1
else:
  print('1-100之间的累加和为:',s)

示例4-13使用无限循环去模拟用户登录
#(1)初始化变量
i=0
while i<3: #(2)条件判断
    #(3)语句块
   user_name=input('请输入用户名:')
   pwd=input('请输入密码:')
    #登陆操作,if...else
   if user_name=='ysj' and pwd=='888888':
        print('系统正在登陆,请稍后')
        #需要改变循环变量,目的退出循环
        i=8 #第三行判断i<3,8<3 Fals退出 while循环
   else:
        if i<2:
            print('用户名或密码不正确,您还有',2-i,'次机会')
        i+=1 #相当于i=i+1 #(4)改变变量

 #单分支判断
   if i==3: #当用户名或密码输入3次不正确的时候,循环结束,i最大值为3
     print('对不起,三次均输入错误')

循环结构也可以互相嵌套

while 表达式1:
   while 表达式2:
       语句块2

for 循环变量1 in 遍历对象1:
     for 循环变量2 in 遍历对象2:
        语句块2

嵌套尽量不要超过3层
若外层循环要进行3次,那内层循环要进行4次,总循环进行了12次
无限循环与遍历循环可以互相嵌套

  • 嵌套循环通常用于输出一些常见图形,如长方形,三角形,菱形等
点击查看代码
示例4-14长方形和直角三角形
#三行四列
for i in range(1,4):
    for j in range(1,5): #内层循环
        print('*',end='')
    print() #空的print 作用是换行

print('------------直角三角形--------')
for i in range(1,6): #表示5行
    #*的个数与行数相同,rang(1,2)
   for j in range(1,i+1):
       print('*', end='')
   print()


示例4-15倒三角形和等腰三角形
#我的思路
print('-------------倒直角三角形-----')
for i in range(1,6): #表示5行
   s=6-i
   for j in range(1,i+1):
       print('*'*s, end='')
       s-=s
   print()

print('-----------')
#1---->5 rang(1,6);2--->4 rang(1,5);3--->3 rang(1,4);4--->2 rang(1,3);5--->1 rang(1,2)

for i in range(1,6):#i表示行号
    for j in range(1,7-i):
        print('*',end='')
    print()

print('----等腰三角形-------')
'''
&&&&*
&&&***
&&*****
&*******
*********
'''

for i in range(1,6):#外层循环5行
    #倒三角形
  for j in range(1,6-i):
      print(' ',end='')
  #1,3,5,7...等腰三角形,range(1,2),range(1,4),range(1,6),range(1,8),range(1,10)
  for k in range(1,2*i):
     print('*',end='')
  print() #当两个并列for循环执行完成后,再换行

示例4-16菱形
row=eval(input('请输入菱形行数:'))
while row%2==0:#判断行数的奇偶性
    print('重新输入菱形行数')
    row=eval(input('请输入菱形行数:'))
#输出菱形
top_row=(row+1)//2 #上半部分行数
for i in range(1,top_row+1):
    for j in range(1,top_row+1-i):
        print(' ', end='')
    # 1,3,5,7...等腰三角形,range(1,2),range(1,4),range(1,6),range(1,8),range(1,10)
    for k in range(1,2*i):
        print('*', end='')
    print()  # 当两个并列for循环执行完成后,再换行
'''
&&&&*
&&&***
&&*****
&*******
*********
&*******
&&*****
&&&***
&&&&*
'''
#下半部分
bottom_row=row//2
for i in range(1,bottom_row+1):
    # 直角三角形
    for j in range(1,i+1):
        print(' ',end='')
#倒三角形
    for k in range(1,2*bottom_row-2*i+2):#1-->range(1,8);2--->range(1,6),3--->range(1,4),4--->range(1,2)
        print('*',end='')
    print()
'''#我的思路
bot_row = (row + 1) // 2 -1 # 下半部分行数
for i in range(1, bot_row + 1):
    for j in range(1, i+1):
            print(' ', end='')
    for k in range(1,2*bot_row+2-2*i):
        print('*',end='')
    print()
'''

示例4-17空心菱形
'''#我的思路方法一

&&&*
&&*$*
&*$$$*

s=0
for i in range(1, top_row + 1):
    for j in range(1, top_row+2-i):
        print(' ',end='',)
    print('*',end='')
    s+=1
    if s==1:
     print()
    else:
     for k in range(1,2*s-2):
        print(' ',end='')
     print('*',end='')
     print()

&&*$*
&&&*
bot_row = (row + 1) // 2-1
s=bot_row
for i in range(1, bot_row + 1):
    for j in range(1, i+2):
        print(' ',end='',)
    print('*',end='')
    s-=1
    if s==0:
     print()
    else:
     for k in range(1, 2*s):
      print(' ', end='')
     print('*', end='')
     print()
'''

row=eval(input('请输入菱形行数:'))
while row%2==0:#判断行数的奇偶性
    print('重新输入菱形行数')
    row=eval(input('请输入菱形行数:'))
#输出菱形
top_row=(row+1)//2 #上半部分行数
for i in range(1,top_row+1):
    for j in range(1,top_row+1-i):
        print(' ', end='')
    # 1,3,5,7...等腰三角形,range(1,2),range(1,4),range(1,6),range(1,8),range(1,10)
    for k in range(1,2*i):
        if k==1 or k==i*2-1:
            print('*', end='')
        else:
            print(' ',end='')
    print()  # 当两个并列for循环执行完成后,再换行
'''
&&&&*
&&&***
&&*****
&*******
*********
&*******
&&*****
&&&***
&&&&*
'''
#下半部分
bottom_row=row//2
for i in range(1,bottom_row+1):
    # 直角三角形
    for j in range(1,i+1):
        print(' ',end='')
#倒三角形
    for k in range(1,2*bottom_row-2*i+2):#1-->range(1,8);2--->range(1,6),3--->range(1,4),4--->range(1,2)
        if k == 1 or k==(2*bottom_row-2*i+2-1):
            print('*', end='')
        else:
            print(' ', end='')
    print()



三、程序跳转语句
1、break的使用

  • break在while中的使用
while 表达式1:
     执行代码
      if 表达式2:
          break

点击查看代码
示例4-18跳转语句break 在while 循环中的使用
s=0 #存储累加和
i=0 #(1)初始化变量
while i<11: #(2)条件判断
#(3)语句块
   s+=i
   if s>20:
       print('累加和大于20的当前数为:',i)
       break
   i+=1#(4)改变变量

print('-----------')
i=0#统计登录次数
while i<3:
    user_name=input('请输入用户名:')
    pwd=input('请输入密码:')
    if user_name=='ysj' and pwd=='888888':
        print('系统正在登陆,请稍后...')
        break
    else:
        if i<2:
            print('用户名或密码不正确,你还有',2-i,'次机会')
        #(4)改变变量
    i+=1
else:
    print('三次均输入错误!')

  • break在for循环中的使用
for 循环变量 in 遍历对象:
     执行代码
     if 表达式:
        break

点击查看代码
示例4-19break在for循环中的使用![]
for i in 'hello':
    if i=='e':
        break
    print(i)
print('------------')

for i in range(3):
    user_name = input('请输入用户名:')
    pwd = input('请输入密码:')
    if user_name == 'ysj' and pwd == '888888':
        print('系统正在登陆,请稍后...')
        break
    else:
        if i < 2:
            print('用户名或密码不正确,你还有', 2 - i, '次机会')
else:
    print('三次均输入错误!')



2、continue的使用

  • continue在while中的使用
while 表达式1:
    执行代码
   if 表达式2:
      continue

点击查看代码
示例4-20跳转语句continue在while中的使用
s=0
i=1
while i<=100:
    if i%2==1: #奇数
        i+=1
        continue #不再执行后面代码
    #累加求和的代码
    s+=i
    i+=1
print('1-100之间的偶数和:',s)

  • continue在for循环中的使用
  for 循环变量 in 遍历对象:
        执行代码
        if 表达式:
          continue

点击查看代码
示例4-21continue在for循环中的使用
s=0
for i in range(1,101):
    if i%2==1:
        continue
        #累计求和
    s+=i
print('1-100之间是我偶数和为:',s)

break与continue的区别
break直接跳出整个循环,continue只跳出此次循环,继续执行下次循环



四、空语句pass

在语法结构中只起到占位符的作用,使语法结构完整,不报错,一般用于if、for、while、函数的定义、类的定义中

点击查看代码
示例4-22空语句pass
if True:
    pass

while True:
    pass
for i in range(10):
    pass 


点击查看代码
实战一
#我的思路
year=eval(input('请输入年份;'))
if year%4==0 and year%100!=0:
    print(year,'年是闰年')

elif year%400==0:
    print(year, '年是闰年')
else:
    print(year, '年是平年')
#老师思路
year=eval(input('请输入年份;'))
if (year%4==0 and year%100!=0) or year%400==0:
    print(year,'年是闰年')
else:
    print(year, '年是平年')

点击查看代码
实战二
#(1)初始化变量
answer='y'
#(2)条件判断
while answer=='y':
    #(3)语句块
    print('---------欢迎使用10086查询功能------------')
    print('1、查询当前余额'
          '\n2、查询当前的剩余流量'
          '\n3、查询当前的剩余通话时长'
          '\n0、退出系统')
    search=input('请输入您要执行的操作:')


    if search=='1':
      print('当前余额为:234.5元')
    elif search=='2':
       print('当前剩余流量为:4GB')
    elif search=='3':
       print('当前剩余通话时间为185544分钟')
    elif search=='0':
       print('退出系统!谢谢您的使用')
       break
    else:
       print('对不起,您输入有误,请重新输入')
    #(4)改变变量
    answer = input('还要继续操作吗?y/n')
else:
    print('对不起您输入有误,请重新输入')


点击查看代码
实战三
for i in range(1,10):
    for j in range(1,i+1):
        print(str(i)+'*'+str(j)+'='+str(i*j),end='\t')
    print()

点击查看代码
实战四
#我的思路
import random
rand = random.randint(1, 100) #产生1-100之间的随机数

count=1 #记录猜数次数
number=eval(input('在我心中有个数,1-100之间,请你猜一猜;'))
while  number!=rand:
    count+=1
    if number>rand:
        print('大了')
    else:
        print('小了')

    number = eval(input('在我心中有个数,1-100之间,请你猜一猜;'))
    print(count)
else:
    print('猜对了')
    print('共猜了',count,'次')


#老师的思路
import random
rand = random.randint(1, 100) #产生1-100之间的随机数

count=1 #记录猜数次数

while count<=10:
    number = eval(input('在我心中有个数,1-100之间,请你猜一猜;'))
    if number==rand:
        print('猜对了')
        break
    elif number>rand:
        print('大了')
    else:
        print('小了')
    count+=1
#判断次数
if count<=3:
    print('真聪明,一共猜了',count,'次')
elif count<=6:
    print('还可以,一共猜了',count,'次')
else:
    print('猜的次数有点多,一共猜了',count,'次')