2016-04-15 83 views
-1
def get_resources(*required): 
    """ 
    This is to help building functions in the main calculator faster 
    returns lists of resources needed, in the order requested 
    """ 
    print('-'*30) 
    a = ['acceleration', 0, 'a', 'm s⁻²', '.2f', 'scalar'] 
    A = ['amplitude', 0, 'A', 'm', '.2f', 'scalar'] # A: amplitude 
    Em = ['combined mass', 0, '∑m', 'kg', '.2f', 'scalar'] 
    f = ['frequency', 0, 'f', 'Hz', '.1f', 'scalar'] # f: frequency (also m s⁻¹) 
    F = ['force', 0, 'F', 'N', '.2f', 'scalar'] 
    g = ['gravity', 9.81, 'a', 'm s⁻²', '.2f', 'scalar'] 
    hl = ['wavelength', 0, 'λ', 'm', '.2f','vector'] # λ: wavelength 
    m = ['mass', 0, 'm', 'kg', '.2f', 'scalar'] 
    m1 = ['mass1', 0, 'm1', 'kg', '.2f', 'scalar'] 
    m2 = ['mass2', 0, 'm2', 'kg', '.2f', 'scalar'] 
    t = ['time', 0, 't', 's', '.2f', 'scalar'] 
    T = ['tension', 0, 'T', 'N', '.1f', 'scalar'] 
    T = ['period', 0, 'T', 's', '.3f', 'scalar'] # T: Time PERIOD of oscillation in seconds (T = 2π√(m/k)) 
    v = ['wave speed', 0, 'v', 'm s⁻¹', '.2f', 'scalar'] # v: speed of a wave (v = fλ OR v = λ/T) 
    v = ['velocity', 0, 'v', 'm s⁻¹', '.2f', 'scalar'] 
    v0 = ['initial velocity', 0, 'v₀', 'm s⁻¹', '.2f', 'vector'] 
    vf = ['final velocity', 0, 'vf', 'm s⁻¹', '.2f', 'vector'] 
    x = ['change in distance', 0, 'Δx', 'm', '.2f', 'scalar'] 
    x = ['distance', 0, 'x', 'm', '.2f', 'scalar'] 
    for i in required: 
     for j in vars().items(): 
      if i == j[0]: print('{} = {}'.format(j[0], j[1])) 

我試圖寫一個函數(即接受參數),然後比較這些反對在函數中的值,然後打印出所有可能的匹配。但是,它不會打印所有可能的匹配項,只會打印與名稱匹配的最終匹配項。此外,我想在列表[1]中使用字母字符,例如x = ['distance',0,'x','m','.2f','scalar']> x = ['distance '美國廣播公司, 'X', 'M',' .2f」, '標']python3返回所有變量列表

目前如果我做

get_resources('x','F', 'T') 

它將打印

------------------------------ 
x = ['distance', 0, 'x', 'm', '.2f', 'scalar'] 
F = ['force', 0, 'F', 'N', '.2f', 'scalar'] 
T = ['period', 0, 'T', 's', '.3f', 'scalar'] 

,但我想要這樣打印。

------------------------------ 
x = ['change in distance', xc, 'Δx', 'm', '.2f', 'scalar'] 
x = ['distance', xc, 'x', 'm', '.2f', 'scalar'] 
F = ['force', Fc, 'F', 'N', '.2f', 'scalar'] 
T = ['tension', Tc, 'T', 'N', '.1f', 'scalar'] 
T = ['period', Tc, 'T', 's', '.3f', 'scalar'] 

如何重寫此函數以根據需要返回結果?

+0

爲了要比較什麼? * actual *變量名稱,每個列表中的第三項或任何列表中的任何項目?如果我搜索'a',是否應該顯示「振幅」,甚至是什麼東西?如果我搜索'N',是否應該返回'緊張'和'強制'? – Evert

+0

我想比較所需的名稱,例如'T'與函數中所有項目的'T'= [list]。我沒有返回任何東西,只是打印結果。也許這是造成混亂。 – nsy16

+0

你還沒有說明你想匹配什麼:變量名稱本身,還是其他的東西? – Evert

回答

0

這解決了問題,不幸的是我不得不刪除評論...啊

def get_resources(*required): """ This is to help building functions in the main calculator faster returns lists of resources needed, in the order requested """ print('-'*30) longstring = \ "a = ['acceleration', ac, 'a', 'm s⁻²', '.2f', 'scalar'] | " \ "A = ['amplitude', 0, 'Ac', 'm', '.2f', 'scalar'] | " \ "Em = ['combined mass', Emc, '∑m', 'kg', '.2f', 'scalar'] | " \ "f = ['frequency', fc, 'f', 'Hz', '.1f', 'scalar'] | " \ "F = ['force', Fc, 'F', 'N', '.2f', 'scalar'] | " \ "g = ['gravity', 9.81, 'a', 'm s⁻²', '.2f', 'scalar'] | " \ "hl = ['wavelength', hlc, 'λ', 'm', '.2f', 'vector'] | " \ "KE = ['kinetic energy', KEc, 'KE', 'J', '.1f', 'scalar'] | " \ "m = ['mass', 0, 'mc', 'kg', '.2f', 'scalar'] | " \ "m1 = ['mass1', m1c, 'm1', 'kg', '.2f', 'scalar'] | " \ "m2 = ['mass2', m2c, 'm2', 'kg', '.2f', 'scalar'] | " \ "t = ['time', tc, 't', 's', '.2f', 'scalar'] | " \ "T = ['tension force', Tc, 'T', 'N', '.1f', 'scalar'] | " \ "T = ['period', Tc, 'T', 's', '.3f', 'scalar'] | " "v = ['wave speed', vc, 'v', 'm s⁻¹', '.2f', 'scalar'] | " \ "v = ['velocity', vc, 'v', 'm s⁻¹', '.2f', 'scalar'] | " \ "v0 = ['initial velocity', v0c, 'v₀', 'm s⁻¹', '.2f', 'vector'] | " \ "vf = ['final velocity', vfc, 'vf', 'm s⁻¹', '.2f', 'vector'] | " \ "W = ['work', Wc, 'W','J', '.2f', 'scalar'] # W: work (W = Fd) | " \ "x = ['change in distance', xc, 'Δx', 'm', '.2f', 'scalar'] | " \ "x = ['distance', xc, 'x', 'm', '.2f', 'scalar'] | " variables = (longstring.split('|')) for i in required: for j in variables: k = j.split('=') k[0] = k[0].strip() if i == k[0]: k[1] = k[1].strip() print('{} = {}'.format(k[0], k[1])) get_resources('m1', 'm2', 'T', 'a', 'g', 't', 'x', 'v0') get_resources('m','v','KE','x','F', 'T')