python--第四章 python流程控制语句

一、流程控制语句简介

  Python 代码执行时是按照自上而下顺序执行的
  通过流程控制语句,可以改变程序的执行顺序,也可以让指定的程序反复执行多次
  流程控制语句可以分为两大类:条件判断语句,循环语句

二、条件判断语句

1、if判断语句

 条件判断语句(if语句)
 语法:if 条件表达式:
 				代码块
 执行时流程:if语句在执行时,会先对条件表达式进行求值判断
 		如果为True,则执行if后的语句
 		如果为False ,则不执行
		默认情况下 if 语句仅仅会控制紧随其后的那条语句,如果希望if 可以控制多条语句,则可以在if 后跟一个代码块。
			代码块:代码块中保存着一组代码,同一个代码块中的代码,要么都执行要么都不执行
							代码块就是一种为代码分组的机制
							如果要编写代码块,语句就不能紧随在后边,而是要写一个新行
							代码块以缩进开始,直接代码恢复到之前的缩进级别时结束

# 缩进有两种方式,一个时使用tab键,一个时使用空格缩进,官方文档推荐使用空格。
   python代码中使用的缩进方式必须统一
例如:
if True : print('你猜我出来吗')     # 会出来后面的结果
if False : print('不出来')

num=20
if num > 10 print('num比10大')

# 代码块
if False:
	print('我在代码块')    # 因为式False 所以不会执行。


# 可以使用逻辑运算符来连接多个条件
# 如果希望所有条件同时满足,则需要使用and
# 如果希望只要有一个条件满足即可,则需要使用or
num = 20
if num > 10  and num <20 :
    print('num 比10大,num 比20小')

下面来说下用sublime 怎么设置自动的将tab键转化为4个空格。。。首选项 > 设置用户 > 加上 “translate_tabs_to_spaces”: true,
在这里插入图片描述

2、input函数介绍

# input() 函数
# 该函数主要时用来获取用户输入
# input() 调用后,程序会立即暂停,等待用户输入
#  用户输入完成后,点击回车程序才会继续向下执行
#  用户输入完成后,其输入的内容会以返回值得形式返回
# 注意: input() 的返回值是一个字符串
#  input() 函数中可以设置一个字符串作为参数,这个字符串将会作为提示文字显示。
a = input('请输入任意内容:')
print('用户输入的内容是:',a)


# 获取用户输入的用户名
username =  input('请输入你的用户名:')
# 判断用户名是否是admin
if username == 'admin'
	print('欢迎管理员光临!')

3、if…else and if…elif…else

# 让用户在控制台中输入一个年龄
# age = int(input('请输入您的年龄:'))
# 如果用户的年龄大于18岁,则显示您已经成年了
# if age > 18:
#       print('您已经成年了')

# if-else语句
# 语法:
# if 条件表达式:
#       代码块
# else:
#       代码块
#执行流程:
# if-else语句在执行时,先对if后的条件表达式进行求值判段
#       如果True,则执行if后的代码块
#       如果为False,则执行else后的代码块

age = 18
if age > 17:
    print('您已经成年了')
else:
    print('你还未成年')
# if-elif-else语句
# 语法
#   if 条件表达式:
#       代码块
#   elif 条件表达式:
#       代码块
#   elif 条件表达式:
#       代码块
#   else :
#       代码块

# 执行流程
#   if-elif-else 语句在执行时,会自上向下依次对表达式进行求值判断
#       如果表达式的结果为True,则执行当前代码块,然后语句结束
#       如果表达式的结果为False,则继续向下判断,直到找到True为止
#       如果所有的表达式都是false,则执行else后的代码块
#   if-elif-else中只有一个代码块会执行

age = 210
if age <=18:
    print('你未成年')
elif age >=18 and age <=60:
    print('您处于中年')
elif 60 < age <= 100:
    print('您是正常老年人')
else:
    print('您的年龄很是: ',age)

# 下面说一个datacode现象,永远不会执行的代码就是死代码
ag = 90
if ag > 18:
 print('您是成年')
