2016-01-23 21 views
-1

我的代碼看起來有點類似於此:Python的 - 還根據用戶輸入指定不同的姓名變量

import os, sys 

ABC = '' 
XYZ = '' 
FOO = '' 
BAR = '' 
ITEM = '' 
CLEAN = '' 
values = ['ABC', 'XYZ', 'FOO', 'BAR', 'ITEM', 'CLEAN'] 

# some code here 

c = raw_input('> ') 
if ' ' in c: 
    c = c.lower() 
    c = c.split() 
    if c[0] == 'set': 
     if c[1] in values: 
      exec("%s = '%s'" % (c[1], c[2])) 
     else: 
      # error... 

# the code continues 

正如你或許可以告訴,我想賦值給一個變量,但根據用戶輸入決定該變量,而不是通過名稱來引用它。

基本上,我想是到c[2]串在一開始分配給任何變量,這取決於哪一個在c[1]用戶挑選,並在這樣做,指的是由相同的別名這些變量(或東西類似)。

# Desired input 
> set FOO yes 
> print FOO 

# Desired output 
yes 

# Desired input 2 
> set ITEM dark 
> print ITEM 

# Desired output 2 
> dark 

我只是不能拿出任何東西。

============================================== =============================

編輯:我編輯代碼,看看是否會有所幫助,它didn 「T。無論我用set鍵入什麼,它都卡在其他條件中。

編輯2:這是解決我的問題:

1)values列表轉換爲所有的字符串 2)添加.upper()c[1]

感謝利奧波德爲察覺什麼是錯的。

+0

你如果條件'如果C [1] == str(val)'將永遠不會成功,因爲列表中的所有元素都是空的 – mchackam

+0

是的,'values'只是一個空字符串列表。變量的實際名稱不適用於您。 –

+0

我可以看到你正在嘗試做「變量變量」,這對於有經驗的Python程序員來說很少是正確的行爲方式,對於沒有經驗的人來說,從來就不是正確的行爲方式。這是hacky,緩慢和脆弱,並且完全不需要99.9%的時間(至少)。 – TigerhawkT3

回答

0

你有三個不同的錯誤。

  1. values是變量值的列表,而不是它們的名稱。所以他們都等於''。你想要的變量名的列表,像這樣:

    values = ["ABC", "XYZ", "FOO", "BAR", "ITEM", "CLEAN"] 
    
  2. 變量的名稱是大寫的,但你轉換命令字符串爲小寫。如果您輸入set ITEM dark,它將轉換爲['set', 'item', 'dark'],並且從'item' != 'ITEM'開始,它將找不到要設置的行進值。您應該跳過此行

    c = c.lower() 
    

    ,反而只會使命令名不區分大小寫

    if c[0].lower() == 'set': 
    
  3. val + " = %s" % c[2]結果ITEM = dark,所以它會嘗試變量ITEM的值設置爲值變量dark,但這個變量不存在。你想把它設置爲字符串"dark",所以你需要引號:val + " = '%s'" % c[2]

最後:這是做一個奇怪的東西,你爲什麼這樣做呢?對於大多數使用情況下,我能想到的,你會得到更好的字典服務,例如:

userSetVariables = dict((k,'') for k in ["ABC", "XYZ", "FOO", "BAR", "ITEM", "CLEAN"]) 

c = raw_input('> ') 
if ' ' in c: 
    c = c.split() 
    if c[0].lower() == 'set' and userSetVariables.has_key(c[1]): 
     userSetVariables[c[1]] = c[2] 

這導致:

> set ITEM dark 
>>> print userSetVariables["ITEM"] 
dark 
相關問題