2015-11-06 108 views
0

我有這個函數包含兩個列表。其中一個字符串內有一串字符串,但另一個字符串填充隨機數生成的整數。完成後,我有一個for語句,以我想要的格式輸出信息。但這就是問題所在,我可以在函數本身中格式化信息。但我需要到另一個函數傳遞數據並顯示它以同樣的方式格式化函數的返回值

def charAbility(): 
    pAbility = ['Str', 'Dex', 'Con', 'Int', 'Wis', 'Cha'] 
    pScore = [] 
    i = 0 
    while i < 6: 
     randomNumber = random.randint(7, 18) 
     pScore.append(randomNumber) 
     i = i + 1 
return pAbility, pScore 

爲了得到我想要的功能中印什麼,我有這樣的一段代碼:

for score, ability in zip(pAbility, pScore): 
    print str(score) + ":\t\t " + str(ability) 

是有一種方法可以將返回的值在另一個函數中以相同的方式打印出來?

+0

你想要什麼,你希望兩個列表爲返回值,而在另一個打印出來功能? –

+0

那麼返回格式化結果的函數有什麼問題? 'return(str(score)+「:\ t \ t」+ str(ability))' – Kasramvd

回答

0

我相信你只是在尋找這樣的:

param1, param2 = charAbility() 

說明

你的方法返回兩個值pAbility, pScore。如果你簡單地做到這一點:

param = charAbility() 

你仍然有機會獲得這兩個投資回報的,然而,它們返回爲tuple:發生了什麼

簡單的例子:

def charAbility(): 
    return 1, 2 
param = charAbility() 
print(param) 
(1, 2) 

所以,爲了處理返回到自己的變量,所以你可以將它傳遞給一個新的方法,你應該使用我上面提供的例子。再次重申:

param1, param2 = charAbility() 

現在你可以通過param1(將舉行pAbility)和param2(這會拿着pScore)你需要將它發送到任何其他方法:

some_other_method(param1, param2) 
0

我認爲你正在尋找這個: -

def charAbility(): 
    pAbility = ['Str', 'Dex', 'Con', 'Int', 'Wis', 'Cha'] 
    pScore = [] 
    i = 0 
    while i < 6: 
     randomNumber = random.randint(7, 18) 
     pScore.append(randomNumber) 
     i = i + 1 
    return pAbility, pScore 

def otherFunc(): 
    score, ability = charAbility() 

    for iscore, strability in zip(ability, pScore): 
     print str(iscore) + ":\t\t " + str(strability) 

otherFunc() # function in module scope 
+1

這不太對。你正在''otherFunc()'裏面混合'score,ability'和'pAbility' – beroe

0

你應該調用你現有的功能,並將兩個列表分配給兩個不同的VA riables,或者將它們一起作爲元組返回。那麼這將是最乾淨的使用字符串格式化打印結果:

scorelist, abilitylist = charAbility() 

for score,ability in zip(scorelist,abilitylist): 
    print "{}:\t\t{}".format(score,ability) 

或者,用一個變量:

combinedlists = charAbility() 

for pair in zip(*combinedlists): 
    print "%s:\t\t%s" % pair