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
原文地址:https://www.cnblogs.com/Ksen/p/6641492.html