【问题标题】:Looping in the Naming of Variables and Filenames循环命名变量和文件名
【发布时间】:2017-12-14 20:25:41
【问题描述】:

我正在寻找是否可以压缩以下代码。我知道我需要使用数组和循环语句,但我尝试过的没有奏效。我通常会收到一条错误消息,说我不能使用应该是字符串或间隔的列表,这可能意味着循环实际上并没有发生?

writef1startsw1pt1 = open("C:/f1startsw1.txt", "w")
writef1startsw2pt1 = open("C:/f1startsw2.txt", "w")
writef1startsw3pt1 = open("C:/f1startsw3.txt", "w")
writef1startsw4pt1 = open("C:/f1startsw4.txt", "w")
writef1startsw5pt1 = open("C:/f1startsw5.txt", "w")
writef1startsw6pt1 = open("C:/f1startsw6.txt", "w")
writef1startsw7pt1 = open("C:/f1startsw7.txt", "w")

唯一需要更改的是变量中的数字,以及文件名中的数字,范围从 1 到 7。

我确定解决方案不会太复杂,但我花了一段时间试图弄清楚这一点,但我仍然感到困惑。谢谢!

【问题讨论】:

  • 不要使用编号变量。请改用列表。

标签: arrays python-3.x loops naming


【解决方案1】:

像这样的变量名替换在 Python 中是不可能的,但是,您可以使用列表来实现相同的目标。

writef1startswpt1 = []
for i in range (1,8):
    writef1startswpt1.append(open("C:/f1startsw" + str(i)+ ".txt", "w"))

#Now you have a list of those 7 open files, and you can access them with the indices 0 - 6

【讨论】:

    【解决方案2】:

    我会使用字典而不是列表来跟踪文件,因为列表索引从 0 开始,而您的文件从 1 开始(或者您可以简单地使用在索引 0 处保留 None 条目。

    files = {}
    for i in range(1, 7+1):
        files["writef1startsw{}pt1".format(i)] = open("C:/f1startsw{}.txt".format(i), "w")
    
    files["writef1startsw1pt1"] #first file
    

    如果您更喜欢使用列表,可以这样做:

    files = [None]
    
    for i in range(1, 7+1):
        files.append(open("C:/f1startsw{}.txt".format(i), "w"))
    
    files[1] #first file
    

    【讨论】:

    • 为什么是“7+1”,为什么不只是 8? =)
    • 这只是为了让列表的索引方式更加清晰。如果您能够很好地处理非一错误和索引,并且它对性能没有任何重大影响,则没有必要,但为了回答问题,我将其包含在内以使其更容易:)
    猜你喜欢
    • 2019-07-05
    • 1970-01-01
    • 2018-09-17
    • 2013-04-23
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 2020-10-11
    • 2019-07-29
    相关资源
    最近更新 更多