第十二周作业-网络编程、数据库
利用本周学习的知识实现如下效果的程序:
- server端监听指定的tcp端口
- server端预先实现简单加减法的代码(可以自行扩展其他更复杂功能)
- client端可以通过socket连接与server端通信传输需要参数
- server端根据传的参数计算结果并返回
- client端打印返回结果
import socketserver
import threading
import logging
import cal
import re
FORMAT = "%(asctime)s %(threadName)s %(thread)d %(message)s"
logging.basicConfig(format=FORMAT, level=logging.INFO)
class Handler(socketserver.BaseRequestHandler):
def setup(self) -> None:
super().setup()
def handle(self):
self.request.send(b'please input a string like "1+1":')
while True:
try:
data = self.request.recv(1024)
except Exception as e:
logging.info(e)
data = b''
if data == b'' or data == b'quit':
break
s = "".join(data.decode().split())
result = None
try:
operator = re.search('[\*]|[/]|[\+]|[-]', s)[0]
if operator == '*':
result = cal.mul(s)
if operator == '/':
result = cal.div(s)
if operator == '+':
result = cal.add(s)
if operator == '-':
result = cal.sub(s)
res = '{}={}\r\n'.format(s, result).encode()
except Exception as e:
logging.info(e)
res = ''.format(e).encode()
self.request.send(res)
def finish(self) -> None:
super().finish()
if __name__ == '__main__':
addr = ('127.0.0.1', 9999)
server = socketserver.ThreadingTCPServer(addr, Handler)
threading.Thread(target=server.serve_forever, name='serve', daemon=True).start()
while True:
cmd = input('>>>')
if cmd == 'quit':
server.server_close()
break
cal模块:
import re
def add(string):
reg = re.compile(r'(?P<a>\d+)[+](?P<b>\d+)')
a = reg.search(string).group('a')
b = reg.search(string).group('b')
answer = int(a) + int(b)
return str(answer)
def sub(string):
reg = re.compile(r'(?P<a>\d+)[-](?P<b>\d+)')
a = reg.search(string).group('a')
b = reg.search(string).group('b')
answer = int(a) - int(b)
return str(answer)
def mul(string):
reg = re.compile(r'(?P<a>\d+)[*](?P<b>\d+)')
a = reg.search(string).group('a')
b = reg.search(string).group('b')
answer = int(a) * int(b)
return str(answer)
def div(string):
reg = re.compile(r'(?P<a>\d+)[/](?P<b>\d+)')
a = reg.search(string).group('a')
b = reg.search(string).group('b')
answer = int(a) / int(b)
return str(answer)
写出以下操作的sql语句:
- 创建一个叫users的表包含username、age、sex字段
CREATE TABLE `users` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(128) NOT NULL,
`age` char(3) DEFAULT NULL,
`sex` char(2) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
- 查询username为“张三”的一条纪录
SELECT * FROM users WHERE username = '张三'
- 查询age大于18且sex为“女“的所有纪录
SELECT * FROM users WHERE age > 18 and sex = '女'

浙公网安备 33010602011771号