1、集合:(补充)

集合特点:

(1)不同元素组成

(2)是无序的

(3)集合中的元素必须是不可变类型(数字,字符串,元组)

def add(self, *args, **kwargs): # real signature unknown
    """   ##在集合里面添加内容
    Add an element to a set.
    This has no effect if the element is already present.
    """
    pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set1.add('eric')
print(set1)

结果:

 

 

def update(self, *args, **kwargs): # real signature unknown
    """  ## 类似于列表的extend
Update a set with the union of itself and others. """
        pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set1.update('狗剩')
print(set1)

结果:

 

 

def clear(self, *args, **kwargs): # real signature unknown
    """  ##清空集合
Remove all elements from this set. """
    pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set1.clear()
print(set1) 

结果:

 

 

def pop(self, *args, **kwargs): # real signature unknown
    """  ##随机删除元素
    Remove and return an arbitrary set element.
    Raises KeyError if the set is empty.
    """
    pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set1.pop()
print(set1)

结果:

 

 

def remove(self, *args, **kwargs): # real signature unknown
    """  ##按照元素删除
    Remove an element from a set; it must be a member.
    If the element is not a member, raise a KeyError.
    """
    pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set1.remove('alex')
print(set1)

结果:

 

 

def difference(self, *args, **kwargs): # real signature unknown
   """   ##取两个集合的差集,可以用 “-” 代替
    Return the difference of two or more sets as a new set.
    (i.e. all elements that are in this set but not the others.)
    """
    pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set2 = { 'wusir', 'tom', 'egon', 'eric'}
print(set1 - set2)
print(set2 - set1)

结果:

 

 

def intersection(self, *args, **kwargs): # real signature unknown
    """  ##取两个集合的交集,可以用 “&” 代替
    Return the intersection of two sets as a new set.
    (i.e. all elements that are in both sets.)
    """
    pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set2 = { 'wusir', 'tom', 'egon', 'eric'}
print(set1 & set2)
print(set2 & set1)

结果:

 

 

def union(self, *args, **kwargs): # real signature unknown
    """  ##取两个集合并集,可以用 “|” 表示
    Return the union of sets as a new set.
    (i.e. all elements that are in either set.)
    """
    pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set2 = { 'wusir', 'tom', 'egon', 'eric'}
print(set1 | set2)

结果:

 

 

def symmetric_difference(self, *args, **kwargs): # real signature unknown
    """  #取两个集合的反交集,可以用 “^” 表示
    Return the symmetric difference of two sets as a new set.
    (i.e. all elements that are in exactly one of the sets.)
    """
    pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set2 = { 'wusir', 'tom', 'egon', 'eric'}
print(set1 ^ set2)

结果:

 

 

def issubset(self, *args, **kwargs): # real signature unknown
    """ ##判断一个集合是不是另一个的子集,可以用 “<” 代替
Report whether another set contains this set. """
    pass  

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set2 = { 'wusir', 'tom', 'egon', 'eric'}
print(set1 < set2)

结果:

 

 

def issuperset(self, *args, **kwargs): # real signature unknown
    """   ##判断一个集合是不是另一个的父集,可以用 “>” 代替
Report whether this set contains another set. """
    pass

示例:

set1 = {'alex', 'wusir', 'ritian', 'egon', 'barry'}
set2 = { 'wusir', 'egon','barry'}
print(set1 > set2)

结果:

 

2、文件操作

文件操作流程:

(1)通过open()函数调用系统内部的open命令去打开文件

(2)将open的文件赋值给一个变量,这个变量就叫做文件句柄

(3)所有的一切针对文件的操作都是基于这个文件句柄的

(4)简述流程就是:

  ①、打开文件产生文件句柄

  ②、然后对文件进行操作

  ③、关闭文件句柄

  案例操作内容:
洞房昨夜停红烛,
待晓堂前拜舅姑。
妆罢低声问夫婿,
画眉深浅入时无?

文件的读:(r模式)

def read(self, *args, **kwargs): # real signature unknown
  ## 读取文件全部内容
    pass

示例:

f1 = open('file1',encoding='utf-8')
f2 = f1.read()
print(f2)
f1.close()

结果:

 

 

def readline(self, *args, **kwargs): # real signature unknown
  ## 读取文件一行内容
    pass

