栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

呕心沥血整理的python基础知识与练习题【你值得拥有!!!!】

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

呕心沥血整理的python基础知识与练习题【你值得拥有!!!!】

一、基础语法 1、输入与输出(hellw word)
# 国际化输出
print("hello word")
print("word",end=" ") #不换行输出

#输入
# python3去除了raw_input 保留了input,将所有输入默认为字符串处理,并返回字符串类型。
a1 = input("input number: ")  

#查看类型
print(a1,type(a1)) #  

#判断a2的类型是否是int类型
a2=11
print(isinstance(a2,int))  #true

#保留4位小数
number=13.145924535       
print("{:.6} s".format(number))					# 从整个数据截取(从左到右)
print(f"{round(number,4)} s".format(number))    #保留4位小数(四舍五入)
print(round(3.1415, 2))    #保留2位小数(四舍五入)


连接符"+"(数据类型为字符串时,或者一个为字符串,一个为其他类型是做的是连接符)
str1="hello"
str2="word"
print(str1+str2)   #helloword
2、基本运算符
print(5 + 4)  # 加法 9

print(4.3 - 2) # 减法  2.3

print(3 * 7 ) # 乘法  21

print( 2 / 4)  # 除法,得到一个浮点数 0.5

print( 9 // 2 )# 除法,得到一个整数 4.5

print( 17 % 3) # 取余 2

print( 2 ** 5)# 乘方 32

print( abs(9 // 2 ))# 除法,得到一个整数 4.5  (向上取整)  4
3、常用的内置函数与模块 1、内置函数
abs(num) 求绝对值
max(num1,num2,…) 计算最大值
min(num1,num2,…) 计算最小值
round(num) 四舍五入 只保留整数部分
round(num,n) 四舍五入,指定保留小数位数
    p = 3.147
    print(round(p,2))  # 四舍五入,保留两位小数
pow(x,y) 求x的y次幂

eg:

p = 3.14623
print(round(p))  # 四舍五入到整数


2、math模块函数 (使用前需先导入math模块–>import math
ceil(num) 向上取整
floor(num) 向下取整
sqrt(num) 开平方
log(x,base) 以base为基数,x的对数

eg:

# match模块
p1 = 3.1
print(math.ceil(p1)) # 向上取整
3、使用前需先导入random模块–>import random
random.random() 指0到1范围之内的随机小数(注:[0,1),包含0不包含1)
random.choice(seq) 从一个序列中随机挑选随机数
random.uniform(x,y) 取x,y范围之内的随机小数(注:[x,y],包含x和y)
random.randint(x,y) 取x,y范围之内的随机整数(注:[x,y],包含x和y)
random.randrange(start,stop=None,step=1) 获取给定区间内的一个随机整数 [start,stop),包含起始值,但不包含结束值
random.randrange(start,stop=None,step=2) 获取给定区间内的一个随机整数,步长step为2

eg:

print('取1到4内的随机整数(包含1但不包含4)=',random.randrange(1,4)) # 取1到4内的随机整数(包含1但不包含4)
print("取整=",math.trunc(3.4))  # 取整

扩展:截取小数第n位

def get_strip(number,n)->str:
    str_number=str(number)
    a,b=str_number.split(".")
    b=(b+"0"*n)[:n]
    return ".".join([a,b])

print(get_strip(123.4567, 3))
4、字符串的处理 转义字符
n	换行符,将光标位置移到下一行开头。
r	回车符,将光标位置移到本行开头。
t	水平制表符,也即 Tab 键,一般相当于四个空格。
a	蜂鸣器响铃。注意不是喇叭发声,现在的计算机很多都不带蜂鸣器了,所以响铃不一定有效。
b	退格(Backspace),将光标位置移到前一列。
\	反斜线
'	单引号
"	双引号
	在字符串行尾的续行符,即一行未完,转到下一行继续写
:return:
# 前面加上r代表后面字符不转义
    print("12345n6789")
    print(r"12345n6789")
5、字串格式化
    常用的格式化字符
     %s	 格式化字符串
     %d	 格式化整数
     %f	 格式化浮点数字,可指定小数点后的精度
    :return:
方式一:
    print("%s同学,今年%d岁"%("小美",20))  #小美同学,今年20岁

方式二:
    # 这种更加灵活
    print("{}同学,今年{}岁".format("小美", 20))  # 小美同学,今年20岁

方式三:
    # 字面量格式
    name="小美"
    age=20
    print(f"{name}同学,今年{age}岁")  # 小美同学,今年20岁
6、正则表达式
findall(pattern, string, flags=0)
参数 pattern 为正则表达式, string 为待操作字符串, flags 为所用模式,函数作用为在待操作字符串中寻找所有匹配正则表达式的字串,
返回一个列表,如果没有匹配到任何子串,返回一个空列表。

match(pattern, string, flags=0)
使用指定正则去待操作字符串中寻找可以匹配的子串, 返回匹配上的第一个字串,并且不再继续找,需要注意的是 match
函数是从字符串开始处开始查找的,如果开始处不匹配,则不再继续寻找,返回值为 一个 SRE_Match (参见 第四小节 re 内置对象用法) 对象,
找不到时返回 None

search(pattern, string, flags=0)
函数类似于 match,不同之处在于不限制正则表达式的开始匹配位置

.                    匹配任意字符(不包括换行符)
^                    匹配开始位置,多行模式下匹配每一行的开始
$                    匹配结束位置,多行模式下匹配每一行的结束
*                    匹配前一个元字符0到多次
+                    匹配前一个元字符1到多次
?                    匹配前一个元字符0到1次
\                   转义字符,跟在其后的字符将失去作为特殊元字符的含义,例如\.只能匹配.,不能再匹配任意字符
[]                   字符集,一个字符的集合,可匹配其中任意一个字符
A                   匹配字符串开始位置,忽略多行模式
Z                   匹配字符串结束位置,忽略多行模式
b                   匹配位于单词开始或结束位置的空字符串
B                   匹配不位于单词开始或结束位置的空字符串
d                   匹配一个数字, 相当于 [0-9]
D                   匹配非数字,相当于 [^0-9]
s                   匹配任意空白字符, 相当于 [ tnrfv]
S                   匹配非空白字符,相当于 [^ tnrfv]
w                   匹配数字、字母、下划线中任意一个字符, 相当于 [a-zA-Z0-9_]
W                   匹配非数字、字母、下划线中的任意字符,相当于 [^a-zA-Z0-9_]


I    IGNORECASE, 忽略大小写的匹配模式, 样例如下
L    LOCALE, 字符集本地化。这个功能是为了支持多语言版本的字符集使用环境的,比如在转义符w,在英文环境下,它代表[a-zA-Z0-9_],即所以英文字符和数字。
如果在一个法语环境下使用,缺省设置下,不能匹配"é" 或   "ç"。加上这L选项和就可以匹配了。不过这个对于中文环境似乎没有什么用,它仍然不能匹配中文字符。
M    MULTILINE,多行模式, 改变 ^ 和 $ 的行为
findall
s = '''first lines econd line third line'''
print(re.findall("w+", s))
# output> ['first', 'line', 'second', 'line', 'third', 'line']
match
s = '''first line second line third line'''
m = re.match("w+",s)
print(m)
# output> <_sre.SRE_Match object at 0x0000000002BCA8B8>
print(m.group(0))
# output> first
search
s = '''first line second line third line'''
print(re.search('iw+', s).group())
# output> irst
二、数据类型 1、数据类型

不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)

1、string【字符串】
    str0 = 'Runoob'
    print(str0)  # 输出字符串  Runoob
    print(str0[0:-1])  # 输出第一个到倒数第二个的所有字符 Runoo
    print("abcd"[0:2])  #ab
    print(str0[0])  # 输出字符串第一个字符 R
    print(str0[2:5])  # 输出从第三个开始到第五个的字符 noo
    print(str0[2:])  # 输出从第三个开始的后的所有字符  noob
    print(str0 * 2)  # 输出字符串两次,也可以写成 print (2 * str) RunoobRunoob
    print(str0 + "TEST")  # 连接字符串  RunoobTEST

    print("1234n5678")  #换行
    print("1234\n5678") #转义

    str1='abcdef'
    print(str1[0:3])

    # 字符串反转
    a="123456789"
    print("字符串反转:",a[::-1])     # 987654321
2、list【列表】
list 列表
元组使用小括号 ( ),列表使用方括号 [ ]。
截取的语法格式如下  变量[头下标:尾下标]   索引值以 0 为开始值,-1 为从末尾的开始位置。
len(list) 列表元素个数
max(list) 返回列表元素最大值
min(list) 返回列表元素最小值
list(seq) 将元组转换为列表

list.append(obj) 在列表末尾添加新的对象
list.count(obj) 统计某个元素在列表中出现的次数
list.pop([index=-1]) 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值
list.remove(obj) 移除列表中某个值的第一个匹配项
list.reverse() 反向列表中元素
list.sort( key=None, reverse=False) 对原列表进行排序
list.extend(seq) 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)
list.index(obj) 从列表中找出某个值第一个匹配项的索引位置
list.insert(index, obj) 将对象插入列表
list.clear() 清空列表
list.copy() 复制列表

eg:

    list01 = [ 'abcd', 786 , 2.23, 'runoob', 70.2,[1,2,3]]
    tinylist = [123, 'runoob']
    print (list01)            # 输出完整列表  ['abcd', 786, 2.23, 'runoob', 70.2, [1, 2, 3]]
    print (list01[0])         # 输出列表第一个元素   abcd
    print (list01[1:3])       # 从第二个开始输出到第三个元素  [786, 2.23]
    print (list01[2:])        # 输出从第三个元素开始的所有元素   [2.23, 'runoob', 70.2, [1, 2, 3]
    print (tinylist * 2)    # 输出两次列表   [123, 'runoob', 123, 'runoob']
    print (list01 + tinylist) # 连接列表  把两个列表连接起来


    del list01[0]
    print("删除第一个元素后的list",list01)

    list01.append('Baidu')
    print("删除第一个元素Baidu后的list", list01)

    print(list)
    print(type(list[0]))
    print(list[0])


	list1=['1','2','3',[1,2]]
	print(list1[-1][1])  #2


    #列表的反转
	print(list1[::-1]) #[[1, 2], '3', '2', '1']
    list1.reverse()    #[[1, 2], '3', '2', '1']

	遍历列表
	for i in list1:
        print(i)
3、tuple【元组】
Tuple(元组)
元组使用小括号 ( ),列表使用方括号 [ ]。
元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。

元组内置函数
len(tuple) 计算元组元素个数。
max(tuple) 返回元组中元素最大值。
min(tuple) 返回元组中元素最小值。
tuple(iterable) 将可迭代系列转换为元组。

eg:

tuple = ('abcd', 786, 2.23, 'runoob', 70.2)
tinytuple = (123, 'runoob')
print(tuple)  # 输出完整元组  ('abcd', 786, 2.23, 'runoob', 70.2)
print(tuple[0])  # 输出元组的第一个元素  abcd
print(tuple[1:3])  # 输出从第二个元素开始到第三个元素  (786, 2.23)
print(tuple[2:])  # 输出从第三个元素开始的所有元素   (2.23, 'runoob', 70.2)
print(tinytuple * 2)  # 输出两次元组  (123, 'runoob', 123, 'runoob')
print(tuple + tinytuple)  # 连接元组  穿件出一个新的元组  ('abcd', 786, 2.23, 'runoob', 70.2, 123, 'runoob')

元组的反转
print(tup1[::-1])

删除元组
tup = ('Google', 'Runoob', 1997, 2000)
print(tup)
del tup


for i in tup:
      print(i)
4、set【集合】
Set(集合)
集合支持可变数据类型

集合(set)是由一个或数个形态各异的大小整体组成的,构成集合的事物或对象称作元素或是成员。
基本功能是进行成员关系测试和删除重复元素。
add()	为集合添加元素
update()	给集合添加元素
clear()	移除集合中的所有元素
discard()	删除集合中指定的元素
pop()	随机移除元素
remove()	移除指定元素
sites = {'Google', 'Google','Taobao', 'Runoob', 'Facebook', 'Zhihu', 'Baidu',1}


print(sites)  # 输出集合,重复的元素被自动去掉
 # print(sites[1])

# 成员测试
if 'Runoob' in sites:
     print('Runoob 在集合中')
else:
    print('Runoob 不在集合中')

# set可以进行集合运算
a = set('abracadabra')
b = set('alacazam')

print(a)
print(a - b)  # a 和 b 的差集
print(a | b)  # a 和 b 的并集
print(a & b)  # a 和 b 的交集
print(a ^ b)  # a 和 b 中不同时存在的元素
# 1、添加元素
sites.add("a")

# 2、移除元素
sites.remove("a")

# 我们也可以设置随机删除集合中的一个元素,语法格式如下:
sites.pop()

# 4、清空集合
# sites.clear()
5、dictionary【字典】
len(dict) 计算字典元素个数,即键的总数。
str(dict) 输出字典,可以打印的字符串表示
type(variable) 返回输入的变量类型,如果变量是字典就返回字典类型。

dict.clear() 删除字典内所有元素
dict.copy() 返回一个字典的浅复制
dict.fromkeys() 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值
dict.get(key, default=None)  返回指定键的值,如果键不在字典中返回 default 设置的默认值
key in dict 如果键在字典dict里返回true,否则返回false
dict.items() 以列表返回一个视图对象
dict.keys() 返回一个视图对象
dict.update(dict2) 把字典dict2的键/值对更新到dict里
dict.values() 返回一个视图对象
pop(key[,default]) 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
popitem()随机返回并删除字典中的最后一对键和值。
dict = {}
dict['one'] = "1 - 菜鸟教程"
dict[2] = "2 - 菜鸟工具"

tinydict = {'name': 'runoob', 'code': 1, 'site': 'www.runoob.com'}
print(dict)
print(dict['one'])  # 输出键为 'one' 的值
print(dict[2])  # 输出键为 2 的值
print(tinydict)  # 输出完整的字典
print(tinydict.keys())  # 输出所有键
print(tinydict.values())  # 输出所有值
info={"name":"mary","age":"12"}

#获取指定地点中的值
print(info["name"],info["age"]) #mary 12
print(info.get("name")) # mary


print(info) #{'name': 'mary', 'age': '12'}

info1=info.copy()
info.clear()
print(info1)  # {'name': 'mary', 'age': '12'},复制的

for x,y in info1.items():
    print(x,y) # name mary    age 12

# 初始化字典
keys=["name","age","class","address"]
info2=dict.fromkeys(keys,"null")
print(info2)    # {'name': 'null', 'age': 'null', 'class': 'null', 'address': 'null'}

keys1 = ("name", "age", "class", "address")
info3 = dict.fromkeys(keys1, "null")
print(info3)  # {'name': 'null', 'age': 'null', 'class': 'null', 'address': 'null'}

keys2 = ("name", "age", "class", "address")
a=['1','2','3','4']
info4 = dict.fromkeys(keys2,"null")
print(info4)  # {'name': 'null', 'age': 'null', 'class': 'null', 'address': 'null'}

将两个元组转换为字典

def to_dictionary(keys, values):
  return {key:value for key, value in zip(keys, values)}

to_dict=to_dictionary(('a', 'b'), [1, 2])  # { a: 1, b: 2 } 传元组和列表都可以

遍历字典

case = {'method': 'get', 'url': '/cgi-bin/token',
        'params': {'appid': 'wx74a8627810cfa308', 'secret': 'e40a02f9d79a8097df497e6aaf93ab80',
                   'grant_type': 'client_credential'}}
print(case['method'])
for key, value in (dict(case)).items():
    if key in ['params', 'data', 'json']:
        print(value)
2、数据类型之间相互的转换
# repr(x)    #将对象x转换为表达式字符串
# eval(str)    #用来计算在字符串中的有效Python表达式, 并返回一个对象
# tuple(s)    #将序列s转换为一个元组
# list(s)    #将序列s转换为一个列表
# set(s)    #转换为可变集合
# dict(d)    #创建一个字典d必须是一个(key, value)元组序列。
# frozenset(s)    #转换为不可变集合
# chr(x)    #将一个整数转换为一个字符
# ord(x)    #将一个字符转换为它的整数值
# hex(x)    #将一个整数转换为一个十六进制字符串
# oct(x)    #将一个整数转换为一个八进制字符串
1、基本数据类型的转换 int,float,str
x = int(1)  # x 输出结果为 1
y = int(2.8)  # y 输出结果为 2
z = int("3")  # z 输出结果为 3
x = float(1)  # x 输出结果为 1.0
y = float(2.8)  # y 输出结果为 2.8
z = float("3")  # z 输出结果为 3.0
w = float("4.2")  # w 输出结果为 4.2
x = str("s1")  # x 输出结果为 's1'
y = str(2)  # y 输出结果为 '2'
z = str(3.0)  # z 输出结果为 '3.0'
2、将字符串,集合,元组转换为列表list
a = "python"  # 字符串
b = {1, 2, 3}  # 集合
c = (1, 2, 3)  # 元组
print(list(a)) # ["p", "y", "t", "h", "o", "n"]
print(list(b)) # [1, 2, 3]
print(list(c)) # [1, 2, 3]

3、将字符串,列表转换成集合set
a = "python"  # 字符串
b = [1, 2, 1, 2]  # 列表
c = {"a": 1, "b": 2}  # 字典
d = (1, 2, 3, 4)  # 元组
print(set(a)) # {"t", "o", "n", "p", "h", "y"}
print(set(b)) # {1, 2}
print(set(c)) # {"b", "a"}
print(set(d)) # {1, 2, 3, 4}
3、将字符串,类别,字典,集合转换为元组 tuple
a = "python"  # 字符串
b = [1, 2, 1, 2]  # 列表
c = {"a": 1, "b": 2}  # 字典
d = {1, 2, 3, 4}  # 集合

print(tuple(a)) # ("p", "y", "t", "h", "o", "n")
print(tuple(b)) # (1, 2, 1, 2)
print(tuple(c)) # ("a", "b")
print(tuple(d)) # (1, 2, 3, 4)
# 尝试将字典转换为元组时,只能得到由字典的key组成的元组,看来字典有些特殊
4、将元组,列表转换为内置函数dict
无法直接使用dict函数将列表,元组,集合转换成字典,这是由字典的结构决定的,
字典里的元素永远以key-value对的形式存在,key-value是一个映射关系,
知道key,便可以获得value,而其他3种容器类型数据不存在映射关系,因此无法转换。
dict函数有自己特殊的使用方法
my_dict = dict(a=1, b=2)
print(my_dict)  #{"a": 1, "b": 2}


def to_dictionary(keys, values):
	 return {key:value for key, value in zip(keys, values)}

to_dictionary1(('a', 'b'), ['1',' 2'])  # { a: 1, b: 2 } 传元组和列表都可以
三、循环控制语句 循环语句 while循环
while 判断条件(condition):
    执行语句(statements)……


def while_else():
    number=1
    while number < 5:
        print(number, " 小于 5")
        number = number + 1
    else:
        print(number, " 大于或等于 5")

for 语句
def for_in():
    sites = ["Baidu", "Google", "Runoob", "Taobao"]
    for site in sites:
        if site == "Runoob":
            print("菜鸟教程!")
            break
        print("循环数据 " + site)
    else:
        print("没有循环数据!")
    print("完成循环!")
控制语句
def test1():
    age = int(input("请输入你家狗狗的年龄: "))
    print("")
    if age <= 0:
        print("你是在逗我吧!")
    elif age == 1:
        print("相当于 14 岁的人。")
    elif age == 2:
        print("相当于 22 岁的人。")
    elif age > 2:
        human = 22 + (age - 2) * 5
        print("对应人类年龄: ", human)

    ### 退出提示
    input("点击 enter 键退出")
四、函数 1、函数的定义
def 函数名(参数列表):
    函数体

无参数无返回
无参数有返回

有参数有返回
有参数无返回


参数*    把多个参数基于元组的方式进行传参
参数**   把多个参数基于字典的方式传参
2、参数的传参方式,方法的定义与使用 1、位置传参

方式1:

def  fun(a,b,c):
    print(a+b+c)

fun(10,20,30) #位置传参

方式二:
参数* 把多个参数基于元组的方式进行传参
参数** 把多个参数基于字典的方式传参

def  fun(a,b,c):
    print(a+b+c)
list=[1,2,3]
fun(*list)   #将每个元素转换为位置传参传入创餐
2、关键字传参

方式一:

def  fun(a,b,c):
    print(a+b+c)
fun(a=1.1,b=1.2,c=1.3)  #关键字传参

方式二:
参数* 把多个参数基于元组的方式进行传参
参数** 把多个参数基于字典的方式传参

def  fun(a,b,c):
    print(a+b+c)
dic={'a':1.2,'b':1.3,'c':1.4}
fun(**dic)  #将每个字典,传入为关键字传参
3、静态方法,实例方法,类方法的定义与调用
class Students:

    def __init__(self,name,age):
        self.name=name  #name称为局部变量,self.name实例属性   将局部变量赋值给实例属性
        self.age=age


    def people1(self): #实例方法

        print(self.age)
        print("实例方法被调用")

    @staticmethod
    def people2():     #静态方法
        print("静态方法被调用")


    @classmethod
    def people3(cls):  #类方法
        print("类方法被调用")


def people():          #函数
    pass

stu1=Students("张灿",10)  #stu1实例类对象

# 方式1,通过对象调用#
stu1.people1()
stu1.people2()
stu1.people3()


# 方式2
Students.people1(stu1)  #与这行代码功能相同 stu1.people1()  调用self自身的对象

# 方式3
Students("张灿",20).people1()  # 等同于 stu1=Students("张灿",10)+stu1.people1()

#静态方法和类方法可以直接用类调用
Students.people2()
Students.people3()
4、私有属性的访问
class Students:
    a=1

    def __init__(self,name,age):
        self.name=name  #name称为局部变量,self.name实例属性   将局部变量赋值给实例属性
        self.__age=age  #私有属性,不希望在外部使用

    def show(self):
        print(self.name,self.__age)


def people():          #函数
    pass

stu1=Students("张灿",10)  #stu1实例类对象
# 方式1#
stu1.show()
#给实例属性赋值
stu1.name="张三"

#直接访问实例属性
print(stu1.name)

# print(dir(stu1))
print(stu1._Students__age)  #可以通过_Students__age访问

print(Students.a)
2、匿名函数
# 所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
x = lambda a : a + 10
print(x(5))



# 可写函数说明  两个参数
sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数
print("相加后的值为 : ", sum(10, 20))
3、递归函数
def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n - 1)


factorial(1)

六:面向对象 1、类,方法,属性,对象的定义
# 类定义
class people:
    # 定义基本属性
    name = ''
    age = 0
    # 定义私有属性,私有属性在类外部无法直接进行访问
    __weight = 0

    # 定义构造方法
    def __init__(self, name, age, weight):
        self.name = name
        self.age = age
        self.__weight = weight

    def speak(self):
        print("%s 说: 我 %d 岁。" % (self.name, self.age))
        print(f"{self.name} 说: 我 {self.age} 岁。")
# 实例化类
p = people('runoob', 10, 30)
p.speak()
2、继承
class Person(object):

    def __init__(self,name,age):
        self.name=name
        self.age=age

    def info(self):
        print(self.name,self.age)

class student(Person):
    def __init__(self,name,age,stu_id):
        super().__init__(name,age)
        self.stu_id=stu_id

    def info(self):
        super().info()
        print(self.stu_id)


class teacher(Person):
    def __init__(self,name,age,teacher_id):
        super().__init__(name, age)
        self.teacher_id = teacher_id

    def info(self):
        print(self.name,self.age,self.teacher_id)





if __name__ == '__main__':

    stu=student("张三",10,101)
    stu.info()

    teacher("李四",20,201).info()
3、重写
class Student(object):

    def __init__(self,name,age):
        self.name=name
        self.age=age


    def __str__(self) -> str: #重写了objec中的str方法    一般会重写类的str方法,用于类的描述
        return f'我叫{self.name}今年{self.age}岁'



if __name__ == '__main__':
    stu = Student('张三', 20)
    print(stu)  #返回值的是一个字符串

    print(type(stu)) #返回的是一个对象

4、多态
class Animal(object):
    def eat(self):
        print("动物会吃")

class Dog(Animal):
    def eat(self):
        print("狗会吃骨头")

class Cat(Animal):
    def eat(self):
        print("猫会吃鱼")

class Person():
    def eat(self):
        print("人吃五谷杂粮")

def fun(obj):
    obj.eat()

fun(Cat())
fun(Dog())

print("_______________________________")
fun(Person())  #是否具有eat这个方法,不管继承
5、特殊方法
a=10
b=20
c=30

d=a.__add__(b)
print(d)

class Student(object):

    def __init__(self,name):
        self.name=name
    def __add__(self, other):  #对象的相加
        return self.name+other.name

    def __len__(self):
        return len(self.name)

stu1=Student("张三")
stu2=Student("李四")

#执行两个对象相加
s=stu1+stu2
print(s)

#输出对象的长度
print(len(s))

6、new()方法和__init__方法之间的部分关系
class Person(object):
    def __new__(cls, *args, **kwargs):
        print('__new__被调用执行了,cls的id为{0}'.format(id(cls)))
        obj=super().__new__(cls)
        print('创建对象的id为{0}'.format(id(obj)))

    def __init__(self,name,age):
        print('__init__被调用执行了,self的id为:{0}'.format(id(self)))
        self.name=name
        self.age=age

print('object这个类的对象的id为:{0}'.format(id(object)))
print('Person这个类的对象的id为:{0}'.format(id(Person)))

p1=Person('张三',20)
print('p1这个类的对象的id为:{0}'.format(id(p1)))
本节通过案例介绍了__new__()方法和__init__方法之间的部分关系,总结如下:
1.    __new__方法在__init__方法前执行,__new__方法执行后才返回实例对象,也就是说__new__方法执行前实例并未创建,构造方法中的参数self是__new__方法执行后传递过去的实例;
2.    __new__方法的参数是由Python自动传递的,其参数包括创建实例时的“类名”对应类、以及创建创建实例传入的所有参数。

7、特殊类
特殊类
class A:
    pass

class B:
    pass

class C(A,B):
    def __init__(self,name,age):
        self.name=name
        self.age=age

x=C("张三",10)

print(x.__dict__) #查看对象的属性字典

print(C.__dict__) #类对象所属的字段

print(x.__class__)  #输出对象所属的类

print(C.__bases__)  #C类父类型的元素

print(C.__base__)  #C类父类型的元素

print(C.__mro__)  #查看类的继承结构
七、python时间格式化
ticks = time.time()
print ("当前时间戳为:", ticks)


localtime = time.localtime(time.time())
print ("本地时间为 :", localtime)

localtime = time.asctime( time.localtime(time.time()) )
print ("本地时间为 :", localtime)

# 格式化成2016-03-20 11:45:39形式
print(time.strftime("%Y-%m-%d %H:%M:%S", time.localtime()))

# 格式化成Sat Mar 28 22:24:24 2016形式
print(time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()))

