day2

今天是暑期班的第二天,主要讲了字典、元组、集合、控制结构

字典

# 1. 练习
# 1.创建一个包含字符串和数字的列表,打印出第3到5个元素,倒数第3个元素。
l = ["创建", "一个", "包含", "字符串", "和", "数字", "的", "列表", 1, 2, 3, 4, 6]
print(l[2:5])
print(l[-3])
['包含', '字符串', '和']
3
# 2.创建一个列表,将第3个元素更改为‘third’,输出整个列表。
l = ["创建", "一个", "包含", "字符串", "和", "数字", "的", "列表", 1, 2, 3, 4, 6]
l[2] = 'third'
print(l)
['创建', '一个', 'third', '字符串', '和', '数字', '的', '列表', 1, 2, 3, 4, 6]
# 3.创建一个大列表,内部嵌套了如下3个子列表:
# a=['xiaoming','student',10],
# b=['xiaohong','coder',23],
# c=['xiaohuang','boss',35],
# 通过大列表完成,打印第2个列表的第1个元素,打印第3个列表的所有数据,删除第2个列表,打印整个大列表数据。
a = ['xiaoming', 'student', 10]
b = ['xiaohong', 'coder', 23]
c = ['xiaohuang', 'boss', 35]
l = [a, b, c]
print(l[1][0])
print(l[2])
del l[1]
print(l)
xiaohong
['xiaohuang', 'boss', 35]
[['xiaoming', 'student', 10], ['xiaohuang', 'boss', 35]]
# 2. dict
# 字典也可以包含多个元素,但是字典中的每一个元素都是一个键值对
# 2.1 创建字典
# 字典用花括号括起来的
# 字典中的每个元素用逗号隔开
# 字典中的每个元素都是由 key:value 组成的,key:value 之间用 : 隔开
# 每个元素的 key 可以是 str 类型,也可以是 int 类型、bool 类型,还可以是其他数据类型,但是必须是可不变的数据类型
peopleInfo = {"name": "hanmeimei", "age": 18, "sex": "female"}
print(peopleInfo)
{'name': 'hanmeimei', 'age': 18, 'sex': 'female'}
# 2.2 获取字典里面的元素
# 字典名[key]
# 字典名.get(key, 默认值) None
print(peopleInfo["name"])
print(peopleInfo["age"])
print(peopleInfo["sex"])
# print(peopleInfo['score'])
hanmeimei
18
female
# get 方法和 [] 方法获取元素的区别在于,get 方法获取不存在的 key-value 的时候不会抛异常
print(peopleInfo.get("name"))
print(peopleInfo.get("age"))
print(peopleInfo.get("sex"))
print(peopleInfo.get("score", 90))
hanmeimei
18
female
90
# 2.3 修改字典元素
# 字典名[key] = new_value
peopleInfo["age"] = 20
print(peopleInfo)
{'name': 'hanmeimei', 'age': 20, 'sex': 'female'}
# 2.4 获取字典中所有的键值对
# items() 可以获取字典里面所有的元素,把字典里面的元素的 key-value,添加到一个元组中 (key, value)
# 把每个元素创建的元组添加到一个类似于列表的容器中 [('name', 'hanmeimei'), ('age', 18), ('sex', 'female')]
for it in peopleInfo.items():
    print(it)
('name', 'hanmeimei')
('age', 20)
('sex', 'female')

pass 什么也不会执行的语句,一般用来占位使用,免得语法报错

# 2.5 获取字典中的所有的键
# keys() 以列表的形式返回字典所有的键
for key in peopleInfo.keys():
    print(key)
name
age
sex
# 2.6 获取字典中的所有的值
# values() 以列表的形式返回字典中的所有的值
for value in peopleInfo.values():
    print(value)
hanmeimei
20
female
# 2.7 删除字典中所有的元素
# clear()
print(peopleInfo)
peopleInfo.clear()
print(peopleInfo)
{'name': 'hanmeimei', 'age': 20, 'sex': 'female'}
{}
# 2.8 练习题
# 1.给定一个成绩单(字典,姓名为键,成绩为值),找出最高分和最低分,并求出平均成绩。成绩自己定义!
mark = {"hmm": 89, 'll': 95, 'vivian': 75}
print(max(mark.values()))
print(min(mark.values()))
print(sum(mark.values()) / len(mark))
95
75
86.33333333333333
# 2.输入一个成绩序列,以字典形式输出对应等级的人数。
score = [45,98,65,87,43,83,68,74,20,75,85,67,79,99]
# 等级 A:(90~100)
# B:(80~89)  C:(70~79) D:(70以下)
# ctrl+alt+l 格式化代码
# ctrl+d 复制粘贴选中的代码或者当前行的代码
scores = [45, 98, 65, 87, 43, 83, 68, 74, 20, 75, 85, 67, 79, 99]
score_dict = {"A": {"max": 100, "min": 90, "data": []},
              "B": {"max": 89, "min": 80, "data": []},
              "C": {"max": 79, "min": 70, "data": []},
              "D": {"max": 69, "min": 0, "data": []}
              }
