有没有办法简化这个python代码?

有没有办法简化这个python代码?,python,python-3.x,variables,if-statement,variable-assignment,Python,Python 3.x,Variables,If Statement,Variable Assignment,我仍然是在任何技术足够先进。。。学习编程的阶段。这段代码看起来很笨重,如果需要很难更新。有没有更好的办法?在我看来,这简直是疯了,但它很管用。。。那么好吗 它从TKinter radial 1-16中获取一个变量,并使用它选择Grade 1 ect变量。grade1变量然后链接到gspread上的图纸名称 def go(): subject = v.get() if subject == 1: subject = grade1 elif subject

我仍然是在任何技术足够先进。。。学习编程的阶段。这段代码看起来很笨重,如果需要很难更新。有没有更好的办法?在我看来,这简直是疯了,但它很管用。。。那么好吗

它从TKinter radial 1-16中获取一个变量,并使用它选择Grade 1 ect变量。grade1变量然后链接到gspread上的图纸名称

def go():
    subject = v.get()
    if  subject == 1:
        subject = grade1
    elif  subject == 2:
        subject = grade2    
    elif  subject == 3:
        subject = grade3
    elif  subject == 4:
        subject = grade4  
    elif  subject == 5:
        subject = grade5
    elif  subject == 6:
        subject = grade6
    elif  subject == 7:
        subject = grade7
    elif  subject == 8:
        subject = grade8
    elif  subject == 9:
        subject = grade9
    elif  subject == 10:
        subject = grade10    
    elif  subject == 11:
        subject = grade11
    elif  subject == 12:
        subject = grade12 
    elif  subject == 13:
        subject = grade13
    elif  subject == 14:
        subject = grade14
    elif  subject == 15:
        subject = grade15
    elif  subject == 16:
        subject = grade16

不要为年级**保留16个不同的变量!使用一个列表:

grades = [1, 2, 3, ...]  # or whatever your values are
那么你所需要做的就是:

subject = grades[v.get() - 1]

不需要定义16个单独的grade1…grade16变量,您可以将它们存储在一个类似grades=[grade1,…,grade16]的列表中,然后将subject设置为subject=grades[v.get-1]

几乎没有办法绕过它

# 1. Using the `list` data type
def go():
    grade_list = [grade1, grade2, ... grade16]
    subject = [grade_list[v.get() - 1]]


# 2. Using the `eval` 
def go():
       subject = v.get()
       if subject in range(1, 17):
           subject = eval("grade" + str(subject))
第一种方法被认为是更好的代码。然而,还有另一种使用方法 eval关键字。它将内部代码视为一个表达式。因为只有变量的数字部分会改变。然而,eval并不是我推荐的最佳方式。有关更多信息,请参阅本页或使用字典:

d={1:grade1,2:grade2 ... 16:grade16}
print(d[v.get()])
你会得到想要的分数


您必须有一个字典,其中包含所有可能的v.get值的键,以及每个键所需的等级值,因此您可以在字典中获取v.get键,然后使用d[v.get]获取其值,现在您已经获得了所需的分数。

请不要建议使用eval来修复错误的程序/数据结构。我已经编辑过eval不是最好的解决方法:谢谢,这很有效。我也做过类似的事情,但这对我来说并不重要。非常感谢。经验法则是:每当你在变量名上加上一个…2时,你应该停下来想想你实际上在做什么。那么对于我的TK径向按钮,我可以做类似的事情吗?但是1=Radiobuttonroot,text=grade[0],padx=5,variable=v,value=1,command=go-but2=Radiobuttonroot,text=grade[1],padx=5,variable=v,value=2,command=go-but3=Radiobuttonroot,text=grade[2],padx=5,variable=v,value=3,command=goSure…butions=[Radiobutton…,Radiobutton…,…].列表和字典有很大区别吗?或者只是索引在字典中?@CalvinHobbes它实际上并没有索引它得到的是键,然后是值,当遍历它所在的列表时,字典是O1,因为它使用哈希