else ag > 60:
 print('您是老年人')

4、判断语句练习

# 练习1:
#       编写一个程序,获取一个用户输入的整数,然后通过程序显示这个数是奇数还是偶数。
#   获取用户输入的奇数
# 答:
num = int(input('请输入任意一个整数:'))
if num %2 == 0:
    print(num,'是偶数')
else:
    print(num,'是奇数')

import math
math.log2(8)
result=math.log2(8)
print(result)

# 练习2:
# 编写一个程序,检查任意一个年份是否是闰年
# 如果一个年份可以被4整数不能被100整除,或者可以被400整除,这个年份就是闰年
year = int(input('请输入一个年份:'))
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
    print(year,'这个年份是闰年')
else:
    print(year,'是平年')

# 练习3:
#  我家的狗5岁了,5岁的狗相当于多大年龄的人呢
#   其实非常简单,狗的前两年每一年相当于人类的10.5岁,然后每增加一年就增加四岁
#   那么5岁的狗就相当于人类的年龄 10.5 + 10.5 + 4 + 4 + 4 = 33岁
#   编写一个程序,然后用户输入的狗的年龄,然后通过程序显示其相当于人类的年龄
#   如果用户输入负数,请显示一个提示信息

dog_age = float(input('请输入狗的年龄:'))
like_person_age = 0

# 方法一:
# 如果狗的年龄在两岁以下(包含两岁)
if dog_age <= 0:
    print('您输入的不合法请重新输入')
elif dog_age <= 2:
    like_person_age = dog_age * 10.5
# 如果狗的年龄在两岁以上
else :
    like_person_age = 2 * 10.5
    like_person_age += (dog_age - 2) * 4

if dog_age > 0:
    print(dog_age,'岁的狗,相当于', like_person_age,'的人')

# 方法二:

if dog_age <= 0:
    print('您输入的不合法请重新输入')
    if dog_age <= 2:
        like_person_age = dog_age * 10.5
    # 如果狗的年龄在两岁以上
    else :
        like_person_age = 2 * 10.5
        like_person_age += (dog_age - 2) * 4
    print(dog_age, '岁的狗,相当于', like_person_age, '的人')
# 练习 4:
#   从键盘输入小明的期末成绩
#       当成绩为100时,"奖励一辆BMW"
#       当成绩为[80-99]时,'奖励一台iPhone'
#       当成绩为[60-79]时,'奖励一本参考书'
#       其他时,什么奖励也没有

# 答
# 获取小明的成绩
score = float(input('Please enter your grade:'))
# 判断发给的奖励
if score > 100 or score < 0:
    print('您输入的不合法!')
else:
    if score == 100:
        print('宝马,拿去')
    elif score >= 80 and score < 100:
        print('苹果手机拿去')
    elif score >= 60 and score < 80:
        print('参考书给你')
    else:
        print('太差了,每奖励')


# 练习5:
#   大家都知道,男大当婚,女大当嫁,那么女方家长要嫁女儿,会提出一些条件
#       高: 180cm 以上,富:1000万以上,帅:500以上
#       如果这三个条件同时满足,则:‘我一定要嫁给他’
#       如果三个条件有为真的情况,则“嫁吧,比上不足,比下有余”
#       如果三个条件都不满足,则:‘不嫁’

# 获取用户的三个数据,身高,财富,颜值
height = float(input('请输入您的身高(cm)'))
money = float(input('请输入您的财富(万)'))
face = float(input('请输入您的颜值(m2)'))

# 判断到底要不要嫁
if height > 180 and money > 1000 and face > 500:
    print('我一定要嫁给他!')
elif height > 180 or money > 1000 or face > 500:
    print('嫁吧,比上不足,比下有余')
else:
    print('不嫁')

三、循环语句

循环语句通常分为两种:while循环 和 for 循环

1、while 循环语句

