有没有办法简化这个 python 代码?
IS there a way to simplify this python code?
我还处于学习编程的 "any technology sufficiently advanced..." 阶段。这段代码看起来很笨重,而且很难在需要时进行更新。有没有更好的方法来解决这个问题?对我来说,它看起来完全是疯子,但它确实有效……是吗?
它从 TKinter 径向 1-16 获取一个变量,并使用它 select grade1 等变量。然后 grade1 变量 link 到 sheet 在 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
不要为 grade**
保留 16 个不同的变量!使用一个列表:
grades = [1, 2, 3, ...] # or whatever your values are
那么您需要做的就是:
subject = grades[v.get() - 1]
您可以将它们存储在 grades=[grade1,...,grade16]
之类的列表中,然后将主题设置为 subject = grades[v.get()-1]
,而不是定义 16 个单独的 grade1...grade16 变量
绕过它的方法很少。
# 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
并不是我推荐的最佳方式。更多信息,请参阅此页面 Why is using 'eval' a bad practice?
或使用字典:
d={1:grade1,2:grade2 ... 16:grade16}
print(d[v.get()])
你会得到想要的分数。
你必须有一个字典,其中包含所有可能的 v.get()
值的键,以及每个键所需的成绩值,这样你就可以在字典中得到 v.get()
键,然后通过使用 d[v.get()]
得到它的价值,现在你已经得到了想要的成绩。
我还处于学习编程的 "any technology sufficiently advanced..." 阶段。这段代码看起来很笨重,而且很难在需要时进行更新。有没有更好的方法来解决这个问题?对我来说,它看起来完全是疯子,但它确实有效……是吗?
它从 TKinter 径向 1-16 获取一个变量,并使用它 select grade1 等变量。然后 grade1 变量 link 到 sheet 在 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
不要为 grade**
保留 16 个不同的变量!使用一个列表:
grades = [1, 2, 3, ...] # or whatever your values are
那么您需要做的就是:
subject = grades[v.get() - 1]
您可以将它们存储在 grades=[grade1,...,grade16]
之类的列表中,然后将主题设置为 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
并不是我推荐的最佳方式。更多信息,请参阅此页面 Why is using 'eval' a bad practice?
或使用字典:
d={1:grade1,2:grade2 ... 16:grade16}
print(d[v.get()])
你会得到想要的分数。
你必须有一个字典,其中包含所有可能的 v.get()
值的键,以及每个键所需的成绩值,这样你就可以在字典中得到 v.get()
键,然后通过使用 d[v.get()]
得到它的价值,现在你已经得到了想要的成绩。