第1001次python入门——Day07

集合的使用

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

# 如果有重复的数据,会自动去重
names = {'zhangsan', 'lisi', 'jack', 'lisi', 'jack'}
print(names)

# set能不能进行增删改查(很少用到,因为每次的位置都不确定),不能进行查操作
names.add('阿珂') #添加一个元素
print(names)

# names.clear() #清空一个集合
print(names)
#空集合的表示方式不是{},{}表示的是空字典
#空集合是set()

names.pop()   #随机删除一个
print(names)

# names.remove('jack') #删除一个指定的元素
# print(names)

#union将多个集合合并生成一个新的集合
#A.update(B)将B拼接到A里面


# print(names.union({'刘能', '赵四'}))
# print(names)

print(names.update({'刘能', '赵四'}))
print(names.update(('刘能', '赵四')))
print(names.update(['刘能', '赵四']))

print(names)

集合使用运算符

first = {'李白', '白居易', '李清照', '杜甫', '王昌龄', '王维', '孟浩然', '王安石'}
second = {'李商隐', '杜甫', '李白', '白居易', '岑参', '王昌龄'}
third = {'李清照', '刘禹锡', '岑参', '王昌龄', '苏轼', '王维', '李白'}

#print(first+second+third) 报错,set不支持加法

print(first - second) #但是可以求差集{'李清照', '王维', '王安石', '孟浩然'}
print(first & second) #求交集{'杜甫', '王昌龄', '李白', '白居易'}
print(first | second) # A | B 求并集{'李清照', '岑参', '杜甫', '王昌龄', '白居易', '李商隐', '王安石', '王维', '李白', '孟浩然'}
print(first ^ second) #求差集的并集{'李清照', '孟浩然', '岑参', '王维', '王安石', '李商隐'}

集合的练习

# 去重排序
nums = [5, 8, 7, 6, 4, 1, 3, 5, 1, 8, 4]
x = list(set(nums))
print(x) #[1, 3, 4, 5, 6, 7, 8]
x.sort(reverse=True)
print(x) #[8, 7, 6, 5, 4, 3, 1]

转换相关的方法

# 内置类 list tuple set
nums = [9, 8, 4, 3, 2, 1]
x = tuple(nums)  #使用tuple内置类转换成为元组
print(x)

y = set(x)  #使用set内置类转换成为集合
print(y)

z = list({'name':'zhangsan', 'age':18})
print(z)

#python里面有个比较强大的内置函数eval(),可以执行字符串里面的代码
# a = 'input("请输入您的用户名")'  #a 是一个字符串
# eval(a)
b = '1+1'
print(eval(b))

import json
#json的使用,把列表,元组,字典,等转换成为JSON字符串
person = {'name': 'zhangsan', 'age': 18, 'gender': 'female'}
#字典如果想要把它传给前端页面,可以把它写到一个文件里面
# '{"name": "zhangsan", "age": 18, "gender": "female"}'
m = json.dumps(person)  #将字典或列表,集合,元祖等转换为JSON字符串
print(m)  #{"name": "zhangsan", "age": 18, "gender": "female"}
print(type(m))  #<class 'str'>字符串类型,不能再根据key获取value了

n = '{"name": "lisi", "age": 20, "gender": "male"}'
p = eval(n)
print(p)
print(type(p))   # <class 'dict'>
s = json.loads(n)  #loads可以将json字符串转换成为python里面的自己的数据类型
print(s)
print(type(s))  #<class 'dict'>

# Python               JSON
# True                 true
# False                false
# 字符串                字符串
# 字典                  对象
# 列表,元组             数组

公共方法

# + :可以用来拼接,用于字符串,元组,列表
print('hello' + 'world')  #helloworld
print(('good', 'yes') + ('hello', 'ok'))   #('good', 'yes', 'hello', 'ok')
print([1, 2, 3] + [4, 5, 6]) #[1, 2, 3, 4, 5, 6]

# -:只能用于集合,求差集
print({1, 2, 3} - {3})  #{1, 2}

# *:用于字符串元组列表,表示重复多次,不能用于字典和集合(不可重复)
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, 7))
print('zhangsan' in {'name' : 'zhangsan'})#报错,只判断key

nums = [19, 82, 39, 12, 34, 58]
# 带下标的遍历
#enumerate是个内置类,返回带有下标的列表,一般用于列表和元组这些有顺序的数据结构
for x in enumerate(nums):
    print(x)

