【Python】2.逻辑控制语句、列表、元组、字典、集合

468 阅读11分钟

终端输入信息

如何打开终端

windows键+R键打开运行,输入cmd,点击确定

语法

name = input("请输入员工姓名:")        # 终端里输入 小龙
print(name)                          # 小龙
print(type(name))                    # <class 'str'>

age = input("请输入员工年龄:")         # 终端里输入 96年
print(age)                           # 96年
print(type(age))                     # <class 'str'>

字符串与数字的相互转化

所有输入的信息都是字符串,字符串不能进行加减运算,可转换为数字后再进行运算

#字符串转数字 int(字符串)
age = input("请输入员工年龄:")             # 终端里输入 25
print(int(age)*2)                        # 50
print(age*2)                             # 2525
print(type(int(age)))                    # <class 'int'>

#数字转字符串 str(数字)
name = input("请输入员工姓名:")            # 终端里输入 小龙
age=12                                   
print(type(age))                          # <class 'int'>
# print(name+"的年纪为"+12)                 # 会报错
print(type(str(12)))                      # <class 'str'>
print(name+"的年纪为"+str(12))              # 小龙的年纪为12

打印print

#格式化输出
name = input("请输入你的姓名:")               # 终端输入 小龙
sex = input("请输入你的性别:")                # 终端输入 男
age = int(input("请输入你的年龄:"))           # 终端输入 25
print(name+",欢迎登录!")                    # 小龙,欢迎登录!
print("%s,欢迎登录!"%(name))                # 小龙,欢迎登录!

# 小龙,性别:男,欢迎登录
print("%s,性别:%s,欢迎登录"%(name,sex))       # 小龙,性别:男,欢迎登录

# 小龙,性别:男,年龄:25,欢迎登录
print("%s,性别:%s,年龄:%d,欢迎登录"%(name,sex,age))    # 小龙,性别:男,年龄:25,欢迎登录

pi = 3.1415926
print(pi)                # 3.1415926
# 格式化小数,展示总的空间是10位,小数点后保留一位,靠右对齐
print("%10.1f为pi的值"%(pi))                  #        3.1为pi的值

# 格式化小数,展示总的空间是10位,小数点后保留一位,靠右对齐,左边没有数字的显示0
print("%010.1f为pi的值"%(pi))                  # 00000003.1为pi的值

# 格式化小数,展示总的空间是10位,小数点后保留一位,靠左对齐
print("%-10.1f为pi的值"%(pi))                  # 3.1       为pi的值

# 格式化小数,展示总的空间是10位,小数点后保留一位,靠右对齐,显示正负号
print("%+10.1f为pi的值"%(pi))                  #       +3.1为pi的值
# format 函数
a = "张三对李四说:{},{}".format("今天天气好",90)

判断语句

if就是判断符合什么条件,执行什么代码,就好比我们在一个岔路口,我们要去哪个目的地,那我们就会去选择哪条路。if语句最多只会走到里面的某一个判断,不会走多条分支

if 布尔表达式:
    符合该条件执行代码
elif 布尔表达式:
      上面条件不符合,符合该条件,执行代码
elif 布尔表达式:
      上面条件不符合,符合该条件,执行代码
else:
      以上条件都不符合,执行代码

单条件判断

# elif 和 else 可省略
a = 9
if a == 9:                     # 判断 a 是否等于9
    print(a)                   # 如果 a 等于 9,则打印 a;如果不是,则执行elif语句
elif a >9:                     # 判断 a 是否大于9
    print(a)                   # 如果 a 大于 9 ,则打印 a;如果不是,则执行else语句
else:
    print("a<9")               # 以上条件都不符合,直接打印 a < 9
# 这里最后打印 9                                      

多条件判断

并且 and

# a=9或b=9
if a == 9 or b == 9:
    print(a)
    print(b)
elif a >9:
    print(a)
else:
    print("a<9")

或 or

# a=9或b=9
if a == 9 or b == 9:
    print(a)
    print(b)
elif a >9:
    print(a)
else:
    print("a<9")

练习:

里程收费
<= 3公里20 元/每公里
>3公里 且 <= 5公里15 元/每公里
>5公里 且 <= 8公里12 元/每公里
>8公里10 元/每公里
# 从终端获取任意里程数,获取下当前里程数单价
a = input("请输入里程数:")
price = 0  # 初始设为0
if int(a) <= 3:
    price = 20