# 将格式字符串转换为时间戳
a = "Sat Mar 28 22:24:24 2016"
print(time.mktime(time.strptime(a, "%a %b %d %H:%M:%S %Y")))




filepath=f'log_{time.strftime("%Y-%m-%d %H-%M-%S", time.localtime())}'

with open(filepath,"w+",encoding="utf-8")as f1:
    f1.write("123433")


print(datetime.datetime.now())
八、python文件的操作
file.read([size]) 从文件读取指定的字节数,如果未给定或为负则读取所有。
file.readline([size])  读取整行,包括 "n" 字符。
file.write(str)  将字符串写入文件,返回的是写入的字符长度。
file.writelines(sequence)  向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。
file.close()  关闭文件
with open("2022-03-06","r",encoding="utf-8")as f2:
    # 一旦会有异常,会自动关闭文件
    # print(f2.read())  #没有指定的话读取所以
    print(f2.readline())  #读取整行  12344333
九、execl的操作
import openpyxl


def createExecl():
    # 创建工作簿
    wk=openpyxl.Workbook()

    # 获取当前工作表
    sheet=wk.active

    # 写数据到单元格
    sheet.cell(1,1).value="username"  #第一行,第一列

    sheet.cell(1, 2).value = "age"  # 第一行,第二列

    sheet.cell(1, 3).value = "class"  # 第一行,第三列

    wk.save("userinfo.xlsx")

