项目背景:
腾讯云服务器 CVM(Cloud Virtual Machine)是腾讯云提供的可扩展的计算服务。
使用 CVM 避免了使用传统服务器时需要预估资源用量及前期投入,帮助您在短时间内快速启动任意数量的云服务器并即时部署应用程序。腾讯云 CVM 支持用户自定义一切资源:CPU、内存、硬盘、网络、安全等等,并可以在需求发生变化时轻松地调整它们。
需求:
******************************************
***************云主机管理系统 ****************
******************************************
1). 添加云主机
2). 删除云主机
3). 修改云主机
4). 查看云主机
0). 退出系统
******************************************
云主机的属性信息:
id: 递增,主机id
IPv4: 主机IP
disk: 主机硬盘大小
memory: 主机内存大小
name: 主机别名
初版
from collections import namedtuple
prompt = """
******************************************
***************云主机管理系统 ****************
******************************************
1). 添加云主机
2). 删除云主机
3). 修改云主机
4). 查看云主机
0). 退出系统
******************************************
请输入您的选择:
"""
id = 0
host_db = []
Host= namedtuple('Host_Info','id IPv4 disk memory name')
while True:
choice = input(prompt)
if choice == '1':
print('添加云主机'.center(40,'*'))
id += 1
IPv4 = input('主机IP(eg.172.25.254.1)>>')
disk = input('主机硬盘大小(eg.500G)>>')
memory = input('主机内存大小(eg.4G)>>')
name = input('主机别名(eg.Web服务器)>>')
host = Host(id=id,IPv4=IPv4,disk=disk,memory=memory,name=name)
host_db.append(host)
print('云主机添加成功'.center(40,'#'))
elif choice == '2':
print('删除云主机'.center(40, '#'))
delete_id = int(input('请输入您要删除云主机的id(eg.1)>>'))
for host in host_db:
if delete_id == host.id:
host_db.remove(host)
print('删除云主机成功'.center(40,'#'))
break
else:
print('您要删除的id号不存在,请重新输入>>')
elif choice == '3':
pass
elif choice == '4':
print('查看云主机'.center(40, '#'))
for host in host_db:
print(host)
elif choice == '0':
print('您正在退出系统'.center(40,'#'))
exit(0)
else:
print('请输入正确的选项!')
测试如下:
1.添加一条‘web服务器’云主机信息
2.查看云主机信息
可以看到,显示出来的信息对用户并不友好。这里我们介绍一个prettytable模块。prettytable 是python中的一个第三方库,可用来生成美观的ASCII格式的表格,十分实用。首先是pip install安装这个第三方库,在使用时,直接import导入。
prettytable模块引入
#假如host_db中存储两条云主机信息
host_db = [
['1','172.25.254.1','500G','4G','数据库服务器'],
['2','172.25.254.2','500G','8G','Web服务器']
]
#实例化host_table对象(创建表,并用field_names指定表头信息)
host_table =PrettyTable(field_names=['id','IPv4','disk','memory','name'])
for host in host_db:
#按行添加数据
host_table.add_row(host)
print(host_table)
可以看到最后的显示非常简洁有序。
最终版
from collections import namedtuple
from prettytable import PrettyTable
# 云主机管理系统菜单栏提示
prompt = """
******************************************
***************云主机管理系统 ****************
******************************************
1). 添加云主机
2). 删除云主机
3). 修改云主机
4). 查看云主机
0). 退出系统
******************************************
请输入您的选择:
"""
# 1). 选择哪种数据类型存储云主机信息? 选择列表
hosts_db = [] # 存储所有主机信息的数据库列表
id = 0 # 云主机的id号, 是依次递增的
# 通过命名元组定义主机需要存储的信息
Host= namedtuple('Host_Info','id IPv4 disk memory name')
# 2). 死循环,接收用户选择
while True:
choice = input(prompt)
# 如果用户选择为1, 则添加云主机
if choice == '1':
print('添加云主机'.center(40,'*'))
id += 1 #id递增
IPv4 = input('主机IP(eg.172.25.254.1)>>')
disk = input('主机硬盘大小(eg.500G)>>')
memory = input('主机内存大小(eg.4G)>>')
name = input('主机别名(eg.Web服务器)>>')
# 将主机信息实例化为host对象
host = Host(id=id,IPv4=IPv4,disk=disk,memory=memory,name=name)
#添加到主机信息的数据库列表中
host_db.append(host)
print('云主机添加成功'.center(40,'#'))
elif choice == '2':
print('删除云主机'.center(40, '#'))
#注意要将delete_id接收到的字符串转换为int类型,否则if delete_id == host.id这条语句永远不成立。
delete_id = int(input('请输入您要删除云主机的id(eg.1)>>'))
for host in host_db:
if delete_id == host.id:
host_db.remove(host)
print('删除云主机成功'.center(40,'#'))
break
else:
print('您要删除的id号不存在,请重新输入>>')
# 如果我们的目标是定义一个高效的数据结构,而且将来会修改各种实例属性,那么使用 namedtuple 并不是最佳选择
# 修改云主机暂时不处理
elif choice == '3':
pass
elif choice == '4':
print('查看云主机'.center(40, '#'))
# 创建表并指定表头信息和格式
host_table = PrettyTable(field_names=['id', 'IPv4', 'disk', 'memory', 'name'])
# 遍历主机信息
for host in host_db:
# 按行添加数据
host_table.add_row(host)
# 打印表格
print(host_table)
elif choice == '0':
print('您正在退出系统'.center(40,'#'))
exit(0)
else:
print('请输入正确的选项!')
测试如下:
1.添加一个‘web服务器’云主机
2.添加一个‘数据库服务器’云主机
3.查看云主机信息
4.删除id为2的云主机信息
5.查看云主机信息