elif int(a) <= 5:  #elif: else if缩写
    price = 15
elif int(a) <= 8:
    price = 12
else:   # 以上所有条件都没满足,会走到这个条件判断
    price = 10

print("{}公里的单价为:{}".format(a,price))

# 从终端输入一个里程,然后求打车的总价
a = input("请输入里程数:")
if a.isalpha():
    print("输入有误")
else:
    a = eval(a)
    print(type(a))
    sum = 0
    if isinstance(a, float) or isinstance(a, int):
        if 0 < a <= 3:
            sum = 20 * a
        elif a <= 5:
            sum = 20 * 3 + (a - 3) * 15
        elif a <= 8:
            sum = 20 * 3 + 15 * 2 + (a - 5) * 12
        else:
            sum = 20 * 3 + 15 * 2 + 12 * 3 + (a - 8) * 10

        print("{}里程的总价为:{}".format(a, sum))

里程总时间收费
<= 3公里<= 1小时20元/每公里
> 1小时22元/每公里
>3公里<= 1小时15元/每公里
> 1小时18元/每公里
# 从终端输入一个里程和开车消耗的时间,然后求打车的总价

# 1. 获取公里数和总时长
route = float(input("请输入公里数:"))
hour = float(input("请输入时长:"))

# 初始化总价
sum = 0

# 2. 判断
# 2.1 公里数小于等于3,时长小于等于1
if route<=3 and hour<=1:
    sum = 20*route
# 2.2 公里数小于等于3,时长大于1
elif route <= 3 and hour > 1:
    sum = 22*route
# 2.3 公里数大于3,时长小于等于1
elif route > 3 and hour <= 1:
    sum = 20*3 + (route-3)*15
# 2.4 公里数大于3,时长大于1
else:
    sum = 22*3 + (route-3)*18
print("{}公里路程,{}小时,车费的总价为{}".format(route,hour,sum))

循环语句

循环语句在生活中很常见,比如交通灯,一直在循环变颜色;点餐系统也是循环机制,每次输入就餐人数就能打印就餐凭证。

while循环

'''
while 布尔表达式:
    循环里面的语句(一般循环都有退出条件,某些场景没有退出条件,比如红绿灯)
'''
#循环打印从1到10
i = 1 # 赋予i初始值1
while i < 11:    	# i < 11才会进入循环
    print(i)     	# 打印变量i
    # i = i + 1  把i+1的值赋值给i
    i += 1  	 	# 等价于 i = i + 1 

for循环

for i in range(10):
    执行里面的代码
for i in range(10):  # 循环从0到9,不包含10
    print(i)

a = "hello world"       #a[2:10]
for i in range(2,10):   # 循环从2到9,不包含10
    print(i)

for i in range(2,10,2):   # 循环从2到9,步长为2
    print(i)

a = [1,2,3,4,5,12,3,12]  # a[0]   列表长度len(a)
b = len(a)
for i in range(b):
    print(a[i]) 

分别用while循环和for循环:

求阶乘, 从终端输入任意一个正整数,求对应的阶乘,比如输入4,阶乘4 * 3 * 2 * 1

使用while循环实现
# 1. 从终端获取一个正整数
n = int(input("请输入正整数:"))
# 2. 初始化阶乘的结果 sum = 1
sum = 1
# 3. 循环
# 初始化一个循环的变量i
i = 1
while i<=n:
    sum *= i # 等价于sum = sum*i
    i += 1
print("{}的阶乘为{}".format(n,sum))


使用for循环实现
# 1. 从终端获取一个正整数
n = int(input("请输入正整数:"))
# 2. for循环   比如输入5,for循环就循环5次,从1到5
# 初始化阶乘结果
sum = 1
for i in range(1,n+1):
    sum *= i
print("{}的阶乘为:{}".format(n,sum))

break

在循环里面执行break,表示退出整个循环

while True:
    command = input("请输入命令:")
    if command == 'exit':
        break
    print("输入的命令是:{}".format(command))

print('程序结束')

