又开始的python-day04-20200719-字典练习题-集合-集合运算-转换-eval-JSON-公共方法-函数-注释-调用-全局局部变量-返回多个值

P102
# 声明一个列表
student = {'name':'zss','age':'18','score':98,'tel':'139999999998','gender':'female'}
# 声明一个列表 列表保存6个学生的信息
students = [{'name':'zss','age':'18','score':98,'tel':'139999999992','gender':'female'},
	{'name':'张三','age':'18','score':98,'tel':'139999923397','gender':'unknow'},
	{'name':'李四','age':'21','score':94,'tel':'1399992222992','gender':'unknow'},
	{'name':'王五','age':'18','score':92,'tel':'139995555998','gender':'unknow'},
	{'name':'jack','age':'24','score':52,'tel':'139999998888','gender':'female'},
	{'name':'tony','age':'15','score':58,'tel':'139999999992','gender':'female'}
	]
print(students)
# 统计不及格的学生个数
count = 0
for s in students:
	if s['score'] < 60:
		count += 1
print('不及格的学生有',count,'个')
# 统计未成年的学生个数
count = 0
for s in students:
	if int(s['age']) < 18:
		count += 1
print('未成年的学生有',count,'个')
# 打印手机尾号是8的学生的名字
for s in students:
	if int(s['tel'][-1]) == 8: # s['tel'].endswith('8') 也可以
		print(s['name'],'的手机尾号是8呦')
# 打印最高分和对应学生的名字
scores = []
for i in students:
	# print(i['score'])
	scores.append(i['score']) # 将分数放到一个列表里 用max方法 求出最高分
for i in students:
	if max(scores) == i['score']:
		print(i['name'],'最高分',i['score'])
	# print(i.items())
	# print(k,v)
# 删除性别不明的学生
# 将不需要删除的加入到新的表
new_students = [student for student in students if student['gender'] != 'unknow']
print(new_students)
i=0
for student in students[:]:
	if student['gender'] == 'unknow':
		students.remove(student)
print(students)

# 将列表按学生成绩大小排序
print(sorted(students,key=lambda keys:keys['score']))



# 用三个元组表示三门学科的选课学生姓名 一个学生可以选多门课
sing = ('李白','白居易','李清照','杜甫','王安石','孟浩然','王维')
dance = ('李白','白居易','李商隐','岑参','王维')
rap = ('李白','刘禹锡','苏轼','王安石','孟浩然','王维')
# 一共多少人
total = sing + dance + rap 
# 元组可以加起来 集合set可以去重
print(len(set(sing + dance + rap)))
# 只选了第一门学科的人数 和 对应名字
sing_only = []
for p in sing:
	if p not in dance and p not in rap:
		sing_only.append(p)
print('只选了第一门学科的有{}人,分别是{}'.format(len(sing_only),sing_only))
# 只选了一门学科的人数 和 对应名字
# 只选了2门学科的人数 和 对应名字
# 只选了3门学科的人数 和 对应名字
p_dict = {} # 空字典
one = []
two = []
three = []
for name in total:
	if name not in p_dict:
		p_dict[name] = total.count(name)
print(p_dict)
for k,v in p_dict.items():
	if v == 1:
		# print('报了一门的有',k)
		one.append(k)
	elif v == 2:
		# print('报了两门的有',k)
		two.append(k)
	elif v == 3:
		# print('报了三门的有',k)
		three.append(k)
print('只选了一门学科的有{}人,分别是{}'.format(len(one),one))
print('只选了两门学科的有{}人,分别是{}'.format(len(two),two))
print('只选了三门学科的有{}人,分别是{}'.format(len(three),three))



# 集合的使用
# 你不进步是可以的 但你的年龄是增长的 
# 每一段年龄 都对应 所需要的东西
# 所以 请努力吧