示例:

f1 = open('file1',encoding='utf-8')
f3 = f1.readline()
print(f3)
f1.close()

结果:

 

 

def readlines(self, *args, **kwargs): # real signature unknown
  ## 以列表的形式显示文件的全部内容
    pass

示例:

f1 = open('file1',encoding='utf-8')
f4 = f1.readlines()
print(f4)
f1.close()

结果:

 

 

def readable(self, *args, **kwargs): # real signature unknown
  ## 判断文件是否可读
    pass

示例:

f1 = open('file1',encoding='utf-8')
print(f1.readable())
f1.close()

结果:

 

 

文件的写:(w模式)

def write(self, *args, **kwargs): # real signature unknown
    ## 写内容到文件中,如果没有这个文件则创建,有则修改里面的内容
pass

示例:

f1 = open('file1',encoding='utf-8',mode='w')
f1.write('这是一首好诗。')
f1.close()

结果:

 

 

def writable(self, *args, **kwargs): # real signature unknown
  ## 判断文件是否可写
    pass

示例:

f1 = open('file1',encoding='utf-8',mode='w')
print(f1.writable())
f1.close() 

结果:

 

 

def close(self, *args, **kwargs): # real signature unknown
  ## 关闭文件
    pass  ##上面的例子都用了close函数

 

def flush(self, *args, **kwargs): # real signature unknown
  ## 强制将新文件刷新到磁盘
    pass

 

def seek(self, *args, **kwargs): # real signature unknown
  ## 指定在文件中光标的位置
    pass

 

def tell(self, *args, **kwargs): # real signature unknown
  ## 读取光标在文件中的位置
    pass

seek和tell结合示例:

f1 = open('file2',encoding='utf-8',mode='r')
f1.seek(6)  ##seek是按字节类型去移动的
print(f1.read())
print(f1.tell())
f1.close()

结果:

 

 

def seekable(self, *args, **kwargs): # real signature unknown
    ## 判断光标是否可移动
pass

示例:

f1 = open('file2',encoding='utf-8',mode='r')
print(f1.seekable())
f1.close() 

结果:

 

 

def truncate(self, *args, **kwargs): # real signature unknown
    ## 按照字节对原文件进行截取 必须在a 或 a+ 模式
pass

示例:

f1 = open('file2',encoding='utf-8',mode='a')
f1.truncate(18)
f1.close()

结果:

 

追加操作:(a模式)

f1 = open('file2',encoding='utf-8',mode='a')
f1.write('\n画眉深浅入时无')
f1.close()

结果:

 

其他模式介绍:

r+:可读可写,先读取内容,在写入内容,

f1 = open('file2',encoding='utf-8',mode='r+')
print(f1.read().strip())
f1.write('\n好诗')
f1.close()

结果:

读取的内容:

 

写入的内容:

 

 

w+:可读可写,先写再读,清空原来文件的内容,写入新的内容

f1 = open('file2',encoding='utf-8',mode='w+')
f1.write('确实是一首好诗')
f1.seek(0)
print(f1.read())
f1.close()

结果:

 

a+:可读可写,先追加新的内容到文件最后,在读取内容

f1 = open('file2',encoding='utf-8',mode='a+')
f1.write('洞房昨夜停红烛,\n待晓堂前拜舅姑。\n妆罢低声问夫婿,\n画眉深浅入时无?')
f1.seek(0)
print(f1.read())
f1.close()

结果:

 

以字节形式读取和写入文件的方法介绍:

rb:以字节形式读取文件内容

wb:以字节的形式写入文件

ab:以字节的形式追加文件

3、函数

在没用函数的时候,普通代码里面重复代码比较多,可读性也比较差,使用函数就可以大大节省代码的书写量。

函数书写格式:

def func():

函数体

return  返回值

func()  执行函数的方式

def  是定义函数的关键字

func  是函数名

return  函数的终止,没指定返回值的情况下返回None,返回值可以指定单个值,也可以指定多个值,但是多个值会放在一个元组中。

模仿len()函数定义一个计算数据类型个数的函数:

s = "asdfghjklqpowirttuy"
def my_len():
    num = 0
    for i in s:
        num += 1
    return num
print(my_len())

结果:

 

