在我的程序中,我必须处理大量变量,并且必须在每个变量上执行相同的代码。
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次。显然那是愚蠢的,必须有另一种方法。预先感谢您的帮助。问候
是否回答您的问题:
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次。
尝试改用字典:
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
我不太确定代码的结构和逻辑,因此如果您提供输入示例或希望从何处获取文本,这将很有帮助。但是,如果我理解正确,也许这会有所帮助:
如果您已经知道变量数(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
您可以使用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
您可以列出变量列表,然后使用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
更好的解决方案,但这将取决于代码的结构和要处理的数据。
我希望这会有所帮助!