for score in scores:
    # 把 scores 这个列表中的每个元素都取出来,分别进行判断,把元素,添加到 score_dict 字典中对应的 data 列表中
    for rank in score_dict:
        # 把取出来的某个 score ,和 score_dict 中的每一个等级进行对比判断
        # rank 是 score_dict 的某一个键 key
        rank_value = score_dict[rank]  # rank_value 是 score_dict 字典里面的某一个值 value
        if rank_value["min"] <= score <= rank_value["max"]:
            rank_value["data"].append(score)
            break

print(score_dict)
print("A", len(score_dict["A"]["data"]))
print("B", len(score_dict["B"]["data"]))
print("C", len(score_dict["C"]["data"]))
print("D", len(score_dict["D"]["data"]))
{'A': {'max': 100, 'min': 90, 'data': [98, 99]}, 'B': {'max': 89, 'min': 80, 'data': [87, 83, 85]}, 'C': {'max': 79, 'min': 70, 'data': [74, 75, 79]}, 'D': {'max': 69, 'min': 0, 'data': [45, 65, 43, 68, 20, 67]}}
A 2
B 3
C 3
D 6

元组

不可改变的内容

# 3. 元组 tuple 和集合 set
# 元组、集合、列表 都是一个容器,里面可以包含多个元素
# 元组、列表 都是通过下标索引来获取元素,或者操作元素
# 集合 没有下标,只能通过 for 循环来遍历获取元素

# 元组和列表主要的区别在于,元组是不可以变的数据类型,列表是一个可变的数据类型
# t = (1, 2, 3, "name", "hanmeimei", [1, 2, 3])
# l = [1, 2, 3, "name", "hanmeimei"]
#
# l[0] = 5
# # t[0] = 5  # TypeError: 'tuple' object does not support item assignment
# t[5][0] = 5
# print(t)

d = {(1, 2): "data"} # 不变数据类型作为字典的键 key
print(d)
{(1, 2): 'data'}

集合

# 集合
{1, 2, 3}
set([1, 2, 3])
# 集合 没有下标,只能通过 for 循环来遍历获取元素
# 集合中的元素是不可以重复的
s = {1, 2, 1}
print(s) # {1, 2}
#
# s[0]  # TypeError: 'set' object is not subscriptable
# for item in s:
#     print(1)
#     print(2)
#
#     print(3)
{1, 2}

控制结构

分支结构
循环结构
顺序结构

#6循环结构
s={1,2,1}#该字典的key只有两个,for循环 循环两次
for item in s:#相同的缩进表示是在同一个代码块中
#tab或空格缩进都行
    print(1)
    print(2)
    print(3)
1
2
3
1
2
3
#循环结构 
#6.1while
step=1
count=0
while step<=100:
    count+=step
    step+=1
print(count)
5050
#6.2 while...else...
#while正常执行完仍不满足条件,才会执行else
#while 中有break时不会进行执行else
scores =[90,85,88,78,20,67]
index=0
total_score=0
while index<len(scores):
    if scores[index]<0:
        print("当前分数有异常")
        break
    else:
        total_score+=scores[index]
    index+=1
print("total_score",total_score)
total_score 428
#6.3 for...in...
#6.4break和continue
# 触发 else
# 正常结束的循环

list = [1,2,3,4,5]
for x in list:
    print(x)
else:
    print("else")
1
2
3
4
5
else
#6.4break和continue
# 使用 continue 关键字

list = [1,2,3,4,5]
for x in list:
    continue
    print(x)
else:
    print("else")
else
#6.4break和continue
# 不触发 else
alist = ["人生","苦短","我用","python"]
for item in alist:
    if item =="我用":
        break
    elif item=="苦短":
        continue
else:
    print("123")
