如何将一个范围插入另一个范围?

问题描述 投票:0回答:1

我想问一下在下面的情况下如何将i2插入到i1中。 它可以从 0 到 A 按顺序打印数字。但是我遇到了一些问题,即它只重复打印数字 A 的问题。有没有什么办法解决这一问题? 图片:


左:我想要的结果。

右:我得到的结果。

图片

    for i2 in range(record_len_id+1): #0 ~ A
        name = i2
        print(name)
    for i1 in range(num_records): ##0 ~ B
        name1 = i1 
        
        this_record = read_data(binary_data, record_len, data_start_point + i1 * record_len)
        MergeFull = ""    
        if read_int(this_record, 0) == 417:
            MergeFull = "======\n{}\n".format(i2) #Condition Here!!!!!!
        MergeFull += "Debug2: {} | ".format(read_int(this_record, 4)) 
        output_file.write(str(MergeFull)+"\n")
python python-3.x
1个回答
0
投票

当变量在 for 循环顶部声明时,它在 for 循环完成后仍保留在作用域中

当进入第二个 for 循环时,变量

i2
存在,但其值不变(等于开始时
record_len_id
的值)。

就像 DiggusBickus 建议的那样,

i2
不应在 for 循环中声明,而应在每次使用后更新。

    i2 = 0  # initial value here
    for i1 in range(num_records):
        name1 = i1 
        
        this_record = read_data(binary_data, record_len, data_start_point + i1 * record_len)
        output_line = ""    
        if read_int(this_record, 0) == 417:
            output_line = "======\n{}\n".format(i2)
            i2 += 1  # incremented after use in string
        output_line += "Debug2: {} | ".format(read_int(this_record, 4)) 
        output_file.write(str(output_line)+"\n")

for 循环中声明的变量的范围因语言而异:

  • 对于 C++,此类变量过去在退出 for 循环后仍保留在作用域内,但二十年前标准已更改,因此它们超出了作用域。这意味着如果在 2000 年代末使用新的编译器,则 1990 年代的 C++ 代码在退出 for 循环后可能会出现编译错误。
  • 对于 Java,此类变量超出范围
  • 对于 Javascript,变量是否在范围内取决于您使用哪种类型的 for 循环。在简单的例子中它们仍然存在,但对于范围循环来说就不那么明显了。
  • 对于 C#,行为 for 和 foreach 以及 C# 版本之间有所不同。
© www.soinside.com 2019 - 2024. All rights reserved.