# 条件表达式
 while 条件表达式:
 		代码块
 执行流程:
 	while语句在执行时,会先对while后的条件表达式进行求值判断,
 			如果判断结束为True,则执行循环体(代码块)
 			循环体执行完毕,继续对条件表达式进行求值判断,以此类推
 			直到判断结果为False,则循环终止,如果循环有对应的else,则执行else 后的代码块
 	
 	条件表达式恒为True,称为死循环,它会一直运行,慎用!
# 循环的三要素;
# 初始化表达式,通过初始化表达式初始化一个变量
i = 0

# 条件表达式,条件表达式用来设置循环执行的条件
while i < 10:
    # 更新表达式
    i += 1
    print('hello')

练习

# 1、求100以内的所有奇数之和

# 思路,先获取100以内的所有数,# 怎么求100以内所有数的和,判断i 是否是奇数
i = 0
result = 0
while i < 100:
    i += 1
    print(i)
    if i % 2 != 0:
        result = result + i

print(result)
# 彩蛋,求100以内所有的奇数
i = 1
while i < 100:
    print(i)
    i += 2


# 2、求100以内所有的7的倍数,以及个数
i =  7
result = 0
# 创建一个计数器,来记录循环执行的次数,计数器其实就是一个专门用来奇数次数的变量
count = 0
while i < 100:
    count += 1
    result += i
    print(i)
    i += 7
print('总和是:',result)
print('数量是:',count)

# 3、水仙花数是指一个n位数(n>=3),它的每个位上的数字的n 次幂之和等于它本身(如:1 **3 + 5**3 + 3**3=153)
# 求1000以内的所有的水仙花数

# 获取 1000以内的三位数,
i = 100
while i < 1000:
    # 判断 i是否是水仙花数
    # 假设 i的百位数是 a ,十位数是b,个位数是c
    # 求i 的百位数
    a = i // 100
    # 求 i 的十位数
    #b = i // 10 % 10
    b = (i - a * 100) // 10
    # 求 i 的个位数
    c = i % 10
    #print(i,a,b,c)
    #print(i)
    # 判断 i是否是水仙花数
    if a ** 3 + b ** 3 + c ** 3 == i :
        print(i)
    i += 1

# 4、获取用户输入的任意数,判读其是否是质数,质数是只能用1和它本身整除的数

num = int(input('请输入任意一个大于1的整数: '))

#获取所有的可能整除num的整数
i = 2
# 创建一个变量是否是质数,默认它是质数
flag = True
while i < num:
    # 判断num能否被i整除,如果能被整除说明它一定不是质数
    if num % i == 0:
        # print(num)
        # 一旦进入判断 ,则数目num不是质数,则需要将flag修改为flag 修改为false
        flag = False
    i += 1
if flag:
    print(num,'是质数')
else:
    print(num,'不是质数')

2、循环的嵌套

# 在控制台上打印下面的图形
# *****
# *****
# *****
# *****
# *****

# 创建一个循环来控制图形的高度
# 循环嵌套时,外层循环每执行一次,内层循环都要执行一圈
i = 0
while i < 5:
    # 创建一个内层循环来控制宽度
    j = 0
    while j < 5:
        print("*",end='')
        j += 1
    print()
    i += 1

# 打印一个三角形
# 分析;
# *         j < 1 i=0
# **        j < 2 i=1
# ***       j < 3 i=2
# ****      j < 4 i=3
# *****     j < 5 i=4
i = 0
while i < 6:
    j = 0
    while j < i:
        print('*',end='')
        j += 1
    print()
    i += 1
九九乘法表练习
# 练习1:打印九九乘法表
# 1*1=1
# 1*2=2 2*2=4
# 。。。
# 创建一个外层循环来控制图形的高度
i=0
while i< 9:
    i +=1
    #print(i)
    # 创建一个内层循环来控制图形的宽度
    j = 0
    while j <i:
        j += 1
        print(f'{j}*{i}={i*j}',end=" ")
    print()