#7分支结构
age=int(input("请输入你的年龄:"))#input得到的是字符串,要转换为数字
if age>90:
    print("A")
elif age>80:
    print("B")
else:
    print("C")
请输入你的年龄:99
A
#小练习
#1. 利用字符串的相关方法判断由两个单词组成的两个字符串是否是一个对称字符串,比如goodman和mangood是对称字符串,而goodboy和goodbye不是对称字符串。

# str1 = input()
# str2 = input()
# str3 = str1[::-1]
# print(str3)
# if(str3==str2):
#     print("YES")
# else:
#     print("No")
 #python 3.6 type hint
#显性声明变量类型后,编译器知道了该变量的类型,推荐方法时会比较准
while True:
    str1:str = input()
    str2:str = input()
    str1=str1.split(" ")
    str2=str2.split(" ")
    str2.reverse()
    if str1 == str2:
        print("是对称的字符串")
    elif str1[0]=="exit":
            break
    else:
        print("不是对称的字符串")
123 456
456 123
是对称的字符串
exit


#2. 小明喜欢的单词具有以下特性:1. 单词的每个字母都是大写字母 2. 单词中没有连续相同的字母,比如,他不喜欢“ABBA”,
#因为这里有两个连续的B。他喜欢“A”,“ABA”, “ABCBC”这些单词。按照此规则输入任意单词,用Python判断他是否喜欢。
sentence="This IS a major event"
l=sentence.split(" ")
print(l)
for word in l:
    if word.isupper():
        index = 0
        while index<(len(word)-1):
            if word[index] == word[index+1]:
                break
            index+=1
        else:
            print(word)
['This', 'IS', 'a', 'major', 'event']
IS

函数

#8函数
#8.1封装代码块,实现代码的复用,提高编码效率
# def name(parameter1,parameter2):
#     centences
#8.2函数返回值
#python中函数默认会自动添加return None语句
# def add(a,b,c):
#     return a+b+c
#8.3 函数调用
#8.3.1位置参数
def add(a,b,c):
    return a+b+c
print(add(1,2,3))
6
#8.3.2关键字参数
def add(a,b,c):
    return a*b+c
print(add(1,c=2,b=3))
5
#8.3.3不定长参数
#当我们定义参数的时候,对参数个数不做约束
def add(numbers:list)->float:#类型提示 并设定列表返回值是float
    count=0
    for item in numbers:
        count+=item
    return count 
print(add([1,2,3,4,5,6,7,8,9]))
45
#8.3.3不定长参数
#当我们定义参数的时候,对参数个数不做约束
def add(*numbers):#加星号表示长度不固定
    count=0
    for item in numbers:
        count+=item
    return count 
print(add(1,2,3,4,5,6,7,8,9))#装箱 python解释器会自动用这些元素创建一个元组(1,2,3...)
# n=[1,2,3,4,5,6,7,8,9]
# print(add(*n))#拆箱 python解释器会把n中的元素获取出来
45
#8.3.3不定长关键字参数
#当我们定义参数的时候,对参数个数不做约束
#不定长关键字参数是一个字典,kwargs是哟二字典
def add(**kwargs):
    return sum(kwargs.values()) 
print(add(zhang=1,lisa=2,wanghong=6))#装箱 python解释器会自动用这些元素创建一个元组(1,2,3...)
# n=[1,2,3,4,5,6,7,8,9]
# print(add(*n))#拆箱 python解释器会把n中的元素获取出来
9
#小例子
**kwargs将参数以字典的形式传入函数,在函数内可以使用kwargs.values()\keys()\items()等方法,也可以直接使用参数名
def analyse_people(name: str, age: float, **kwargs):

    total_score = sum(kwargs.values())
    average_score = total_score / len(kwargs.values())
    #可以换行显示的字符串
    display_content = """
姓名:{name}
年龄:{age}
{subject_details}
总分:{total_score}
平均分:{average_score}
"""
    subject_details = ""
    for subject, score in kwargs.items():
        subject_details += "{}:{}\n".format(subject, score)
    subject_details = subject_details[:-1]
    display_content = display_content.format(name=name,
                                             age=age,
                                             subject_details=subject_details,
                                             total_score=total_score,
                                             average_score=average_score)
    print(display_content)


analyse_people("hanmeimei", age=18.888888, chinese=89, math=99, physical=95, chemistry=78)
姓名:hanmeimei
年龄:18.888888
chinese:89
math:99
physical:95
chemistry:78
总分:361
平均分:90.25