Python语法学习-4
第九章 模块
9.1 模块的导入与使用
# 导入模块的第一种方式
# import my_module
# result = my_module.add(3,4)
# print(result)
# print(my_module.author)# 导入模块的第二种方式
# from my_module import add,author
# result = add(3,4)
# print(result)
# print(author)# 导入模块的第三种方式
# from my_module import *
# result = add(3,4)
# print(result)
# print(author)
# print(total(1, 2, 3))# 导入模块的第四种方式
from my_module import add as f
result = f(3,4)
print(result)
author = 'mia'
def add(a,b):return a+b# 列表a每个元素的平方和
def total(*args):result = 0for i in args:result =result + i**2return result
9.2 包的使用
# 导入包的第一种写法
from my_package import my_math,my_card
result = my_math.total(1,2,3)
print(result)
my_card.menu()# 导入包的第二种写法
# from my_package import *
author = 'mia'
def add(a,b):return a+b# 列表a每个元素的平方和
def total(*args):result = 0for i in args:result =result + i**2return result
cards = [{'name': 'mia', 'phone': '213', 'qq': '3546', 'email': '123'},
{'name': 'jack', 'phone': '124235', 'qq': '23423434', 'email': '3465'},{'name': 'tom', 'phone': '234', 'qq': '234', 'email': '09877'}]
def menu():print('*'*30)print('''欢迎使用【名片管理系统】1.新建名片2.显示全部3.查询名片0.退出系统''')
def new_card(name,phone,qq,email):user = {'name':name,'phone':phone,'qq':qq,'email':email}cards.append(user)return Truedef modify_card(result):del_card(result)name = input('请输入你的姓名')phone = input('请输入你的电话:')qq = input('请输入你的qq号:')email = input('请输入你的电子邮箱:')new_card(name, phone, qq, email)def del_card(card):cards.remove(card)def show_card():for card in cards:print(card)def query_card(kw):for card in cards:for k,v in card.items():if kw==v:return cardreturn Falsedef quit():print('欢迎下次使用【名片管理系统】')menu()def main():while True:op = input('请输入你要操作的序号:')if op == '1':name = input('请输入你的姓名')phone = input('请输入你的电话:')qq = input('请输入你的qq号:')email = input('请输入你的电子邮箱:')result = new_card(name, phone, qq, email)if result:print('成功新建名片')else:print('请重试')elif op == '2':show_card()elif op == '3':kw = input('请输入查询的关键字:')result = query_card(kw)if result:print(result)op2 = input('输入4修改名片,输入5删除名片:')if op2 == '4':modify_card(result)if op2 == '5':del_card(result)else:print('没有查到相关信息')elif op == '0':quit()breakelse:print('请重试')
9.3 常见的标准库
random
import random
# 随机数
print(random.random())
print(random.randint(1, 100))# 获取列表中的随机元素
list1 = [1, 2, 3, 4]
print(list1[random.randint(1, len(list1) - 1)])# 生成一个随机字母组成的列表
a = []
n = 5
for i in range(20):s = ''for j in range(n):t = random.randint(65,90)s += chr(t)a.append(s)
print(a)from my_package import my_toolsprint(my_tools.random_string(5))# 序列元素随机排列
random.shuffle(list1)
print(list1)
import randomdef random_char(upper=True):t = random.randint(ord('A'), ord('Z'))if not upper:t=random.randint(ord('a'), ord('z'))return chr(t)def random_string(length):s = ''for i in range(length):s += random_char(random.choice([True,False]))return s
随机游戏
import random# 石头剪刀布
def game1():player_score,computer_score=0,0for i in range(3):player = input('请输入石头剪刀布:')computer = random.choice(['石头','剪刀','布'])print('电脑出的是',computer)if player == computer:player_score+=1computer_score+=1elif ((player=='石头' and computer=='剪刀') or(player == '剪刀' and computer == '布') or(player=='布' and computer=='石头')):player_score+=1else:computer_score+=1print('玩家得分%d 电脑得分%d' % (player_score, computer_score))if player_score==computer_score:print('平局')elif player_score>computer_score:print('玩家胜利')else:print('电脑胜利')def guess_number(start,end):number = random.randint(start,end)while True:player = int(input('请输入你猜的数字:'))if player == number:print('猜中了!')breakelif player > number:print('猜大了')else:print('猜小了')
math
re
import re# \d :数字
# 检测字符串是否为纯数字的字符串
result = re.match(r'\d+','1234234234')
print(result)
# \w:数字字母下划线
result = re.match(r'\w+','a*8')
print(result)
# \s:空白字符 \S 非空
result= re.match(r'^\s+$',' ')
print(result)
# . 任意字符
result = re.match(r'^code\d-\d-.+$','code5-2-random')
print(result)
# []区间,可选列表
result = re.match(r'^abc{2,5}$','abcccccc')
print(result)
# | 或者
result = re.match(r'^a|b|c$','d')
print(result)# 身份证号
result = re.match(r'^\d{6}((20[012][01234])|(1[89]\d\d))\d{7}([\dX])$','12345619951234567X')
print(result)result = re.match(r'^20[012][01234]$','2008')
print(result)result = re.match(r'^1[89]\d\d$','1998')
print(result)# 手机号码
result =re.match(r'^1\d{10}$','12345678391')
print(result)
time
import time
t = time.time() # 时间戳:1970
print(t)
t = time.localtime() # 结构化时间
print(t)
print(t.tm_year, type(t.tm_year))
s = time.strftime('%Y-%m-%d %H:%M:%S',t)
print(s)
turtle
socket
server
import socket
# 创建socket对象
sk = socket.socket()
# 绑定ip和端口号
sk.bind(("0.0.0.0",8995))
# 设置监听
sk.listen(5)
# 等待客户端连接
conn,addr = sk.accept()print(conn)
print(addr)while True:accept_data = conn.recv(1024)print('收到客户端发送的消息',accept_data.decode('utf8'))send_data='收到!'conn.send(send_data.encode('utf8'))
client
import socket# 创建socket对象
sk = socket.socket()
# 连接服务器
sk.connect(("127.0.0.1",8995))while True:send_data = input('请输入你要发送的内容:')# 发送数据到服务器sk.send(send_data.encode('utf8'))# 等待服务器的响应accept_data = sk.recv(1024)# 打印服务器的相应print('接收到服务器的响应:',accept_data.decode('utf8'))
9.4 第三方库
第十章 文件及IO操作
10.1 文件的基本概念
10.2 文件读取
文件读取
import os
# 打开文件
# f = open('test.txt') # 相对路径
path = os.getcwd()
filename = path + '/test.txt'
f = open(filename,mode='r',encoding='utf-8') # 绝对路径
# 读取文件
contxt = f.read(5)
print(contxt)
contxt = f.readline()
print(contxt)
contxt = f.readlines()
print(contxt)
f.close()
写入文件
# 打开文件
f = open('test2.txt',mode='w',encoding='utf-8')
# 写入文件内容
f.write('你好,我是mia\n')
f.write('你是谁\n')
context = ['你好,我是mia','你是谁']
for i in context:f.write(i+'\n')
# 关闭文件
f.close()f = open('test2.txt',mode='r', encoding='utf-8') # 相对路径
context = f.read()
print(context)
f.close()
文件追加
# 打开文件
f = open('test3.txt',mode='a',encoding='utf-8')
# 写入文件
f.write('hello\n')
a=['a','vb\n','c\n']
f.writelines(a)
# 关闭文件
f.close()
日记本
def write_txt():date= input('请输入今天的日期:')text = input('请输入日记内容:')filename = '日记本.txt'f = open(filename,mode='a',encoding='utf-8')f.write('pyrjb\n')f.write(date+'\n')f.write(text+'\n')f.close()return True
def read_txt(day='-1'):filename = '日记本.txt'f = open(filename,mode='a',encoding='utf-8')context = f.read()f.close()if day!='-1':lista = context.split('pyrjb\n')for i in lista:if i[:10] == day:print(i)return Truereturn Falseelse:context = context.replace('pyrjb\n','')print(context)def menu():print('*'*30)print('''欢迎使用python日记本系统1:记日记2:阅读日记3:退出系统''')print('*'*30)def quit():print('欢迎下次使用!再见!')menu()
while True:op = input('请输入你的选择:')if op == '1':if write_txt():print('日记保存成功!')elif op == '2':day = input('请输入你查询的日期(查询全部请输入-1):')if read_txt(day):print('日记已加载完毕!')else:print('未查询到日记信息,请重试!')elif op == '3':quit()breakelse:print('请重新选择')
with
with open('test.txt',mode='r',encoding='utf-8') as f:context = f.read()print(context)
print('hello')
csv
import csv,random
from my_package import my_tools
lista = []
def random_info(n=100):subjects = ['python','java','C++','html']names = []for i in range(n//len(subjects)):name = my_tools.random_string(random.randint(3, 6))names.append(name)for i in range(n):subject = random.choice(subjects)score = random.randint(50,100)name = random.choice(names)for j in lista:if j[0]==name and j[1]==subject:breakelse:lista.append([name,subject,score])def average():with open('data.csv',mode='r',encoding='utf-8') as f:cf = csv.reader(f)head = next(cf) #获取表头scores = []for i in cf:scores.append(int(i[2]))return sum(scores)/len(scores)def make_datas():with open('data.csv',mode='a',encoding='utf-8') as f:cf = csv.writer(f)random_info()cf.writerows(lista)make_datas()
# result = average()
# print('大家的平均分是',round(result,2))