#练习2: 求100以内的素有的质素
# 创建一个循环,求1-100以内所有的数
i = 2
while i <= 100:
    # 创建一个变量,记录i的状态,默认认为i是质数
    flag = True
    # 判断i是否是质数
    # 获取所有可能成为i的因数的数
    j = 2
    while j < i:
        # 判断i能否被j整除
        if i % j == 0:
            # i 能被j整除,证明i不是质数,修改flag为False
            flag = False
        j += 1
    # 验证结果并输出
    if flag :
        print(i)
    i += 1

3、break和continue练习

# break 练习
# break 可以用来立即退出循环语句
# continue 可以用来跳过当次循环
# break和continue都是只对离他最近的循环起作用
# pass 是在代码中起到的占位的作用

# 创建一个5次循环
i = 0
while i < 5:
    if i == 3:
        break
    print(i)
    i += 1
else:
    print('循环结束')

# continue 可以用来跳过当次循环

i = 0
while i < 5:
    i += 1
    if i == 2:
        continue
    print(i)
else:
    print('循环结束')


i = 0
if i < 5:
    pass

4、质数练习:代码优化来提升执行速度

# 模块,通过模块可以对Python进行扩展
# 引入一个time模块,来统计程序运行时间
# 第一次优化,使用break,提升内层循环的结束时间
# 第二次优化,使用数学的求平方根的方法
    # 优化原理
    # 36 的因数
    #   2 18
    #   3 12
    #   4 9
    #   6 6
from time import *

# time()函数可以用来获取当前的时间,返回的单位是秒

# 获取程序开始的时间
begin = time()
i = 2
while i <= 10000:
    flag = True
    j = 2
    while j <= i ** 0.5:   #  我们i开一个平方根,求它的0.5次方,记住前面要为 <= 哦
        if i % j == 0:
            flag = False
            # 一旦进入判断,则证明i一定不是质数,这时候内层循环没有在继续执行的必要了
            # 我们可以使用break来退出内层循环
            break
        j += 1
    if flag:
        pass
        #print(i)
    i += 1

# 获取程序结束时间
end = time()

# 计算程序执行的时间
print("程序执行花费了:", end - begin, "秒")

# 优化前 10000个数 程序执行花费了: 6.4617578983306885 秒
# 使用break优化后 10000个数 程序执行花费了: 0.8041782379150391 秒
# 使用i的0.5次方优化后 10000个数 程序执行花费了: 0.03556418418884277 秒
# 有打印时:0.0009610652923583984 秒
# 程序执行花费了: 0.0009965896606445312 秒
# 程序执行花费了: 0.001993894577026367 秒

5、小游戏,《唐生大战白骨精》

'''
## 小游戏,《唐生大战白骨精》
#  1、 身份选择
    # A 显示提示信息
        欢迎光临  XXX 游戏!
        请选择你的身份
            1、xxx
            2、xxx
        请选择: x
    # B 根据用户选择来分配身份(显示不同的提示消息)
        1.---
        2.---
        3.---
#  2、 游戏进行
        A 显示玩家的基本信息(攻击力,生命值)
        B 显示玩家可以进行的操作:
            1、练级
                - 提示玩家的攻击力和生命值
            2、打BOSS
                - 玩家对BOSS进行攻击,玩家要攻击BOSS,BOSS对玩家进行攻击
                - 计算BOSS是否被玩家消灭,玩家是否被BOSS消灭
                - 游戏结束
            3、逃跑
                - 退出游戏,显示提示信息,游戏结束!

'''

# 显示欢迎信息
print('-'*20,'欢迎光临《唐生大战白骨精》','-'*20)
# 显示身份选择的信息
print('请选择您的身份:')
print('\t1.唐生')
print('\t2.白骨精')
# 游戏的身份选择
player_choose = input('请选择[1-2]: ')

#
print('-'*66)

# 根据用户的选择来显示不同的提示信息
if player_choose == '1':
    # 选择1
    print('您已经选择1,您将以->唐生<-的身份来进行游戏!')
