2017-04-19 40 views
1

我有老腳本蟒蛇,其中
變化條件下,使用循環和數組在Python

if __name__ == '__main__': <br> 

我們調用函數的參數。如果它的參數等於一些字符串,我們應該調用函數。 舊代碼。

if sys.argv[1] == 'add': 
    sys.exit(add(db, usr)) 
if sys.argv[1] == 'rem': 
    sys.exit(rem(db, usr)) 
if sys.argv[1] == 'rmusr': 
    sys.exit(rmusr(db, usr)) 

第一次,我想到了「switch case」,但我怎麼知道,python沒有它。我試圖循環和數組。 我可以使用它嗎?對不起,我開始學習Python,2小時前。但這很有趣,我希望你能幫助我。

actions = ['add','rem','rmusr'] 
    for a in actions: 
    if sys.argv[1] == 'a': 
     sys.exit(a(db, usr)) 

它正確嗎?我怎麼知道,我們不應該用「$」來調用變量。請幫忙。

+0

線'如果sys.argv中[1] == 'A':'用戶輸入到字符比較'A'。我不認爲這是你想要的。嘗試刪除單引號,以便將'argv [1]'與變量'a'的值進行比較,而不是字符''a''。 – FCo

回答

0

您可以添加功能到字典中,然後使用用戶輸入的字符串來檢索功能:

actions = { 
    'add': add, 
    'rem': rem, 
    'rmusr': rmusr, 
} 

action = sys.argv[1] 

if action in actions: 
    sys.exit(actions[action](db, usr)) 
+0

但我的方式呢?它不應該工作?如果我想使用循環? – Piduna

+0

您的示例將函數變量('a')與相似的字符串(''a'')混合在一起:它們不一樣。不需要添加循環,因爲在我的示例中的'in'運算符會執行所有需要的檢查。 – brianpck

1

使用字典:

actions = {'add': add, 'rem': rem, 'rmusr': rmusr} 

try: 
    sys.exit(actions[sys.argv[1]](db, usr)) 
except KeyError: 
    pass 
    # or whatever you need to do for an invalid action 
0

你的代碼可能是正確的,但有是一個錯字。

actions = ['add','rem','rmusr'] 
for a in actions: 
    if sys.argv[1] == 'a': 
     sys.exit(a(db, usr)) 

我認爲這是更好使用:

actions = ['add','rem','rmusr'] 
if sys.argv[1] in actions: 
    sys.exit(sys.argv[1](db, usr))