Python 3.8中的变量名列表

问题描述 投票:0回答:5

在我的程序中,我必须处理大量变量,并且必须在每个变量上执行相同的代码。

try:
    a1 = int(a1_txt.get())
except ValueError:
    try:
        a1 = int(str(a1_txt.get()) + "0")
    except ValueError:
        a1 = 1
        invalid += 1
if 0 < a1 < 10:
    pass
else:
    rang += 1

try:
    a2 = int(a2_txt.get())
except ValueError:
    try:
        a2 = int(str(a2_txt.get()) + "0")
    except ValueError:
        a2 = 1
        invalid += 1
if 0 < a2 < 10:
    pass
else:
    rang += 1

您可以看到,两段代码是相同的,唯一的区别是在a1的位置,第二段有a2。这里的问题是我有这些变量,直到i9,所以每次只更改一个数字或字母时,我就不得不重写这段代码64次。显然那是愚蠢的,必须有另一种方法。预先感谢您的帮助。问候

python list variables
5个回答
0
投票

是否回答您的问题:

def reusable_code(text):
    try:
        a = int(text.get())
    except ValueError:
        try:
            a = int(str(text.get()) + "0")
        except ValueError:
            a = 1
            invalid += 1
    if 0 < a < 10:
        pass
    else:
        rang += 1

如果您遍历txt并调用此函数,则可以重复使用64次。


0
投票

尝试改用字典:

d = {1:int(a1_txt.get()),
     2:int(a2_txt.get())}

for k in d.keys():

    try:
        d[k] = int(a2_txt.get())
    except ValueError:
        try:
            d[k] = int(str(a2_txt.get()) + "0")
        except ValueError:
            d[k] = 1
            invalid += 1
    if 0 < d[k] < 10:
        pass
    else:
        rang += 1

0
投票

我不太确定代码的结构和逻辑,因此如果您提供输入示例或希望从何处获取文本,这将很有帮助。但是,如果我理解正确,也许这会有所帮助:

如果您已经知道变量数(n),并且有一个列表,其中包含您将每次使用的文本

def reusable_finction(n,text_list):
    dict = {}
    i = 1
    invalid = 0
    rang = 0
    while i <n+1:
        try:
            x = int(text_list[i-1].get())
        except ValueError:
            try:
                x = int(str(text_list[i-1].get()) + "0")
            except ValueError:
                x = 1
                invalid += 1
        if 0 < x < 10:
            pass
        else:
            rang += 1

        dict["a"+str(i)] = x

0
投票

您可以使用eval()查找变量的值(给定其str表示形式,或者使用exec()用于更高级的用途:

a1,a2 = 8,4
for var_name in ("a1","a2"): # If there is some pattern to var_names, a double-loop here might help.
    if 0 < eval(var_name) < 10:
        pass

0
投票

您可以列出变量列表,然后使用for循环遍历它们。

假设我正确理解了您的情况,以下应该是一个开始:

def use_text(txt):
    try:
        a = int(txt.get())
    except ValueError:
        try:
            a = int(str(txt.get()) + "0")
        except ValueError:
            a = 1
        invalid += 1
    if 0 < a < 10:
        pass
    else:
        rang += 1

txts = [a1, a2, a3] #and so on
for i in txts:
    use_text(i)

几乎肯定会比a = [a1, a2, a3] #and so on更好的解决方案,但这将取决于代码的结构和要处理的数据。

我希望这会有所帮助!

© www.soinside.com 2019 - 2024. All rights reserved.