elif player_choose =='2':
    # 选择2
    print('你暂时不能选择黑帽子,系统已自动为您配置以->唐生<-的身份来进行游戏!')
else:
    # 选择3
    print('您是输入有误,系统将自动为您匹配身份:将以->唐生<-的身份来进行游戏!')

# 进入游戏
# 创建变量,来保存玩家的生命值和攻击力
player_life = 2 # 生命值
player_attack = 2 # 攻击力
# 创建一个变量保存boss的生命值和攻击力
boss_life = 10
boss_attack = 10
# 打印分割线
print('-'*60)
# 显示玩家的信息(攻击力,生命值)
print(f'唐生,你的生命值是{player_life},你的攻击力是{player_attack}')

while True:
    # 打印一条分割线
    print('-'*60)
    # 显示游戏选项,游戏正式开始
    print('请选择你要进行的操作:')
    print('\t1.练级')
    print('\t2.打boss')
    print('\t3.逃跑')
    game_choose = input('请选择你要做的操作[1-3]:')

    # 处理用户想选择
    if game_choose == '1':
        # 增加玩家的生命值和攻击力
        player_life += 2
        player_attack += 2
        # 显示最新的信息(生命值,攻击力)
        print(f'恭喜你升级了,你现在的生命值是{player_life},你的攻击力是{player_attack}')

    elif game_choose =='2':
        # 玩家攻击boss
    #      减去boss的生命值,减去的生命值应该等于玩家的攻击力
        boss_life -= player_attack
        print('-'*60)
        # 检查boss是否死亡
        print('->唐生<- 攻击了 ->白骨精<-')
        if boss_life <= 0:
            # boss死亡,player胜利,游戏结束
            print(f'->白骨精-<受到了{player_attack}点伤害,重伤死亡,->唐生<-赢得了胜利!')
            break   # 游戏结束

        # boss 要反击玩家
        # 减去玩家的生命值
        player_life -= boss_attack
        print('->白骨精<- 攻击了 ->唐生<-')
        # 检查玩家的生命值
        if player_life <= 0:
            print(f'你受到了{boss_attack}点伤害,重伤死亡!GAME OVER')
            #游戏结束
            break
    elif game_choose == '3':
        # 逃跑
        # 打印分割线
        print('-' * 60)
        print('-> 唐生<- 跑了!! 游戏结束')
        break
    else:
        # 打印分割线
        print('-' * 60)
        print('您输入的有误,请重新输入')

四、序列

1、列表


"""
## 列表(list)
    - 列表是Python中的一个对象
    - 对象(object)就是内存中专门用来存储数据的一块区域
    - 之前我们学习的对象,像数值,他只能保存一个单一的数据
    - 列表中可以保存多个有序的数据
    - 列表的使用:
        1. 列表的创建
        2.列表里面的数据
"""
# 创建列表,通过[]来创建列表
my_list = []   # 创建一个空列表
print(my_list,type(my_list))

# 列表存储的数据,我们称为元素
# 一个列表中可以存储多个元素,也可以创建列表时,来指定列表中的元素
my_list = [10]

# 列表中有多个元素,可以用逗号来隔开
my_list1 = [10,20,3,40]
print(my_list1)

# 列表中可以保存任意的对象
my_list2 = [10,'hello',True,None,[1,2,3],print]
print(my_list2)

# 列表中的对象都会按照插入的对象的顺序来存储在列表里面
# 我们可以通过索引(index)来获取列表中的元素
#   索引是元素在列表中的位置,列表中的每个元素都有一个索引,第一个位置素引为0

# 通过索引来获取列表中的元素
# 语法 : my_list[索引]
print(my_list2[1])
# print(my_list2[19])    # IndexError: list index out of range  索引超过最大范围会抛异常

# 通过len()函数可以用来获取列表的长度
        # 获取到的长度的值,是列表的最大索引 + 1
print(len(my_list2))

frinds =['boy','good','yes','no']
print(frinds[0])

切片


