• python基础,python第三课


    python基础的学习第三天,集合,三元运算,全局变量与局部变量,文件读写,字符编码和转换

    集合

    set,无序,不重复

    三元运算

    值1 if 条件 else 值2

    1 a=2
    2 b=3
    3 name = a if a>b else b
    4 print(name)

    深浅拷贝

    1、str,数字,深浅拷贝内存地址都是一样

    2、其他类型

         浅拷贝,拷贝只是拷贝最外面一层

      深拷贝,拷贝除最内一层全部拷贝

     

    python文件读写

     1 #!_*_coding:utf-8_*_
     2 # __author__:"Ksen"
     3 
     4 # 文件的操作方法,open()
     5 # 1.打开文件
     6 # 2.操作文件
     7 # 3.关闭文件
     8 # 
     9 # r,只读模式,默认是只读模式
    10 # w,只写模式,文件不存在创建文件,文件存在覆盖文件再次写入
    11 # x,只写模式,文件不存在创建文件,文件存在直接报错
    12 # a,追加模式,存在的文件中追加写入文件,不存在的文件则创建文件
    13 
    14 f1 = open("abc","r",encoding="utf-8")
    15 data = f1.read()
    16 f1.close()
    17 print(data)
    18 
    19 f1 = open("abcd","w",encoding="utf-8")
    20 f1.write("abcd")
    21 f1.close()
    22 
    23 f1 = open("abcde","x",encoding="utf-8")
    24 f1.write("abcd")
    25 f1.close()
    26 
    27 f1 = open("abcdef","a",encoding="utf-8")
    28 f1.write("e")
    29 f1.close()
    30 
    31 # +
    32 # r+,读写模式,从文件开始读取,写入从文件最后追加写入,指针移动到文件末尾
    33 # w+,写读模式,首先清空文件,从文件开始读取,在文件末尾追加写入
    34 # x+,写读模式,首先清空文件,从文件开始读取,在文件末尾追加写入,写入文件存在报错
    35 # a+,写读模式,从文件末尾开始读取,在文件末尾追加写入
    36 
    37 f1 = open("abcdef1","r+",encoding="utf-8")
    38 print(f1.tell())
    39 f1.write("abasdfasdasd")
    40 f1.readlines()
    41 # f1.write("e")
    42 f1.close()
    43 
    44 # 常用文件操作
    45 # f = open("abcdef1", "r", encoding="utf-8")
    46 # f.read()  # 读取文件所有内容
    47 # f.readline()  # 读取文件一行内容
    48 # f.write()  # 写入文件
    49 # f.flush()  # 从内存中直接刷到硬盘中
    50 # f.seek()  # 移动指针
    51 # f.tell()  # 获取指针
    52 # f.close()  # 关闭文件
    53 # f.truncate()  # 截取文件内容
    54 # for line in f: #循环读取文件所有内容
    55 #     print(line)
    56 
    57 #同时打开两个文件,将f1的内容复制到f2文件中
    58 with open("abc",'r',encoding="utf-8") as f1,open("xxx",'w',encoding="utf-8") as f2:
    59     for line in f1:
    60         f2.write(line)
    View Code

     登录示例练习

      1 #!_*_coding:utf-8_*_
      2 #__author__:"Ksen"
      3 
      4 
      5 def alter_pwd(username,old_password,new_password):
      6     """
      7     修改密码功能
      8     :param username:用户名
      9     :param old_password:旧密码
     10     :param new_password:新密码
     11     :return:True修改密码成功
     12     """
     13     data = ''
     14     with open("db","r+",encoding="utf-8") as f1:
     15         for line in f1:
     16             line = line.strip()
     17             line_list = line.split(",")
     18             if line_list[0] == username and line_list[1] == old_password:
     19                 line = line.replace(old_password,new_password)
     20             data = data + line + "
    "
     21     with open("db", "r+", encoding="utf-8") as f:
     22         f.write(data)
     23     return True
     24 
     25 def login(username, password):
     26     """
     27     账户登录功能
     28     :param username: 登录用户名
     29     :param password: 登录密码
     30     :return: True登录成功,False登录失败
     31     """
     32     f = open("db","r",encoding="utf-8")
     33     for line in f:
     34         strip_line = line.strip()
     35         line_list = strip_line.split(",")
     36         if username == line_list[0] and password == line_list[1]:
     37             return True
     38     return False
     39 
     40 def register(username, password):
     41     with open("db","a",encoding="utf-8") as f:
     42         temp = "
    " + username + "," + password
     43         f.write(temp)
     44         return  True
     45 
     46 def user_exist(username):
     47     """
     48     判断用户名是否存在
     49     :param username: 用户名
     50     :return: True,用户名存在,False,用户名不存在
     51     """
     52     with open("db","r",encoding="utf-8") as f:
     53         for line in f:
     54             line = line.strip()
     55             line_list = line.split(",")
     56             if line_list[0] == username:
     57                 return True
     58     return False
     59 
     60 
     61 def del_account(username):
     62     data = ""
     63     with open("db","r",encoding="utf-8") as f:
     64         for line in f:
     65             line =line.strip().split(",")
     66             if username != line[0]:
     67                 data += line[0]+","+line[1]+"
    "
     68             else:
     69                 pass
     70     with open("db","w",encoding="utf-8") as f:
     71         f.write(data)
     72     return True
     73 
     74 def main():
     75     """
     76     程序主入口,主要实现,注册,登录
     77     :return:
     78     """
     79     while True:
     80         flag = True
     81         print("欢迎使用xxxx系统")
     82         inp = input("1:注册,2:登录:,3:修改密码,4,删除用户")
     83         while flag:
     84             if inp == "1":  # 注册
     85                 user = input("请输入用户名:")
     86                 pwd = input("请输入密码:")
     87                 is_exist = user_exist(user)
     88                 if is_exist:
     89                     print("用户名已存在,请重新输入")
     90                     continue
     91                 else:
     92                     is_register = register(user, pwd)
     93                     if is_register:
     94                         print("注册成功")
     95                         break
     96                     else:
     97                         print("注册失败,请重新注册")
     98                         continue
     99             elif inp == "2":  # 登录
    100                 user = input("请输入用户名:")
    101                 pwd = input("请输入密码:")
    102                 login_test = login(user, pwd)
    103                 if login_test == True:
    104                     print("登录成功")
    105                     break
    106                 else:
    107                     print("登录失败,请重新输入")
    108                     continue
    109             elif inp == "3":  # 修改密码
    110                 user = input("请输入用户名:")
    111                 pwd = input("请输入密码:")
    112                 login_test = login(user, pwd)
    113                 if login_test:
    114                     new_pws = input("请输入新密码:")
    115                     is_alter_pwd = alter_pwd(user, pwd, new_pws)
    116                     if is_alter_pwd == True:
    117                         print("修改密码成功")
    118                         break
    119                     else:
    120                         print("修改密码失败,请重新操作!!!")
    121                         continue
    122                 else:
    123                     print("登录失败")
    124                     continue
    125             elif inp == "4":  # 删除用户
    126                 user = input("请输入要删除的账号:")
    127                 is_exist = user_exist(user)
    128                 if is_exist:
    129                     is_del_account = del_account(user)
    130                     if is_del_account == True:
    131                         print("删除用户成功")
    132                         break
    133                     else:
    134                         print("删除失败!!!")
    135                         continue
    136                 else:
    137                     print("用户名不存在")
    138                     continue
    139             else:
    140                 print("输入错误,请重新选择")
    141                 flag = False
    142 
    143 main()

    字符编码及编码转换

    听得比较迷糊

    引用:http://www.cnblogs.com/alex3714/articles/5717620.html

    1.默认编码:

    • python2默认编码是ASCII
    • python3里默认是unicode

    2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-16就是现在最常用的unicode版本, 不过在文件里存的还是utf-8,因为utf8省空间

    3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

    以上图片适用python2.0

    函数

    函数的定义

    定义:函数是指一组语句的集合通过一个函数封装起来的功能,执行该函数的功能,可以通过函数名称来调用

    函数特性

    1. 减少重复代码
    2. 程序易扩展
    3. 程序易维护

    函数语法定义

    def func_test(x,y,z):  #用def定义函数名,x,y,z函数的参数,也称为函数的形参
        print(x)
        print(y)
        print(z)
    
    func_test(x=2,y=3,z=3) #通过函数名称来调用,括号里面参数称为实参

    函数参数

    形参:变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量

    实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值

    默认参数

    def stu_info(name,sex,age,city="北京"):  #默认参数可以直接在参数里赋值
        print("student info".center(20,"-"))
        print("name: ",name)
        print("sex : ",sex)
        print("age : ",age)
        print("city: ",city)
    
    stu_info("小明","",22) #调用时可以不传默认参数
    stu_info(sex="",age=21,name="小红") #关键参数可不按顺序传值,但是和位置参数共同使用时,关键参数需要在位置参数的后面,位置参数必须按顺序传值
    stu_info("小丽","",city="天津",age=18)#默认参数可修改

    非固定参数

    不确定传入参数的个数,可以使用非固定参数

    def account(phone,*args,**kwargs):# *ars传入的是一个元组tuple,**kwargs传入的是一个字典dict
        print(phone,args,kwargs)
    
    account(13912345678)# *args,**kwargs 非固定参数可以不传参数,默认为空
    account(13912345678,"zhangsan","北京",addr="北京市海淀区中关村",iphone="13401065112")#位置参数之后的参数为*args,后面的关键参数为**kwargs  它们之间的顺序不能颠倒

    全局变量和局部变量

    在程序一开始定义的变量为全局变量,在子程序中定义的变量为局部变量

    全局变量的作用域为整个程序,局部变量的作用域为子程序,出了这个子程序局部变量无效

    当局部变量和全局变量同名时,在子程序内局部变量有效,在子程序外全局变量有效

    全局变量:变量名大写,修改全局变量使用global

    局部变量:变量名小写,应用在代码块内

    NAME = "Ksen"    #全局变量
    
    def person(name):
        print("person name is ",name)
        name = "Lisi"   #局部变量
        print("person name is ",name)
        name="zhangsan"
        print("person name is ",name)
    
    person(name)
    print("My name is ",name)

     函数传值

    函数传参数,传的引用

    def fun(args):
        args.append(333) 
    a = [11,22]
    fun(a)
    print(a)

    返回值return

    return是函数的返回值,即是函数执行后返回的结果

    1、如果函数没有返回值,则返回的是None

    2、函数执行过程中遇到return则执行结束并返回

    3、函数返回值可以返回int,str,list,dict等数据类型,还可以返回函数

    匿名函数

    一般函数def func(x,y):return x+y

    匿名函数:lambda x,y: x+y

    匿名函数详细解释见:http://blog.csdn.net/csdnstudent/article/details/40112803

    isinstance 的使用

    判断对象是否是xxx的数据类型,返回True或者Flase

    isinstance(obj,数据类型) 

    作业

    1、简述普通参数、指定参数、默认参数、动态参数的区别

    2、写函数,计算传入字符串中【数字】、【字母】、【空格] 以及 【其他】的个数
    s1 = "abc123 23 sd233234asdf asd fas *(()12312+_?.<"
    def str_sum(s):
        int_sum = 0
        str_sum = 0
        space_sum = 0
        other_sum = 0
        for i in s:
            if i.isdigit():
                int_sum += 1
            elif i.isalpha():
                str_sum += 1
            elif i.isspace():
                space_sum += 1
            else:
                other_sum += 1
        return (int_sum,str_sum,space_sum,other_sum)
    print(str_sum(s1))
    View Code
    3、写函数,判断用户传入的对象(字符串、列表、元组)长度是否大于5。
     1 str_1 = "zhangsan"
     2 list_1 = [11,2,3,None,5]
     3 tup_1 = (1,3,"asdfa","sdafasdf",[list_1])
     4 def long(obj):
     5     if isinstance(obj,str) or isinstance(obj,list) or isinstance(obj,tuple):
     6         if len(obj) >= 5:
     7             return True
     8         else:
     9             return False
    10     return None
    11 a = long(str_1)
    12 b = long(list_1)
    13 c = long(tup_1)
    14 d = long(123)
    15 print(a)
    16 print(b)
    17 print(c)
    18 print(d)
    19 
    20 print(len(str_1))
    21 print(len(list_1))
    22 print(len(tup_1))
    View Code
    4、写函数,检查用户传入的对象(字符串、列表、元组)的每一个元素是否含有空内容。
     1 str_1 = "zhangs an"
     2 list_1 = [11,23,3,5]
     3 tup_1 = (1,"","asd fa","sdaf asdf",1)
     4 
     5 def isNone(obj):
     6     res = True
     7     for i in obj:
     8         i = str(i)
     9         # if i.isspace():
    10         if " " in i:
    11             res = False
    12             break
    13     return res
    14 
    15 print(isNone(str_1))
    16 print(isNone(list_1))
    17 print(isNone(tup_1))
    View Code
    5、写函数,检查传入列表的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    1 def long_1(list_1):
    2     if len(list_1) > 2:
    3         return list_1[0:2]
    4     return list_1
    5 a = [11,22,33,44,55]
    6 b = [22,33]
    7 res = long_1(b)
    8 print(res)
    View Code
    6、写函数,检查获取传入列表或元组对象的所有奇数位索引对应的元素,并将其作为新列表返回给调用者。
     1 def fun1(agrs):
     2     new_list = []
     3     for i in range(1,len(agrs),2):
     4         new_list.append(agrs[i])
     5     return new_list
     6 l1= [11,22,33,44,55]
     7 t1 =("22","33",44,[22,22])
     8 res1 = fun1(l1)
     9 res2 = fun1(t1)
    10 
    11 print(res1)
    12 print(res2)
    View Code
    7、写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将新内容返回给调用者。
    PS:字典中的value只能是字符串或列表
     1 #第一种实现,保留原数据的值,创建一个新数据的值,一般情况下都使用这种方式实现,保留源数据,创建新数据
     2 
     3 def fun2(args):
     4     new_dic ={}
     5     for k,v in args.items():
     6         if len(v) > 2:
     7             new_dic[k] = v[0:2]
     8         else:
     9             new_dic[k] = v
    10     return new_dic
    11 dic_1 ={
    12     "k1":"11v1",
    13     "k2":"22v2",
    14     "k3":[11,22,33,44],
    15 }
    16 res = fun2(dic_1)
    17 print(res)
    18 #第二种实现 不创建新的数据,直接修改源数据
    19 def fun3(args):
    20     for k,v in args.items():
    21         if len(v) > 2:
    22             args[k] = v[0:2]
    23         else:
    24             args[k] = v
    25 dic_2 ={
    26     "k1":"11v1",
    27     "k2":"22v2",
    28     "k3":[11,22,33,44],
    29 }
    30 res2 = fun3(dic_1)
    31 print(res2)
    View Code
  • 相关阅读:
    C++常变量
    C++变量(C++变量定义、变量赋值、命名规则)
    463. Island Perimeter
    500. Keyboard Row
    811. Subdomain Visit Count
    901. Online Stock Span
    419. Battleships in a Board
    620. Not Boring Movies
    893. Groups of Special-Equivalent Strings
    575. Distribute Candies
  • 原文地址:https://www.cnblogs.com/Ksen/p/6641492.html
Copyright © 2020-2023  润新知