# 集合是一个不重复的无序,可以使用{} 或者 set 来表示
# {} 2种意思 字典 集合set可以去重
# {} 里如果放的是键值对 就是字典 如果是单个的值 就是一个集合
person = {'name':'zss','age':18} # 字典
x = {'hello',1,'good'} # 集合

# 如果有重复的数据 会自动去除 但是无序的
names = {'hello',1,'good',1,2,3,4,5,6,77,777,777,1}
print(names)
names.add('阿里巴巴') # 添加一个元素 但同样是无序的
print(names)
# names.pop()  # 删除一个元素 随机删除
print(names)
names.remove(2) # 删除指定元素
print(names)
# union 将多个集合合并生成一个新的集合
# A.update(B) 将B拼接到A里
names.update({'刘能','jack'})
print(names)
names.clear()  #清空一个集合
print(names)
# 空集合的表示方式不是{}  {}表示空字典
# 空集合 set()
print(2 in names)

# 集合的高级使用
# set 支持很多算法运算符 但不支持 +
sing = {'李白','白居易','李清照','杜甫','王安石','孟浩然','王维'}
dance = {'李白','白居易','李商隐','岑参','王维'}
rap = {'李白','刘禹锡','苏轼','王安石','孟浩然','王维'}
print(sing - dance) # A - B  A和B的差集  A里面减去A和B都有的
print(dance - sing)
print(sing & dance) # A & B  A和B的交集  A和B都有的
print(sing | dance) # A | B  A和B的并集  A和B全部
print(sing ^ dance) # A ^ B  A和B的差集 和 B和A的差集的并集  二者差集的并集

# 去重排序
nums = [1,4,5,678,2,35,566,23,1,23,5,123,123,5,1]
x = set(nums) # 列表转换为集合 自动去重 但是无序的
print(x)
y = list(x) # 转换成列表
y.sort(reverse=True) # 对列表进行排序 倒序
y.sort()
print(y)

# 内置类 list tuple set
nums = [6,3,4,5,1]
x = tuple(nums) # 使用tuple 内置类转换为元组
print(x)
y = set(nums) # 使用set内置类转换为集合
print(y)
z = list({'name':'zss','age':18})
print(z) # 里面只有key值

# python 里面有一个比较强大的内置函数 eval 可以执行字符串里的代码
a = 'input("请输入一个数字:")'  
print(a)  # 这样就直接打印了 input("请输入一个数字:"
# eval(a)   # 用eval 就可以执行字符串里的代码了
b = '1 + 1'
print(b)  # 1 + 1
print(eval(b)) # 2

# JSON 的使用  暂时简单了解
# 把列表 元组 字典等转换为json字符串
# 前端用的js 后端用的python 两者传递数据 最容易的传的就是字符串
# JSON     '{"name":"zss","age":18}'    字符串 " "
# 转换对应
# python  			JSON
# True				true
# False				flase
# 字符串			字符串
# 字典{}				对象
# 列表[] 元组()			数组
import json
print(person)           # {'name': 'zss', 'age': 18}
m = json.dumps(person)  # dumps 将字典 列表 集合 元组 等转换为JSON字符串
print(m)				# {"name": "zss", "age": 18}
print(type(m))   # <class 'str'> 字符串类型
n = '{"name":"zss","age":18}' # eval 可以将字符串转换为字典
print(n)			 # {"name":"zss","age":18}
print(eval(n))       # {'name': 'zss', 'age': 18}
print(type(eval(n))) # '{"name":"zss","age":18}'
s = json.loads(n) 	 # loads 可以将json字符串转换为python里的数据
print(s,type(s))     # {'name': 'zss', 'age': 18} <class 'dict'>
print(json.dumps(['hello','good',True])) # ["hello", "good", true]
print(json.dumps(('hello','good',False))) # ["hello", "good", false]
# P107
# 通用的方法 公共方法
# + 用来拼接 字符串 元组 列表
print('hello'+'world')
print(('good','yes')+('hi','ok'))
print([1,2,3]+[4,5,6])
# - 只用于集合 求差集
print({1,2,3}-{3})
# * 可以用于字符串元组列表 表示重复多次 不用用于字典和集合 不能重复
print('hello'*3)
print([1,2,3]*3)
print((1,2,3)*3)
# in 成员运算符 字符串 列表 元组 字典 集合 都可以用
print('a' in 'abc')
print(1 in [1,2,3])
print(4 in (4,5,6))
print('zss' in {'name':'zss','age':19}) # in 在字典里用于判断key
print('name' in {'name':'zss','age':19})
# 遍历 字符串 列表 元组 字典 集合 等可迭代对象 都是可以用for....in遍历的
# 带下标的遍历 enumerate 类的使用 一般用于列表和元组等有序的数据
nums=[23,42,12,45,15]
for i,x in enumerate(nums): 
    print('%d个数据是%d' % (i,x))
    