函数的传参:

函数的参数分为两种,一种是形参,一种是实参。

形参:①、定义函数时设定的参数为形参

   ②、在形参中又包括了位置参数,默认参数,动态参数

位置参数:在位置参数中,传的参数和接收的参数要一一对应,不能多也不能少

def para(a,b):
    return a+b
print(para(1,2))

结果:

 

默认参数:接收的参数中如果有默认参数的话,可以不用给默认参数传值,它默认会读取自己的值返回给结果,但也可以给默认参数传一个想要的值。

def para(name,age=18):
        return name,age
print(para('eric',22))

结果:

给默认参数传值:

 

不给默认参数传值:

 

 

动态参数:动态参数用*args, **kwargs表示,也叫万能参数。

def func3(*args, **kwargs):  #函数的定义的时候 * 代表聚合。
    print(args)
    print(kwargs)
func3(1, 2, 3, 'alex', c=6, name='wusir', age='21')
位置参数传给了*args,关键字参数传给了**keargs
func3(*[1, 2, 3],*(22, 33))  #函数的执行的时候 * 代表打散。
参数带有一个*的时候,表示所传的值都给*args
func3(**{'name':"alex"},**{'age':23}) #函数的执行的时候 * 代表打散。
参数带有两个*的时候传的值必须以字典的形式传值,传给了**kwargs
func3(1, 2, 3, 22, 33)  #函数的执行的时候 * 代表打散。
如果只按位置参数传值的话,所有参数都传给了*args

 

实参:执行函数时给形参穿的值为实参

在实参中又包含了,位置参数,关键字参数,混合参数

位置参数:传值的参数和接收值的参数必须一一对应,多一个不行,少一个也不行

def para(a,b,c):
    return a+b-c
print(para(21,33,41))

结果:

 

 

关键字参数:把实参的参数赋值给形参,可以不按顺序传参,但个数不能多也不能少

def para(a,b,c):
    print(a*b/c)
para(a=11,c=22,b=19)

结果:

 

 

混合参数:在定义实参时,可以将多个位置参数和关键字参数混合到一起传给形参

def para(a,b,*args,name='eric',**kwargs):
    print(a,b,args,name,kwargs)
para('info','you','are','beautiful',name='alex',sex='male')

结果:

 

 

4、知识点补充

可变类型和不可变类型:

可变类型:列表,字典

不可变类型:数字,字符串,元组,集合

 

访问顺序:

直接访问:数字

顺序访问:字符串,列表,元组

 

元素存放类型:

容器类型:列表,元组,字典

原子类型:数字,字符串

 

编码补充:

1、不同编码之间的二进制是不能相互识别的。

2、对于文件的存储以及传输,不能是unicode编码。

3、在python3中,bytes数据类型和str数据类型是及其相似的,str所有的方法在bytes都是适用的,但是区别就在于bytes是16进制的

 

bytes和str变现英文和中文的形式:

bytes: 非unicode编码类型,可以是utf-8,gbk,gb2312编码类型

s = 'china'
s1 = s.encode('utf-8')
print(s1)

 

 

str:只能是unicode编码类型

s = 'china'
s1 = s.encode('utf-8')
s2 = s1.decode('utf-8')
print(s2)

 

 

bytes:

s = '地雷'
s1 = s.encode('utf-8')
print(s1)

 

 

str:

s = '地雷'
s1 = s.encode('utf-8')
s2 = s1.decode('utf-8')
print(s2)

 

 

小数据池:小数据池存在的意义就是节省内存空间

str

1、不能含有特殊字符

2、单个元素乘以的最大数字不能超过21

示例:

s = 'a'*20
s1 = 'a'*20
print(id(s),id(s1))

 

s = 'a'*20
s1 = 'a'*21
print(id(s),id(s1))

 

int内存地址相同范围内的数为-5 -- 256

示例:

s = 100
s1 = 100
print(id(s),id(s1))

 

s = -6
s1 = -6
print(id(s),id(s1))

 

s = 257
s1 = 257
print(id(s),id(s1))

 

5、小程序测试

# 函数一:实现三次登陆功能

#     登录的用户名,密码必须从文件中取出。

#     实现三次登录。

 

# 函数二:实现新用户注册功能

#     用户写入用户名,密码。