# 读取execl表格
def readexlcl():
    # 获取工作簿
    wk=openpyxl.load_workbook("userinfo.xlsx")

    # 获取工作表方式1
    # sheet1=wk.get_sheet_by_name("Sheet")
    # 获取工作表方式2
    sheet2=wk["Sheet"]

    # 获取单元格的坐标
    print(sheet2.cell(1,1))

    # 获取单元格的值
    print(sheet2.cell(1,1).value)

    # 获取工作簿的行数及列数
    rows=sheet2.max_row
    cols=sheet2.max_column

    print(f"行数:{rows},列数:{cols}")


    # 读取工作簿中所有数据
    datas=[]
    for row in range(1,rows+1):
        for col in range(1,cols+1):
            value=sheet2.cell(row,col).value
            datas.append(value)
    print(datas)

# 编辑execl文件
def  editexecl(filepath):
    # 加载工作簿
    wk = openpyxl.load_workbook(filepath)

    # 创建工作铺
    mysheet=wk.create_sheet("mysheet1")
    mysheet.cell(1,1).value="123"
    wk.save(filepath)


if __name__ == '__main__':
    # createExecl()
    # readexlcl()
    editexecl("userinfo.xlsx")
execl的读操作练习
import openpyxl
from openpyxl.utils import get_column_letter, column_index_from_string