当循环里嵌套循环时,break:退出循环,只能跳出最近的一层循环
while True:
    print("第一层循环")
    while True:
        n = input("第二层循环,请输入命令:")
        if n == "exit":
            break

continue

退出当次循环,当次循环后面的语句不会执行

while True:
    command = input("请输入命令:")
    if command == 'exit':
        break
    if command == 'cont':
        continue
    print("输入的命令是:{}".format(command))

print('程序结束')


continue: 退出当次循环,继续下一次循环
for i in range(10):
    if i == 3:          # 当 i = 3时,退出这一次的循环,不打印出3,继续下一次循环,执行i = 4,进行打印
        continue
    print(i)

练习

定义一个循环
第一步:从终端获取输入n
第二步: 判断n == "exit", 如果是,则退出循环
第三步: 判断n == "cont", 如果是,退出当前循环,进入下一次循环
第四步: 打印"你输入的指令为:"


while True:
    n = input("请输入指令:")       # 获取终端输入
    if n == "exit":              # 判断输入的指令是否是"exit",如果是,就走里面的代码
        break                  # 退出整个循环
    elif n == "cont":
        continue              # continue: 退出当前循环,进入下一次循环
        print("continue")   # continue下面的一些代码不会执行
    else:
        print("您输入的指令为:{}".format(n))
    print("111111")

列表

1、可以被随意修改
2、使用[]list()来创建,元素间用逗号分隔
3、列表中各元素类型可以不同,没有长度限制
方法函数备注
列表增name.append(a)append函数,往最后一个元素加
name.insert(下标,a)insert函数,要输入下标位置,根据下标位置来新增元素。 不加下标位置会报错
name.extend(列表)extend函数,先是把俩个列表拆开,把俩个列表的元素拼接在一块
列表改name[下标]="新名字"
列表查if temp in name: if temp not in name:
列表删del name[下标]del ,根据索引来删除元素
name.pop()pop函数,能根据index来删除列表里的元素 (pop里面不加index,默认删除最后一个)
name.remove("值")remove函数,输入值,会根据这个值,来去除列表里第一个出现的这个值
列表排序name.sort()sort函数,从小到大排序
name.sort(reverse=True)从大到小排序

元组

1、元组一旦创建就不能被修改
2、使用()或者tuple()来创建,元素之间用逗号分隔
3、可以使用或不使用小括号,但是必须要有逗号分隔

元组的几种形式:

a = (1,) #只有一个元素,必须加逗号
a = 1, #括号可以去掉
a = 1, 2, 3.14, 'hello'

字典

1、是键值对的集合,键值对之间没有顺序且不能重复
2、使用大括号{}或者dict()创建,键和值通过冒号链接,多个键值对通过逗号隔开。格式:{键:值,键:值...}
3、可以根据 键 索引 值的内容,没有长度限制
特性:键是唯一的,不可能俩个元素具有相同的键

新增/修改字典元素

info = {"name" : "hxx", "age" : "18"}
# 当字典里没有这个key时,为新增
info["sex"] = "男"          
print(info)         # {'name': 'hxx', 'age': '18', 'sex': '男'}
# 当字典里有这个key时,为修改
info["age"] = "25"          
print(info)         # {'name': 'hxx', 'age': '25', 'sex': '男'}

删除字典元素

info = {'name': 'hxx', 'age': '25', 'sex': '男'}
# 字典,pop、del函数,需要输入key,来删除健值对。    若删除的key不存在则会报错
info.pop("age")             
print(info)             # {'name': 'hxx', 'sex': '男'}
del info["sex"]
print(info)             # {'name': 'hxx'}

清空字典

info = {'name': 'hxx'}
info.clear()
print(info)            # {}

合并字典

dic = {"name" : "hss", "age" : "24"}
new = {"hobby" : "basketball"}
dic.update(new)
print(dic)              # {'name': 'hss', 'age': '24', 'hobby': 'basketball'}

获取字典个数

dic = {'name': 'hss', 'age': '24', 'hobby': 'basketball'}
# 字典,len函数,获取字典的个数
print(len(dic))            # 3

items,keys,values函数

dic = {"name" : "hss", "age" : "24", "sex" : "男"}
# 字典,items函数,   获取字典里所有的健值对。 用元组把所有字典里的健值对拼接起来,塞进列表里。
print(dic.items())     # dict_items([('name', 'hss'), ('age', '24'), ('sex', '男')])