#     检测:用户名不能重复。

 

# 函数三:购物功能

#     将购物车加工成函数。

#         加一个功能:

#             将买的商品写入到一个文件中,商品名,数量,单价。

# 整合三个函数,实现必须用户登录才能继续购物,如果没用户则必须注册

 

1、注册函数

def register():
    import os
    flag  = False
    while True:
        reg_user = input('请输入需要注册的用户名:').strip()
        print('**密码不能包含空格,长度为6-10个字符,必须包含字母,数字**')
        reg_pwd = input('请输入注册账户的密码:').strip()
        if len(reg_pwd) < 6 or len(reg_pwd) > 10:
            print('**密码不符合规定**')
            continue
        info = {}
        with open('login.txt',encoding='utf-8',mode='a') as f1, \
                open('login.txt', mode='r',encoding='utf-8') as f2:
                    if os.path.getsize('loging'):
                        flag = False
                    for line in f2:
                        if reg_user == eval(line)['name']:
                            flag = True
                    if flag:
                        print('用户名存在,请重新输入')
                        continue
                    else:
                        info['name'] = reg_user
                        info['password'] = reg_pwd
                        f1.write(str(info) + '\n')
                        print('注册成功')
                        break

2、登录函数

def sign():
    num  = 3
    flag = False
    while num > 0:
        sign_user = input('登录用户:').strip()
        sign_pwd = input('登录密码:').strip()
        with open('login.txt',encoding='utf-8',mode='r') as f1:
            for item in f1:
                if eval(item)['name'] == sign_user and eval(item)['password'] == sign_pwd :
                    flag = True
            if flag:
                ret =( '当前用户登录成功,欢迎%s'%(sign_user))
                print(ret)
                break
            else:
                num -= 1
                print('尚未注册或密码错误,登录失败,剩余尝试次数%s' % (num))
                continue

 

3、购物车函数

def  shop_c():
    goods = [{"name": "电脑", "price": 1999},
             {"name": "鼠标", "price": 10},
             {"name": "游艇", "price": 20},
             {"name": "美女", "price": 998},
             ]
    for i in range(len(goods)):
        print(i, goods[i])
    shop_l = []
    money = int(input("请输入购物金额:").strip())
    while True:
        print(("如果退出请按'q'").center(30, "-"))
        choice = input('请选择商品编号:').strip()
        if choice == 'q':
            s = ",".join(shop_l)
            print ("您最终选择的商品有%s" %s)
            break
        else:
            choice = int(choice)
            if choice >= len(goods):
                print('没有此选项,请重新输入')
                continue
            shop_l.append(goods[choice]['name'])
            money -= goods[choice]['price']
            print("您选择的产品有%s" % (shop_l), "共计%s样商品" % (len(shop_l)), "剩余金额为:%s元" % (money))
            num = shop_l.count(goods[choice]['name'])
            with open('shopping_cart.txt', encoding='utf-8', mode='a') as f1:
                f1.write(str(goods[choice]) + '\n')
                f1.write('%s为%s件,价格为%s'%(goods[choice]['name'],num,goods[choice]['price']*num) + '\n')
            if money < goods[choice]['price']:
                print("您的余额不足以购买%s" % (goods[choice]['name']), "剩余%s元" % (money), "请充值...")
                recharge = int(input("充值金额为:").strip())
                money += recharge
                print("充值后当前金额为%s" % (money))

 

4、综合商城函数,三者整合

def shop_mall():
    home_page = """****************商城首页*****************
     1、用户登录,2、用户注册,3、商城购物
***********************************************
    """
    flag = False
    print(home_page)
    while True:
        chioce = input('请选择商城操作:').strip()
        if chioce == 'q':
            print('Go home')
            break
        elif chioce == '1':
            print('用户登录'.center(30,'*'))
            sign()
            flag = True
        elif chioce == '2':
            print('用户注册'.center(30,'*'))
            register()
        elif chioce == '3':
            if flag:
                print('欢迎登录商城'.center(30,'*'))
                shop_c()
            else:
                print('请先登录,再执行其他操作')
                sign()
                shop_c()
                break
            continue

  

 

posted on 2018-05-23 19:29  花豆豆  阅读(204)  评论(0编辑  收藏  举报