# 函数的介绍 一堆准备好的代码 在需要时调用
# 多行代码封装成一个整体 python 用def 声明一个函数
# def 函数名(参数):
#    执行的操作
# 调用函数 
# 函数名(参数)
def tell_sttory():
    print('Fight') 
tell_sttory()   # 定义好了之后不会自动执行 要去调用
def test(a,b): # 形式参数
    print(a)
    print(b)
# 调用函数时传递函数
test('zss','2020') # 实参
test(a=2020,b='fight') # 也可以用变量的形式赋值
# 函数的返回值
# 返回值就是函数执行的结果,并不是所有的函数都必须有返回值
def add(a,b):
    c = a + b # c 在外部时不可见的
    return c # return 表示一个函数的执行结果
print(add(1,2))
# 如果一个函数没有返回值 他的返回就是None
x = print('zss')
print(x)
# age = input('请输入:')
# print(age) # 这就返回获取到的输入的值

# 函数的注释
# """
# 注释
# """
def test(a:int,b:int): # 建议的类型 如果不符合 也不会报错 而不能你直接限定
    """
    a 第一个数字
    b 第二个数字
    返回值 a+b
    """
    c = a + b
    return c
help(test) # 这就会出现所写的注释
print(test(2,2))
print(test('h','j')) # 也可以运行
# 很难去定义用户的输入 不限制类型

# 函数调用函数
def test1():
    print('test1')
    print('test11')
def test2():
    print('test2')
    test1()
    print('test22')
test2()

# 定义函数求[n,m)之间所有整数的和
def add(n,m):
    x = 0
    for i in range(n,m):
        x += i
    return x
result = add(0,101)
print(result)
# 定义函数 求n的阶乘
def fac_c(n):
    x= 1
    for i in range(1,n+1):
        x *= i
    return x
# result = fac(4)
# print(result)
# 定义函数求阶乘的和
def add_sum(m):
    x = 0
    for i in range(1,m+1):
        x += fac_c(i)
    return x
result = add_sum(5)
print(result)

# 全局变量 和 局部变量
a = 100 # 全局变量 哪里都可以调用
world = '你好'
def test():
    a = 1 # 局部变量只在函数内部生效
    print(a)
    global world # global 对变量进行声明 就可以改变全局变量
    world = '改变'
    print('locals = {},globals = {}'.format(locals(),globals()))
print(a)
print(world)
#test()
# locals(),globals() 查看局部变量和全局变量
print(world)
# 在python 只有函数可以分割作用域
if 3 > 2:
    m = 'hi' # 这里就是全局变量
    
# 函数多个返回值
def test(a,b):
    x = a // b
    y = a % b
    # return x # return 语句表示一个函数的结束
    # 一般情况下 一哥函数只会执行一个return语句
    # 特殊情况下 finally语句下 一哥函数可能执行多个return语句
    # return [x,y]
    # return (x,y)
    # return {'x':x,'y':y}
    return x,y # 返回的本质是一个元组
result = test(13,2)
print(result)
# print('商是{},余数是{}'.format(result[0],result[1]))
# print('商是{},余数是{}'.format(result['x'],result['y']))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值