Python - 如何以连续的方式连接字符串?

use*_*596 10 python string-concatenation

你能告诉我我的代码是否有更优雅的解决方案我需要什么?

我的小程序从最多七个输入字段输入文本(确切的数字可以由用户指定).然后将输入字符串与散布的固定文本元素连接起来.生成字符串形式的单个输出.

该程序完美无缺.然而,我的编程让我觉得非常不优雅和非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()))
Run Code Online (Sandbox Code Playgroud)

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()
Run Code Online (Sandbox Code Playgroud)

我是Python的新手.我也是编程新手.然而,我很自豪我写了一些工作正常的代码,并为我和其他人做了一些有用的事情.我欢迎任何建议.

g.d*_*d.c 6

如果您的字段是E1到E7,并且每个字段都有一个get方法,则应该为您提供它们的总长度:

fields = [E1, E2, E3, E4, E5, E6, E7]
total_length = sum(len(str(f.get())) for f in fields)
Run Code Online (Sandbox Code Playgroud)

如果您只想要收集的值,这就足够了:

fields = [E1, E2, E3, E4, E5, E6, E7]
values = [f.get() for f in fields]
Run Code Online (Sandbox Code Playgroud)

  • 建议从一开始就创建一个字段列表,而不是使用"E1","E2","E3"等变量. (3认同)