"""
切片=== 指的是从现有列表中来获取子列表
创建一个列表,一般创建列表时,变量的名字会使用复数
"""
stus = ['boy','good','yes','no','dog','big']

# 列表的索引可以是负数
# 如果索引是负数,则从后向前获取元素,-1表示倒数第一个,-2表示倒数第二个
print(stus[-1])

# 通过切片来获取指定的元素
# 语法:列表[起始:结束]
#      通过切片获取元素时,会包括起始位置的元素,不会包括结束位置的元素
#       做切片操作时,总会创建一个新的列表,不会对原来列表产生影响
#       起始和结束位置的索引都可以省略不写
#       如果省略结束位置,则会一直截取到最后
#       如果省略起始位置,则会从第一个元素开始截取
#       如果起始位置和结束位置都省略,相当于创建了一个源列表的副本
print(stus[1:])
print(stus[:3])
print(stus)
print(stus[:])

# 语法: 列表[起始:结束:步长]
# 步长表示,每次获取元素的间隔,默认值为1
print(stus[0:4:3])
# 步长不能是0 ,但是可以为负数
# 如果是负数则会从列表的后面向前面取
print(stus[::-1])

通用操作

# 通用操作
stus = ['boy','good','yes','no','dog','big']
# + 和 *
# + 可以将两个列表拼接为一个列表

my_list = [1,2,3] + [4,5,6]
print(my_list)
"""
# in 和 not in
# in 用来检查指定元素是否在列表中
# not in 检查指定元素是否不再列表中
"""
print('kop' in my_list)
print('kop' not in my_list)

"""
min() 获取列表中的最小值
max() 获取列表中的最大值
"""
arr = [1,2,9,33,7654,12,3]
print(min(arr),max(arr))

"""
arr = [1,2,9,33,7654,12,3]
print(min(arr),max(arr))


# 两个方法(method),方法和函数基本上是一样的,只不过方法必须通过 对象.方法() 形式调用
# xxx.print() 方法实际上就是和对象关系紧密的函数
# s.index() 获取指定元素在列表中第一次出现时候的索引
# print(stus.index('dog'))
# index()的第二个参数,表示查找的起始位置,第三个参数,表示查找的结束位置
print(stus)
print(stus.index('dog',3,7))
# 如果要获取列表中没有元素则会抛出异常  ValueError: 'dogs' is not in list
# index()
# count()
# print(stus.index('dogs'))    # ValueError: 'dogs' is not in list

# s.count() 统计指定元素在列表中出现的次数
print(stus.count('dog'))
"""

下面可以在文档中找到的哦
在这里插入图片描述

2、序列

"""
序列(sequence)
    - 序列是python中最基本的一种数据结构
    - 数据结构指计算机中数据存储的方式
    - 序列用于保存一组有序的数据,所有的数据在序列当中都有一个唯一的位置(索引)
            并且序列中的数据会按照添加的顺序来分配索引
    - 序列的分类
        可变序列(序列中的元素可以改变)
            > 列表(list)
        不可变序列(序列中的元素不能改变):
            > 字符串(str)
            > 元组(tuple)
"""
s = 'hello'
print('h' in s)

3、修改列表


# 修改列表
stus = ['boy','good','yes','no','dog','big']
# 直接通过索引来修改
print(stus)
stus[0] = '好汉'
print(stus)

# 可以通过del来删除元素
del stus[3]
print(stus)

# 通过切片来修改列表,在给切片进行赋值的时候只能使用序列
stus[0:2] = 'swk'    # swk 相当于 [s,w,k]
print(stus)
stus[0:0]=['kkxx']   # 向索引为0的地方插入一个元素,接上面的元素哦,结果为 ['kkxx', 's', 'w', 'k', 'yes', 'dog', 'big']
print(stus)

# 当设置步长时候,序列中元素的个数必须要和切片的中元素的个数一致
        # 下面会报错 ValueError: attempt to assign sequence of size 2 to extended slice of size 4
# stus[::2] = ['ppp','ooo']
# print(stus)

