Python – 根据用户输入分配不同名称的变量

Python – assign variable under different name also depending on user input

我的代码看起来有点类似于:

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

我就是想不出任何东西。

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

编辑: 我编辑了代码以查看是否有帮助,但没有。无论我用 set.

键入什么,它都停留在 else 条件

编辑 2: 这就是解决我的问题的方法:

1) 将 values 列表转换为所有字符串 2) 添加 .upper()c[1]

感谢 Leopold 发现错误。

你有三个不同的错误。

  1. values 是变量值的列表,而不是它们的名称。所以它们都等于 ''。您需要一个变量名列表,如下所示:

    values = ["ABC", "XYZ", "FOO", "BAR", "ITEM", "CLEAN"]
    
  2. 变量名都是大写的,但是你把命令字符串转成了小写。如果输入 set ITEM dark,它会转换为 ['set', 'item', 'dark'],并且由于 'item' != 'ITEM',它不会找到要设置的行进值。你应该跳过这一行

    c = c.lower()
    

    而只是将命令名称设为 case-insensitive

    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