使用字符串将循环内的列表作为变量

时间:2015-01-09 07:14:07

标签: python

这是新手问题。我正在研究一种完全基于Python的sagemath。

我的代码分为两部分: 第一部分是:

var('a,b')
my_list=list(powerset([a,b]))
my_possible_products_list=[]
for i in my_list:
        if len(i)!=0:
            my_possible_products_list.append(prod(i))
print my_possible_products_list   

带有输出

[a, b, a*b]

,结果是一组两个变量上所有可能的产品表达式的列表。

第二部分:

for expression_compute in my_possible_products_list:
    for l in range(1,3):
        for a in divisors(l):
            for b in divisors(l):
                print expression_compute

带输出

a
a
a
a
a
b
b
b
b
b
a*b
a*b
a*b
a*b
a*b

问题:我需要输出数字,而不是使用a和b,而是使用a和b的值作为给定l的除数。

任何提示?

感谢。

2 个答案:

答案 0 :(得分:1)

我不确定我是否理解这里的问题,但根据我的理解,您将表达式作为字符串并想要计算值。对于a和b作为单个实体,它很容易,只需转换为整数

a = "5"
print(int(a) + 1)  # Will print 6

对于你可以做的产品表达,因为@iForest建议使用 eval(),但他说这是邪恶的。我会使用拆分方法

expr = "3*5"
terms = expr.split('*') 
print(int(terms[0]) * int(terms[1]))  # Will print 15

希望这有帮助,否则我需要更多解释你的问题

== @iForest评论==

后更新

如果变量名称为需要的字符串,请使用locals()

a = 3
b = 5
variables = locals()
expr = "a*b"
terms = expr.split('*')
print(variables[terms[0]] * variables[terms[1]])  # Output 15
只要您不需要更新变量

就会有效

答案 1 :(得分:0)

内置函数eval()可以评估字符串的值。

a = 3
b = 5
print(eval("a * b"))        # Output 15

但是, eval()是EVIL

使用简单快捷,但使用时要小心。您必须确保eval()的输入字符串正常。阅读更多关于如何使用/如何危险here(8.9。评估任意字符串作为Python表达式)。