# 字典,keys函数,    获取字典里所有的key
print(dic.keys())      # (['name', 'age', 'sex'])

# 字典,values函数,  获取字典里所有的值
print(dic.values())    # dict_values(['hss', '24', '男'])

遍历字典元素

dic = {"name" : "hss", "age" : "24", "sex" : "男"}

for key,val in dic.items():
    print("key为{},value为{}".format(key,val))
# key为name,value为hss
# key为age,value为24
# key为sex,value为男

# 遍历查询字典里的keys
for key in dic.keys():
    print(key)
# name
# age
# sex
# 遍历查询字典里的values
for val in dic.values():
    print(val)
# hss
# 24
# 男

集合

1、集合是多个元素的无序组合
2、集合元素之间是无序的,每个元素唯一,不存在相同元素 (应用于数据去重,即集合类型所有元素无重复)
3、集合元素不可更改,不能是可变数据类型
4、建立集合类型用{}或set(),元素间用逗号分隔
注意:建立空集合类型,必须用set()

合并集合或添加列表 、字典、元组

# 集合,获取集合时会自动去重 并且集合是没有顺序
se = { 2, 3, "1", 2, 3, 4}
print(se)                       # {2, 3, 4, '1'}

# 合并或者添加时,会去除重复的元素
se2 = {"hhh","1"}           # 集合
se.update(se2)                  # 集合,update函数,能合并集合
print(se)               # {2, 3, 4, '1', 'hhh'}
#
se3 = [9, 0]                # 列表
se.update(se3)                  #集合 里添加列表
print(se)               # {0, 2, 3, 4, '1', 'hhh', 9}
#
se4 = {"zidian" :"age"}     # 字典
se.update(se4)                  #集合 里添加字典       只会添加key, 字典里的值 不会添加进去
print(se)               # {0, 2, 3, 4, '1', 'hhh', 9, 'zidian'}
#
se5 = ("yuan",88)           # 元组
se.update(se5)                  #集合 里添加元组
print(se)               # {0, 2, 3, 4, '1', 9, 'yuan', 'hhh', 88, 'zidian'}

删除集合里的元素

se = {0, 2, 3, 4, '1', 9, 'yuan', 'hhh', 88, 'zidian'}
# 集合,remove函数,输入key,删除这个key。    若输入的key不是这个集合里的,会报错
se.remove(0)  
print(se)           # {2, 3, 4, 9, '1', 'zidian', 'hhh', 88, 'yuan'}
#集合,discard函数,输入key,删除这个key。    若输入的key不在集合里,不会报错
se.discard(99)                        
print(se)           # {2, 3, 4, 9, '1', 'zidian', 'hhh', 88, 'yuan'}

遍历集合

jihe = {"name","age","sex"}
for item in jihe:
    print(item)
    
# name
# sex
# age

集合、列表、元组转换

# 元素去重
l1 =[1,2,3,1,2,3]       # 列表
s = set(l1)             # 列表 转 集合
lis =list(s)            # 集合 转 列表
print(lis)      # [1, 2, 3]


t = (1, 2, 3, 1, 3)     # 元组
se = set(t)             # 元组 转 集合
tu =tuple(s)            # 集合 转 元组
print(tu)       # (1, 2, 3)

#for 循环去重
a = [1,2,3,4,1,1,2,3]
kong =[]
for i in a:
   if i in kong:
       kong.pop(i)
   else:
       kong.append(i)
print(kong)     # [1, 4, 2, 3]

可变类型和不可变类型

不可变类型:字符串、数字、tuple元组,这些变量如果值变更,之前赋值到其它变量的值不会变,因为值变更之后地址变化
可变类型:字典、集合、列表,这些变量如果值变更,之前赋值到其它变量的值会变,因为指向的都是同一个地址
#数字
a = 1
b = a
print(id(a))            # 140341948901680
print(id(b))            # 140341948901680
a = 2
print(id(a))            # 140341948901712
#字典
dic = {"name":"张三"}
dic1 = dic
print(id(dic))              # 140476032712512
print(id(dic1))             # 140476032712512
dic["hobbit"] = "打球"
print(id(dic))              # 140476032712512