per = {'name':'zhangsan', 'age': 88}
for i , x in enumerate(per):
    print(i, x)

函数的介绍

# 函数就是一堆准备好的代码,需要的时候调用
# 用def来声明一个函数,函数定义好了以后并不会自动执行

函数的参数

# def 函数名(参数):
#   函数体
# 调用函数: 函数名(参数)

#函数声明时,括号里面的参数我们称之为形式参数,简称形参
#形参的值是不确定的,只是用来占位
def tell_story(place, person1, person2):
    # place = '庙'
    # person1 = '老和尚'
    # person2 = '小和尚'
    print("从前有座山")
    print("山上有座" + place)
    print("里面有个" + person1)
    print("还有个" + person2)
    print(person1 + '再给' + person2 + "讲故事")
    print("故事内容是")

# 调用函数时传输数据
# 函数调用时传入的参数,才是真正参与运算的数据,我们称之为实参
tell_story('道观', '老道', '道童')    # 会把实参一一对应的传递,交给形参处理
tell_story('尼姑庵', '老尼姑', '小尼姑')

#通过变量名的形式给形参赋值
tell_story(place='家', person1='卢jx', person2='赵sh')

函数的返回值

# 返回值就是函数执行的结果,并不是所有的函数都必须要有返回值
def add(a, b):
    c = a + b
    return c  #return 表示一个函数的执行结果

result = add(1, 2)
print(result ** 4)

# 如果一个函数没有返回值,它就返回None
#print就是一个内置函数
x = print('hello')
print(x)  #None

age = int(input('请输入您的年龄:'))
print(age)

函数的注释

"""

"""
def add(a: int, b: int):
    """
    这个函数用来将两个数字相加
    :param a: 第一个数字
    :param b: 第二个数字
    :return: 两个数字相加的结果
    """
    return a + b


# print(add(1, 2))
help(add)
print(add('hello', 'world'))

函数调用函数

def test1():
    print('test1开始了')
    print('test1结束了')

def test2():
    print('test2开始了')
    test1()
    print('test2结束了')

test2()

# 定义一个函数,求[n,m)之间所有整数之和
def add(n, m):
    x = n
    for i in range(n, m):
        x += i

    return x
result = add(0, 101)
print(result)

# 求一个数的阶乘
def factorial(n):
    x = 1
    for i in range(1, n+1):
        x *= i
    return x

print(factorial(5))

# 计算m阶乘的和 m = 6 ==>1!+2!+3!+4!+5!+6!
def fac_sum(m):
    x = 0
    for i in range(1, m + 1):
        x += factorial(i)
    return x

m = fac_sum(5)
print(m)

全局变量和局部变量

a = 100  #这个变量是全局变量,在整个py文件里面都可以访问
world = 'hello'
def test():
    x = 'hello' #变量是函数内部定义的变量,是局部变量,只能在函数内部使用
    print('x = {}'.format(x))

    #如果局部变量的名和全局变量同名,会在函数内部又定义了一个新的局部变量
    #而不是修改全局变量
    a = 10
    print(a)
    # 在函数内部如果想要修改全局变量
    # 使用global对变量进行声明,可以通过函数修改全局变量的值
    global world
    world = 'ok'

    print('locals = {}, globals = {}'.format(locals(),globals()))  #locals = {'a': 10, 'x': 'hello'}, globals = {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x000002017662B0B8>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': 'D:/Python代码/day7/11-全局变量和局部变量.py', '__cached__': None, 'a': 100, 'world': 'ok', 'test': <function test at 0x00000201765D1F28>}

# print(x) #x只能在函数内部使用
print(a) #100
test()
print(world)

# 内置函数 globals() locals() 可以查看全局变量和局部变量

# 在python里只有函数能够分割作用域
if 3 > 2:
    m = 'hi'
print(m)

函数多个返回值

def test(a, b):
    x = a // b
    y = a % b
    # return x # return表示一个函数的结束,所以一个函数最多只执行一个return语句
             #特殊情况有可能执行多个return语句(在final语句中)
    # return y #说明这个语句就没有走到


    # return [x, y]  #[2, 3]
    # return (x, y)
    # return x, y  #实际上返回的就是一个元组
    # return {'x': x, 'y': y}

result = test(13, 5)  #2  3
print(result) # 2

おすすめ

転載: blog.csdn.net/Thorne_lu/article/details/115278204