想問若輸入為n(可決定要輸入多少)
這邊也分享一下其他解決方法
總體來說就是
n為總輸入總數(假設為3)
a 1 b b (假設輸入a 而其合成值會是1+b+b=5)
b 2 (假設b為2=2)
c 2 b (假設c為b+2=4)
output:
5
2
4
n=int(input())
s=[input().split() for _ in range(n)]
d={}
c=0
while len(d)<n:
i=c%n
try:
sm=sum([int(e) for e in s[i][1:]])
d[s[i][0]]=sm
except:
for k in d:
if k in s[i]:
x=s[i].index(k)
s[i][x]=str(d[k])
c+=1
你這個……
是類似多元一次聯立方程式的概念?
( 因為你說明的不清不楚, 你的欄位標題我也看不懂, 所以我用猜的~ )
A=1+B+D # A==16
B=2+E # B==11
C=3 # C==3
D=4 # D==4
E=5+D # E==9
表格化…… 像這樣?:
( 還是上面聯立方程式的寫法我才看得懂, 這表格好像還是讓人看不明瞭…… )
變數名 | = | 加數(值) | 加數(名) | 加數(名) | # | 變數解答 |
---|---|---|---|---|---|---|
A | = | 1 | B | D | # | A==16 |
B | = | 2 | E | # | B==11 | |
C | = | 3 | # | C==3 | ||
D | = | 4 | # | D==4 | ||
E | = | 5 | D | # | E==9 |
瞎扯就到這裡吧~ 以下給你個參考:
product={}
之後的我就不管了~## Tested @[Python 3.10.9];
def myMain():
""" myMain#1 """
## n: 輸入項目數量;
n = int(input('n(int): '))
## s: 輸入「項目名稱」([0])與「項目內容」([1:]);
s = [input(f'[{_}](str): ').split() for _ in range(n)]
"""
## 遍歷 s 內各 list 的元素:
## - 若元素字串符合浮點數格式, 將該元素轉為浮點數;
## - 若元素字串不符合浮點數格式, 將該元素紀錄於使用到的變數名稱之集合(mySetVN);
"""
mySetVN = set()
for i in s:
for idx, ele in enumerate(i):
if ele.replace('.','',1).isdigit():
i[idx] = float(ele)
else:
mySetVN |= set((i[idx],))
## 整理排序後的變數名稱集合給 myListVN;
myListVN = sorted(mySetVN)
""" ## 建立給 NumPy 處理的聯立方程式(方程組)之資料; """
import numpy as np
## myEqsAryA: list for 方程組A;
myEqsAryA = list()
for i in s:
## aEqAry: list for 單個方程式;
aEqAry = [0] *len(myListVN)
for idx, ele in enumerate(myListVN):
"""
## 把例如 `A=1+B` 的型式整理成 `A-B=1` 型式。
"""
if ele in i:
if i.index(ele): ## i.index(ele) != 0:
aEqAry[idx] = -1
else: ## i.index(ele) == 0:
aEqAry[idx] = 1
myEqsAryA.append(aEqAry)
## 把 myEqsAryA 轉成給 NumPy 用的係數矩陣;
myEqsNPAryA = np.array(myEqsAryA)
## 把 s 內各 list 的第二個元素 ([1]) 轉成給 NumPy 用的常數矩陣;
myEqsNPAryB = np.array([i[1] for i in s])
## 用 NumPy 的 linalg.solve() 求解;
myEqsNPAryX = np.linalg.solve(myEqsNPAryA, myEqsNPAryB)
## 將相對應的變數名稱與數值轉成 dict;
myResult = dict(zip(myListVN, myEqsNPAryX))
##
print('Result: ')
print(myResult)
return
##
if __name__ == '__main__' :
myMain()
##
另,我這邊的結果:
n(int): 5
[0](str): A 1 B D
[1](str): B 2 E
[2](str): C 3
[3](str): D 4
[4](str): E 5 D
Result:
{'A': 16.0, 'B': 11.0, 'C': 3.0, 'D': 4.0, 'E': 9.0}
你的範例輸入應該是打錯了,沒給值怎樣計算。
n = 4
data = [{"A":1, "B":24, "C":0,"D":0}, {"B":2, "C": 11, "D":0}, {"C":3, "D": 4}, {"D": 4}]
for i in range(n):
temp = 0
for item in data[i]:
temp += data[i][item]
print(temp)