python3学习第三周

1.列表,元组操作

列表是通过下标(索引)对元素进行增删该查的。

列表中可以嵌套列表,元组。

列表是有序的。

元组是只读的,不能更改。

2.字符串操作

字符串是不能更改的

3.字典操作

字典是通过key对value进行增删改查的。

字典可以嵌套列表,字典。

字典是无序的。

4.集合操作

集合是一个无序的,不重复的数据组合,它的主要作用是

a.去重:把一个列表变成集合,就自动去重了。

b.关系测试:测试两组数据之间的交集、差集、并集等关系。

a=set([1,2,3,4,5,6])   #创建一个数字集合

b=set("hello")       #创建一个字符集合

list_01=set([1,2,3,4,5,6])

list_02=set([4,5,6,7,8])

list_03=[1,2,3,4,5,4,5,6]

print(list_01,type(list_01),list_02)

print(set(list_03))    #把列表list_03转换成集合完成去重

print(list_01.union(list_02)) #求两个集合的并集

print(list_01.intersection(list_02)) #求两个集合的交集

print(list_01.difference(list_02))   #求两个集合的差集

print(list_02.difference(list_01))   #求两个集合的差集

print(list_01.issubset(list_02))   #判断list_01是list_02的子集吗

print(list_01.issuperset(list_02))   #判断list_01是list_02的父集吗

print(list_01.symmetric_difference(list_02))  
#求list_01和list_02的对称差集

print(list_01.isdisjoint(list_02))   #判断list_01和list_02是否有交集,无返回ture

print(list_01 | list_02) #求两个集合的并集

print(list_01 & list_02) #求两个集合的交集

print(list_01 - list_02)  #求两个集合的差集

print(list_01 ^ list_02)   #求list_01和list_02的对称差集

a=set([1,2,3])

a.add(99)   #给集合中添加一项

a.update([77,88]) #给集合中添加多项

a.remove(99) 
#删除集合中的指定元素,如果指定元素不存在,就会报错

a.discard(99) #删除集合中的指定元素,如果指定元素不存在,不会报错

print(1 in a)   #判断1是否是集合a的一员

print(0 not
in a) #判断0是否不是集合a的一员

print(len(a)) #求集合中的元素个数或者长度

print(a.pop()) #随机删除一个元素,并返回这个元素

5.文件操作

对文件操作的流程:

a.打开文件,得到文件句柄并赋值给一个变量

b.通过句柄对文件进行操作

c.关闭文件

文件操作例子:

f=open("bbc_news","r",encoding="utf-8")  #"r"表示以读的模式打开文件,得到句柄并赋值给f

date=f.read() #通过句柄读取文件并赋值给date

print(date)

f.close() #关闭文件

f=open("bbc_news2","w",encoding="utf-8")  #"w"表示以写的模式打开文件,得到句柄并赋值给f

#"w"也表示创建一个文件

f.write("123456") #通过句柄给文件写入内容

f.close() #关闭文件

f=open("bbc_news2","a",encoding="utf-8")  #"a"表示以append追加模式打开文件,得到句柄并赋值给f

f.write("\n78910") #通过句柄给文件末尾写入内容

f.close() #关闭文件

# readlines() #读取所有行并返回列表

#打印出文件中的前两行

#是低效率循环

f=open("bbc_news","r",encoding="utf-8")

for index,line in enumerate(f.readlines()):

if index<2:

print(line.strip())

#打印出文件中的前两行

f=open("bbc_news","r",encoding="utf-8")

#读一行放进内存,输出后就删除,读取过程中内存中始终只有一行数据

#是高效率循环

count=0

for line in f:

if count<2:

print(line.strip())

count+=1

f.close()

#高效率循环打印出文件中的所有行

f=open("bbc_news","r",encoding="utf-8")

for line in f:

print(line.strip())

f.close()

f=open("bbc_news","r",encoding="utf-8")

print(f.tell()) #打印出当前文件句柄的指针位置

print(f.readline())

print(f.tell())

f.seek(0)       #让当前文件句柄的指针位置回到零

print(f.readline())

print(f.tell())

print(f.encoding) #打印出文件的编码格式

print(f.fileno()) #打印出文件在内存中的编号

print(f.seekable())#判断文件句柄的指针位置能否回到零

f.close()

f=open("bbc_news2","a",encoding="utf-8")

f.write("hello2\n")

f.flush() #刷新:强制把写在缓存或者内存中的内容写到硬盘上

f.close()

#flush()应用打印进度条

import sys,time

for i in range(50):

sys.stdout.write("#")

sys.stdout.flush()

time.sleep(0.2)

f=open("bbc_news","a",encoding="utf-8")

f.truncate(10) #从文件的首行首字符开始截断10个字符

