你能告诉我我的代码是否有更优雅的解决方案我需要什么?
我的小程序从最多七个输入字段输入文本(确切的数字可以由用户指定).然后将输入字符串与散布的固定文本元素连接起来.生成字符串形式的单个输出.
该程序完美无缺.然而,我的编程让我觉得非常不优雅和非pythonic.你能帮助我改进,促进我的学习吗?
两点:
1)我想总结所有七个文本输入的字符串长度.我明白地添加了它们,这并不优雅.我怎么能这样做更好?
string_length = len(str(E1.get())) + len(str(E2.get())) + len(str(E3.get())) + len(str(E4.get())) + len(str(E5.get())) + len(str(E6.get())) + len(str(E7.get()))
2) 根据用户使用Tkinter Scale S指定的输入字段数,启用或禁用输入字段(En)以进行输入.
然后,从这些Entry字段派生的Strings str(En.get())与其间的固定字符串元素partM连接,以产生字符串m.(整个字符串的两侧也是partL和partR.)我通过get()方法查询比例S的变量(输入字段的数量)来完成此操作.然后程序决定如何通过if/elif继续?
设置的比例越高,添加的文本元素越多.然而,这是非常相似的任务,因为可能有更直接的解决方案.
这会产生很长的代码行,并且不适合扩展程序以获取更多的Entry字段.我怎么能做得更好?
代码摘录:
if S.get() == 1: if string_length == 22*S.get(): m = partL + str(E1.get()) + partR do_something() else: warning() elif S.get() == 2: if string_length == 22*S.get(): m = partL + str(E1.get()) + partM + str(E2.get()) + partR do_something() else: warning() elif S.get() == 3: if string_length == 22*S.get(): m = partL + str(E1.get()) + partM + str(E2.get()) + partM + str(E3.get()) + partR do_something() else: warning()
我是Python的新手.我也是编程新手.然而,我很自豪我写了一些工作正常的代码,并为我和其他人做了一些有用的事情.我欢迎任何建议.
如果您的字段是E1到E7,并且每个字段都有一个get
方法,则应该为您提供它们的总长度:
fields = [E1, E2, E3, E4, E5, E6, E7] total_length = sum(len(str(f.get())) for f in fields)
如果您只想要收集的值,这就足够了:
fields = [E1, E2, E3, E4, E5, E6, E7] values = [f.get() for f in fields]