Python-如何为ev​​al赋值

时间:2019-10-15 11:45:28

标签: python concatenation eval

如何动态地传递变量名?我的意思是,如果用户输入的是'c',则counterc应该加1。

这是我到目前为止所拥有的。

counterc = 0
countern = 0
counterx = 0
letter = input()

if letter in ['c','n','x']:
  counter${letter} += 1 # does not work
  eval('counter' + letter + '=' + 1) # tried with this one too, but still does not work

3 个答案:

答案 0 :(得分:1)

counterc = 0
countern = 0
counterx = 0
letter = input()

if letter in ['c','n','x']:
    globals()['counter{}'.format(letter)] += 1
    print(globals()['counter{}'.format(letter)])

稍后谢谢 如果您使用的是python2输入'c',则在py3上输入c而不带引号。

答案 1 :(得分:1)

eval方法用于返回一个值,而不是用于执行字符串命令并且仅接受一个行命令

要执行字符串命令,您需要使用exec方法,这是正确的代码

counterc = 0
countern = 0
counterx = 0
letter = input()

if letter in ['c','n','x']:
  exec('counter' + letter + '=' + 1)

答案 2 :(得分:0)

locals内置函数提供了locals变量的(variable_name => variable_value)字典。此外,该词典不是只读的。
然后locals()[f"counter{letter}"] += 1应该会做。
如果您使用的Python版本低于3.6,请改用locals()[f"counter{}".format(letter)] += 1