f.close()"""

f=open("bbc_news","r+",encoding="utf-8") #以读写模式打开文件

print(f.readline())

f.write("\nagaggg") #以读写模式打开文件然后写,结果是在文件最后追加

f=open("bbc_news","a+",encoding="utf-8") #以追加读写模式打开文件

f=open("bbc_news","rb") #以二进制模式读取文件,网络传输只能用二进制,视频也是二进制

f=open("bbc_news3","wb") #以二进制模式写入文件

f.write("hello".encode())
#"hello".encode()把字符串转二进制

f.close()

文件修改:

f=open("bbc_news","r",encoding="utf-8")

f_new=open("bbc_news.bk","w",encoding="utf-8")

"""

#修改文件后保存到新文件中(源文件不变)

for line in f:

if "你" in line:

line=line.replace("你","她")

f_new.write(line)

f.close()

f_new.close()"""

with用法:

#用with打开文件,执行完后会自动关闭打开的文件

with open("bbc_news","r",encoding="utf-8") as f:

for line in f:

print(line)

#用with可以同时打开几个文件

with open("bbc_news","r",encoding="utf-8") as f, \

open("bbc_news2", "r",
encoding="utf-8") as f2:

#在dos环境下运行该文件输入:python 文简名.py 参数1 参数2

#Sys.argv其实就是一个列表,里边的项为本文件的绝对路径+用户输入的参数

import sys

print(sys.argv) #打印列表(该列表元素是本文件的绝对路径+参数1+参数2)

print(sys.argv[0]) #打印出列表中的第一个元素

print(sys.argv[1]) #打印出列表中的第二个元素

6.字符编码与转码

# -*- coding:utf-8
-*-  表示本文件的编码格式

# Author:张泼

#无论是gbk转uft-8,还是utf-8转gbk,都需要先转换成Unicode,

# 而在python3中字符串的编码格式是unicode,所以可以直接转换成其它编码格式

#encode()转化为其它编码格式,decode()转换成Unicode格式,

#在Python3中要正常显示字符串要把字符串转换成Unicode格式

s="你好" #在python3中字符串编码格式是Unicode

unicode_to_gbk=s.encode("gbk") #Unicode转bgk

gbk_to_unicode=unicode_to_gbk.decode("gbk") #bgk换Unicode

unicode_to_utf8=gbk_to_unicode.encode("utf-8") #Unicode换uft-8

#gbk转uft-8

s.encode("gbk").decode("gbk").encode("utf-8")

print(unicode_to_gbk)

print(gbk_to_unicode)

print(unicode_to_utf8)

7.函数

(1)函数基本语法及特性

函数概念:函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。

import  time

#打印日志并且加上日志打印时间时间

time_format="%Y-%m-%d
%X"

time_curent=time.strftime(time_format)

def logger():

with
open("a.text","a+",encoding="utf-8") as f:

f.write("%s你是我的小苹果!\n"%time_curent)

def test():

logger()

test()

特性:a.减少重复代码

b.使程序变得可拓展

c.使程序边的可维护

a.函数定义:

def test():

print("hello")

def test():

pass

b.函数调用:

test()

c.带参函数:

def cal(x,y):

res=x+y

return res

(2)函数参数

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

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

def cal(x,y): #x,y为形参

res=x+y

return res

c=cal(3,5) #3,5为实参

print(c)

调用函数时,给形参传入值可以按照位置传入,也可以按照关键字传入。

位置参数调用

cal(4,1) #4,1为位置参数调用(按位置传入),与形参一一对应

关键字参数调用

cal(y=1,x=4)  # y=1,x=4为关键字参数调用(按关键字传入),与形参顺序无关。

c.默认参数:

#带有默认参数的函数

deftest(x,y=2):

print(x)

print(y)

test(1)  #用默认值

test(1,y=6)  #用你指定的值

总结:

这个参数在调用时不指定,那就用默认值,指定了的话,就用你指定的值

d.非固定参数:

若函数在定义时不确定用户想传入多少实参数,就可以使用非固定参数。

*表示这个参数的个数不确定,args表示参数名

#非固定参数函数定义1

def sum(a,b,*args):  #args接收位置参数,并转换为元组形式

print(a,b,args)

sum(1,3)  #输出:1 3 ()  #后面这个()就是args,只是因为没传值,所以为空

sum(1,3,4,5,6,7,8,9)  #输出:1 3 (4, 5, 6, 7, 8, 9)

#非固定参数函数定义2

**表示这个参数的个数不确定,kwargs表示参数名

def sum(a,b,**kwargs):  #kwargs接收关键字参数,并转换为字典形式

print(a,b,kwargs)

sum(1,3)  #输出:1 3 {} #后面这个{}就是args,只是因为没传值,所以为空

sum(1,3,c=6,d=8)  #输出:1 3 {‘c‘: 6, ‘d‘: 7}

#非固定参数函数定义3

def
test(a,b,*args,**kwargs):

print(a)

print(b)

print(args)

print(kwargs)

test(1,2,3,4,name="zb",id="001")

输出结果:

1

2

(3, 4)

{‘name‘: ‘zb‘, ‘id‘:
‘001‘}

test(1,2,name="zb",id="001")

输出结果:

1

2

()

{‘name‘: ‘zb‘, ‘id‘:
‘001‘}

总结:

args接收N个位置参数,并转换为元组形式。

kwargs接N个收关键字参数,并转换为字典形式。

(4)全局与局部变量

a.在子程序中(函数)定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。

b.全局变量作用域是整个程序,局部变量作用域是定义该变量的函数。

c.当全局变量与局部变量同名时:

在定义局部变量的函数内,局部变量起作用;在其它地方全局变量起作用。

d.字符串、数字这类全局变量是不能用局部变量直接更改的,列表、字典、集合、类这类全局变量是能够用局部变量直接更改的

name="liu chen"

def change_name():

global name   #声明此处的变量为全局变量,就可以改全局变量的值

name="wjb"

print(name)

change_name()

print(name)

#在函数中定义全局变量,不要用

def change_name():

global name   #声明此处的变量为全局变量

name="wjb"

print(name)

change_name()

names=["n1","n2"]

def chang_name():

names[0]="mn"  #更改全局变量names的值

print(names)

chang_name()

(5)返回值

返回值的数=0时,则返回none

返回值的数=1时,则返回object

返回值的数>1时,则返回元组tuple

要想获取函数的执行结果,就可以用return语句把结果返回,为什么要有返回值,因为其它程序可能要用的。

注意:

a.函数在执行过程中只要遇到return语句,就会停止执行并返回结果,也可以理解为 return 语句代表着函数的结束

b.如果未在函数中指定return,那这个函数的返回值为None

(6)递归

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

递归特性:

a.必须有一个明确的结束条件。

b.每次进入根深一层递归时,问题规模都应该比上一次递归都应该减少。

c.效率不高。

def calc(n):

print(n)

if int(n/2)>0:

return calc(int(n/2))

print("->",n)

calc(10)

(7)匿名函数

(8)函数式编程介绍

函数式编程与我们所说的函数不一样。

函数式编程

def test1():

print("so do i")

return 0

面向过程编程

def test2():

print("so do i")

总结:

如果函数体中有return的叫函数式编程,否则叫面向过程编程

(9)高阶函数

高阶函数概念:一个函数接收另一个函数作为参数,那么这个函数叫高阶函数。

def calc(a,b,f):

print(f(a)+f(b))

calc(3,-9,abs)

(10)内置函数

5.内置函数

程序练习

1.实现简单的替换功能

#把旧文件中的语句替换成新的,存放在新文件中

def replaced(old_file,new_file,old_word,new_word):

with open(old_file,"r",encoding="utf-8")as f1,\

open(new_file,"w",encoding="utf-8") as f2:

for line in f1:

if old_word in line:

line=line.replace(old_word,new_word)

f2.write(line)

else:

f2.write(line)

replaced("b.text","c.text","樱桃","花生")

2.修改haproxy配置文件

#查询


def query():

with open("d.text","r",encoding="utf-8") as f1:

for line in f1:

if line.strip().startswith("backend")
or line.strip().startswith("server"):

print(line.strip())

#添加

def add_bs():

arg_dict = {

"bakend": "www.hao123.com",

"record": {

"server": "100.1.8.9
100.1.8.9",

"weight": 20,

"maxconn": 30

}

}

with open("d.text","a",encoding="utf-8") as f2:

f2.write("\n"+"bakend
"+arg_dict["bakend"])

f2.write("\n"+"        server "+str(arg_dict["record"]["server"])+\

" weight "+str(arg_dict["record"]["weight"])+\

" maxconn "+str(arg_dict["record"]["maxconn"]))

#删除

def delete():

with open("d.text","r",encoding="utf-8") as f1,\

open("e.text", "w",
encoding="utf-8") as f2:

for line in f1:

if "bakend www.hao123.com"==line.strip():

line=line.replace("bakend www.hao123.com","")

f2.write(line)

elif "server 100.1.8.9 100.1.8.9 weight 20 maxconn 30"==line.strip():

line=line.replace("server 100.1.8.9 100.1.8.9 weight 20
maxconn 30","")

f2.write(line)

else:

f2.write(line)

#打印选项

menus={"1":"查询","2":"添加","3":"删除","4":"退出"}

for i in menus:

print(i+"."+menus[i])

#选择功能

ischoice=True

while ischoice:

choice = int(input("请选择功能:"))

if choice==1:

print("你选的是查询,查询结果如下:")

query()

elif choice==2:

print("你选的是添加")

add_bs()

elif choice==3:

print("你选的是删除")

delete()

else:

print("你选的是退出")

ischoice=False

原文地址:https://www.cnblogs.com/zhangpo/p/9119580.html

时间: 2024-10-11 15:26:25

python3学习第三周的相关文章

201671010140. 2016-2017-2 《Java程序设计》java学习第三周

java学习第三周       不知不觉,学习java已经是第三周了,不同于初见时的无措,慌张,在接触一段时日后,渐渐熟悉了一些,了解到了它的便利之处,也体会到了它的一些难点,本周主攻第四章,<对象与类>,事实上,在第二周的实验中,我就已经接触过它了,当时我并不理解Scanner方法使用时,为什么要使用import语句,现在,通过学习第四章,我知道了,通过控制台进行输入时,需要构造一个Scanner对象,并与"标准输入流"System.in关联,使用import语句引入ja

linux学习第三周总结

linux学习第三周总结 学习linux的第三周,也是惊喜最多的一周,让我看到学linux并不是很枯燥,相反非常有趣,可玩性很多,但越深入越觉得可学习的地方有很多,也有非常多的不足,所以革命尚未成功,同志更需努力 同样来简单终结一下本周的重点,内容比较多,说要简单提一下,不做详解 一.shell脚本编程基础 内容:1. 编程基础 2. 脚本基本格式3. 变量4.运算5.条件测试6.条件判断if 7.条件判断case 8.配置用户环境 shell脚本:包含一些命令或声明,并符合一定格式的文本文件

学习H5三周感想

首先,我是一个不爱学习的孩子,不愿意动手,但是为了能够将来能够自食其力,我就选择了这个比较火的H5,希望自己将来有个能有个好的收入,可以娶她回家. 下面就说说我学习三周H5的感受吧.. 第一周:刚接触有新鲜感,感觉挺舒服的,但是越往后越让我感到害怕,看着那一行行的代码,我都在怀疑我是不是得了密集恐惧症.哈哈,可见我多想了,第一周学习简单的HTML语言,这个相对来说非常简单,就是所能做的图片不多,必须要和css以及js联合起来才能会出现各种各样缤纷色彩的网页.对第一个老师——许竞先的感受是:这个老

学习第三周

学生管理系统 ---------------------------------------------------------------------------------------------------------------------------- public class StudentManager { /**学生数组*/ public static Student[] stuArray = new Student[20]; /**学生人数*/ public static in

博览网C++学习第三周

本周学习真正的面向对象程序开发, 主要就是编写几个有关系(is-a)的类,然后编程的时候针对基类的指针和引用编程. 其实,C++在这里(指面向对象编程)有一些惯用法: 1. 基类析构函数必为虚函数 2. 基类应该要有虚函数(除了虚析函数外的虚函数),否则设计是有问题的. 3. C++中有一个派别认为虚函数(除了虚析函数外的虚函数 ) 都应该是private的, 这种思想本质上是将原本public的虚函数都"包裹"了一层非虚函数,非虚函数 调用私有虚函数也就是模板方法设计模式.我觉得明白

前端学习第三周BFC的学习

BFC之前学的时候没太懂,后来专门复习了下. BFC(Block formatting context):可以直接翻译为"块级格式化上下文",它是一个独立的渲染区域,只有Block-level box参与,它规定了内部的Block-level Box如何布局,并且与这个区域外部毫不相干. BFC的布局规则:1.内部的Box会在垂直方向,一个一个的放置:2.Box垂直方向的距离由margin决定.且同一个BFC的两个相邻Box的margin会发生重叠:3.每个元素的margin box的

python学习第三周(下 函数)

本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值  嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测试, 交集\差集\并集\反向(对称)差集 2. 元组 只读列表,只有count, index 2 个方法 作用:如果一些数据不想被人修改, 可以存成元组,比如身份证列表 3. 字典 key-value对 特性: 无顺序 去重 查询速度快,比列表快多了 比list占用内存多 为什么会查询速度会快呢?

机器人学-估计与学习-第三周

3.1 robotic mapping 3.1.1 Introduction 3.1.2 Introduction to mapping Map and Mapping (1) map is a spatial model of robot's environment (2) mapping is a process for building a map (3) consideration for mapping - map representation - avalable sensors -

python学习第三周总结

一.Python中的set集合 1.set概念 set是可变的.无序的.不重复的元素集合.set的元素及元素里面的元素不能出现不可哈希类型.(即set的元素要求必须可以hash) 常用的不可hash类型有list.set.bytearray set的元素不可索引,但可以迭代 2.set定义 例如: s1 = set() 例如: s2 = set(range(5)) 例如: s3 = {‘a’,2,2,3,‘abc’} 等价于set = {‘a’,2,3,‘abc’}.set里面的元素不能重复.