# 通过切片来删除元素
# del stus[0:2]   或者 del stus[::2]  # 或者 stus[1:3]=[]
# print(stus)

# 不可变序列无法通过索引来修改
s = 'hello'
# s[1]='a'
# print(s)
# 可以通过list()函数将其的序列转化为list
s = list(s)
print(s)

4、用方法修改列表

# 通过方法来修改列表
stus = ['aaa','bbb','ccc']
print('源列表: ',stus)

# 一、append()
#   向列表最后添加一个元素

stus.append('ddd')
print(stus)

# 二、insert()
#   向列表的指定位置插入一个元素,参数1是要插入的位置,参数2是要插入的元素
stus.insert(2,'ppp')
print(stus)

# 三、extend()
#   使用新的序列来扩展当前序列,需要序列作为参数,会添加到指定列表中
stus.extend(['张飞','王五'])
stus += ['张飞','王五']   # 相当于它
print(stus)

# 四、clear()
#   清空系列
# stus.clear()
# print(stus)

# 五、pop()
#   根据索引删除指定的元素并返回被删除的元素
result=stus.pop(2)
print(result)
print(stus)

#六、 remove()
#   删除指定的元素,如果相同值的元素有多个,只会删除第一个
stus.remove('王五')
print(stus)

# 七、reverse()
#   用来反转列表
stus.reverse()
print(stus)

# 八、sort()
# 用来对列表中的元素进行排序
my_list=list('asdfghjkl')
print('修改前: ',my_list)
my_list.sort()
print('修改后: ',my_list)    # 会以

my_list=[1,2,3,4,2,5]
my_list.sort()
print(my_list)
# 如果需要降序排列
my_list.sort(reverse=True)
print(my_list)

5、遍历&for循环

# 遍历列表,就是指将列表中的所有元素都取出来
# 创建列表
stus = ['aaa','bbb','ccc','ddd']

# 一、通过while循环遍历列表
i = 0
while i <len(stus):
    print(stus[i])
    i += 1

# 二、通过for循环遍历列表
'''
for 循环语法
    for 变量 in 序列:
        代码块

for循环的代码块执行多次,序列中有几个元素就会执行几次
    没执行一次就会将序列中的一个元素赋值给变量
    所以我们可以通过变量,来获取列表中的元素
'''
print('--------------------')
for s in stus:
    print(s)

6、练习

# 显示系统的欢迎信息
print('-'*20,'欢迎使用员工管理系统','-'*20)
# 创建一个列表保存员工的信息
emps = ['孙悟空\t18\t男\t花果山','猪八戒\t28\t男\t高老庄']

# 创建一个死循环
while True:
    # 显示用户选项
    print('''
    请选择要做的操作:
        1.查询员工
        2.添加员工
        3.删除员工
        4.退出系统
    ''')
    user_choose = input('请选择[1-4]: ')
    # 根据用户的选择做相关的操作
    if user_choose == '1':
        print('''   序号  姓名  年龄  性别  住址''')
        # 显示员工信息,创建一个变量表示员工序号
        n = 1
        for emp in emps:
            print(f'\t{n}\t{emp}')
            n += 1
    elif user_choose == '2':
        # 添加员工
        # 获取要添加员工的姓名,年龄,性别,住址
        emp_name = input('请输入员工的姓名:')
        emp_age = input('请输入员工的年龄:')
        emp_gender = input('请输入员工的性别:')
        emp_address = input('请输入员工的住址:')

        # 创建员工信息
        emp = f'{emp_name}\t{emp_age}\t{emp_gender}\t{emp_address}'
        # 提示添加信息
        print('下面员工将被添加到列表中')
        print('姓名\年龄\t性别\t住址')
        print(emp)
        user_confirm=input('是否确认该操作[y/N]: ')
        if user_confirm == 'y' or user_confirm == 'yes':
            # 将四个信息拼接为一个字符串,然后插入到列表中
            emps.append(emp)
            # 显示提示信息
            print('添加成功')
        else:
            print('已取消添加!')
    elif user_choose == '3':
        # 删除员工信息,根据序号删除
        # 获取要删除员工的序号
        del_num = int(input('请输入要删除员工的序号'))

        # 判断序号是否有效
        if 0 < del_num <= len(emps):
            # 输入合法,根据序号删除
            del_i = del_num - 1
            print('以下员工将被删除')
            print('-'*62)
            print('\t序号\t姓名\年龄\t性别\t住址')
            print(f'\t{del_num}\t{emps[del_i]}')
            print('-' * 62)
            user_confirm = input('该操作不可恢复,是否确认[Y/n]: ')
            # 判断
            if user_confirm == 'Y':
                emps.pop(del_i)
                print('删除成功')
            else:
                print('操作已取消')
    elif user_choose == '4':
        # 退出
        print('欢迎使用!再见!')
        input('点击回车键退出。')
        break
    else:
        print('您的输入有误,请重新输入')

    # 打印分割线
    print('-'*62)

