题目:四项工作分别为宣传、收集、撰写、录制。甲乙丙丁4人各做一项。已知:
乙不宣传也不撰写。甲不宣传也不录制。丁不撰写也不录制。丙不录制也不宣传。如果甲不撰写那么丁不宣传。问谁负责收集工作。
请把上述问题写成python。
题目:四项工作分别为宣传、收集、撰写、录制。甲乙丙丁4人各做一项。已知:
乙不宣传也不撰写。甲不宣传也不录制。丁不撰写也不录制。丙不录制也不宣传。如果甲不撰写那么丁不宣传。问谁负责收集工作。
请把上述问题写成python。
这个思路有些笨,不过貌似可以计算。不知道还有没有没考虑到的情况,思路就是生成一个4*4的数组,用-1表示不做,1表示做,0是初始值。通过计算每行每列的值考虑各种情况。
import numpy as np
import pandas as pd
work=['宣传','收集','撰写','录制']
person=['甲','乙','丙','丁']
arr = np.zeros((4,4))
data=pd.DataFrame(arr,columns=work,index=person)
conditions_is_True=False
#已知条件初始化
def init():
data.loc['甲','宣传']=-1
data.loc['甲','录制']=-1
data.loc['乙','宣传']=-1
data.loc['乙','撰写']=-1
data.loc['丙','录制']=-1
data.loc['丙','宣传']=-1
data.loc['丁','撰写']=-1
data.loc['丁','录制']=-1
#计算每行每列,判断各种情况
def col_row():
for i in work:
count=0
isOne=False
for j in person:
#如果不做,计数几次
if data.loc[j,i]==-1:
count+=1
#记下为0的位置
elif data.loc[j,i]==0:
temp0=j
#记下确定做的工作
elif data.loc[j,i]==1:
isOne=True
if count==3:
data.loc[temp0,i]=1
elif count==2 and isOne:
data.loc[temp0,i]=-1
elif count==4:
print('条件不成立')
conditions_is_True=True
return
for i in person:
count=0
isOne=False
for j in work:
if data.loc[i,j]==-1:
count+=1
elif data.loc[i,j]==0:
temp0=j
elif data.loc[i,j]==1:
isOne=True
if count==3:
data.loc[i,temp0]=1
elif count==2 and isOne:
data.loc[i,temp0]=-1
elif count==4:
print('条件不成立')
conditions_is_True=True
return
init()
#假设条件成立
data.loc['甲','撰写']=-1
data.loc['丁','宣传']=-1
col_row()
#条件不成立,计算另外一种情况
if not conditions_is_True:
arr = np.zeros((4,4))
data=pd.DataFrame(arr,columns=work,index=person)
init()
data.loc['甲','撰写']=1
col_row()
for i in work:
print(f"负责{i}的是",data[data[i]==1].index[0])