Python3实现银行家算法、安全性算法

Python3实现银行家算法、安全性算法

学习期间写的,希望大家一起进步。
Available = []  #各可用资源数目
Used ={} 		#某进程目前占有各资源数
Need = {}		#某进程目前需求资源数
zhan = []   	#临时存储列表
order = []		#进程安全顺序列表
pandaun = []
def compare(a = [],b = []):
	for x in range(0,item):	#进行列表对应元素的比较
		if (int(a[x]) < int(b[x])): #一旦出现供不应求的情况即返回False
			return False
			break			#且跳出循环
	return True				#如果符合条件即返回True
def AddUsed(a = [],b = []):	#可用资源某进程当前占用资源对应位置相加
	for x in range(0,item):	
		a[x] = int(a[x]) + int(b[x])
item = int(input("请输入资源种类数: "))
SP = int(input("请输入进程数: "))
jinchengshu = SP			#设置临时变量表示进程数量,在后面的判断中用
#输入各类资源的可用数目并存储到列表Available中
for x in range(1,item+1):
	Available.append(input("请输入第"+str(x)+"种资源的可用数目: "))
#输入各进程名称,占有资源数及所需,键值对存储
for x in range(1,SP+1):
	name = input("请输入第"+str(x)+"个进程名称: ")
	print("该进程占有的"+str(item)+"类资源数为:")
	for y in range(1,item+1):
		zhan.append(int(input()))
	Used[name] = zhan
	zhan = []	#清空临时列表
	print("该进程需要的"+str(item)+"类资源数为:")	
	for z in range(1,item+1):
		zhan.append(int(input()))
	Need[name] = zhan
	zhan = []	#清空临时列表
#安全性算法开始
while Need:						#如果进程表Need不为空
	for key in Need:			#获取Need中的key
		zhan = Need[key]		#将对应的value赋值给临时列表zhan
		if compare(Available,zhan):#调用比较函数比较列表中个元素与Avilable中个元素的大小并返回真值
			AddUsed(Available,Used[key]) #如果返回True则调用相加函数
			order.append(key)	#将key值放入order列表中以便显示
			a = key				#设置a令它等于key,删除字典元素时使用
			break
	if compare(Available,zhan):	#如果符合大小条件就删除对应的键值对
		del Need[a]
		jinchengshu -= 1
	if SP == jinchengshu:
		print("不存在安全序列!!!")
		break
if jinchengshu == 0:
	for x in range(0,len(order)):
		print(order[x]+'-->',end='')
	print("END!")




你可能感兴趣的:(Python)