wb=openpyxl.load_workbook("userinfo.xlsx")

# 输出所有表单
print(wb.sheetnames)

# 遍历表单
for sheet in wb:
    print(sheet.title)

#创建表单
mysheet =wb.create_sheet("mysheet")
print(wb.sheetnames)

# 操作第三章表单
sheet3=wb.get_sheet_by_name("测绘师")
sheet33=wb["测绘师"]

# 获取当前活动的表单
ws=wb.active

print(ws)  #输出的是一个表单对象
print(ws['A1'])  #输出的是一个单元格的对象

print(ws['A1'].value)

c=ws['A1']
print('第row {} 的第 colume {} is {}'.format(c.row,c.column,c.value))
print('cell {} is {}'.format(c.coordinate,c.value))

print(ws.cell(row=1,column=1).value)
for i in range(1,ws.max_row+1):
    print(ws.cell(row=i,column=1).value)


colB=ws['B']
ROW6=ws[2]
col_range=ws['B:C']
row_range=ws[1:2]
# print(col_range.value)

print("=================================")
for col in col_range:
    for cell in col:  #遍历B C列里面的单元格
        print(cell.value)
print("=================================")

for row in ws.iter_rows(min_row=1,max_row=2,max_col=2):  #获取第一行到第二行,第2列的数据
    for cell in row:
        print(cell.value)
print("=================================")
print(tuple(ws.rows))

print("=================================")

cell_range=ws['A1:C3']
for rowofcellobjcet in cell_range:
    for cellobj in rowofcellobjcet:
        print(cellobj.coordinate,cellobj.value)
    print('---------------------end of row-----------------------')

print("{}行{}列".format(ws.max_row,ws.max_column))


#数字转换成字母
print(get_column_letter(2),get_column_letter(47),get_column_letter(900))

#字母转换成数字  A代表1 B代表2
print(column_index_from_string('A'),column_index_from_string('B'))
execl的写操作练习
import  openpyxl
from openpyxl.utils import get_column_letter


wb=openpyxl.Workbook()
sheet=wb.active

print(sheet.title)
sheet.title='shee_name01'

wb.create_sheet(index=0,title='first sheet')
wb.create_sheet(index=1,title='two sheet')
print(wb.get_sheet_names())

wb.remove_sheet(wb.get_sheet_by_name('shee_name01'))
print(wb.get_sheet_names())
# wb.save("ceshi.xlsx")
wb.save('temp.xlsx')

wb1=openpyxl.Workbook()
sheet=wb1.active

sheet['A1']='hello word'
print(sheet['A1'].value)
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1008141.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号