7、range的使用

'''
range() 是一个函数,可以用来生成一个自然数的序列
'''
# 生成一个列表
r = range(5)
print(list(r))

# 也可以用三个步长生成
r = range(0,10,2)
print(list(r))

# 配合for循环使用
# for 循环除了创建方式,其余的break continue else 都可使用
for a in range(10):
    print(a)

# for 变量字符串
for s in 'hello':
    print(s)

8、元组

'''
元组 tuple
元组是一个不可变的序列
它的操作的方法基本上和列表是一致的
所以你在操作元组时,就是把元组当成一个不可变的列表就行了
一般当我们希望数据不可变时,就使用元组,其余情况都使用列表
'''
# 创建一个元组
my_tuple = ()
print(type(my_tuple))

# 创建一个待元素的元组
my_tuple = (1,2,3,4,5)
print(my_tuple)

# 当元组不是空元组时,括号可以省略
# 如果元组不是空元组时,它里面至少要有一个
my_tuple = 10,2,0,40
my_tuple = 40,
print(my_tuple)

my_tuple = 10,20,30,40
# 元组的解包(解构)
# 就是将元组里面的每一个元素都赋值给一个变量
# a,b,c,d = my_tuple
# print('a=',a)
# print('b=',b)
# print('c=',c)
# print('d=',d)
# 如果在对一个元组进行解包的时候,变量的数量必须要和元组中的数量一直,不然你可以添加一个*号也行
a,b,*c = my_tuple   # 不加* 会报 ValueError: too many values to unpack (expected 3)
print('a=',a)
print('b=',b)
print('c=',c)    # 会将c对应后面的所以 c= [30, 40]



# 运用解包的方式可以调换两个元素的值
e = 100
f = 200
print(e,f)
e,f=f,e
print(e,f)


9、可变对象

'''
可变对象:
    每个对象中都保存三个值:id(标识)、type(类型)、value(值)
    列表就是一个可变对象,a = [1,2,3]
'''
# 改变对象
'''
    通过变量去修改该对象的值,不会改变多指向的对象
    当我们去修改对象时,如果有其他变量也指向该对象,则修改也会在其他的变量中体现
'''
a = [1,2,3]
print('修改前:',a)
print('修改前id:',id(a))

a[0]=10
print('修改后:',a)
print('修改后id:',id(a))

# 重新赋值
'''
    重新赋值会改变变量所指向的对象,它是重新赋值,但是原理的对象依旧占着内存
'''
a = [4,5,6]
print('重新赋值:',a,id(a))

# 一般只有在为变量重新赋值的时候才是该变量,其他的都是改对象


'''
== != is is not

== != 比较的是对象的值是否相等
is is not 比较的是对象的id是否相等(比较两个对象是否是同一个对象)
'''
a = [1,2,3]
b = [1,2,3]
print(a,b)
print(id(a),id(b))
print(a == b)     # a 和 b 的值相等,使用==会返回True
print(a is b)     # a 和b不是一个对象,内存地址不同,使用is 返回的是False

  • 1
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值