我如何在Python中的另一个while循环中正确地进行while循环?

时间:2019-05-11 22:09:04

标签: python

我知道这很简单,但是我在Python中使用“ while”时遇到了一些麻烦。我的猜测是,“ while”无法像我所认为的那样工作。当在另一个while循环内执行while循环作为代码的一部分时,第二个while循环只会执行一次工作,然后继续执行,但是我的意图是让第二个while循环多次执行工作,然后返回到第一个循环while循环。

我正在使用的实际代码是这样的:

file=open('program.asm','r+')
lista= file.readlines()
i=0
while (i<len(lista)):
      cad=lista[i] 
      if (cad.find('data')!=-1):
          while (cad.find('section')!=-1 and i<len(lista)):
              print(i)
              print(cad)
              i=i+1
              cad=lista[i]
              print(cad)
              saveData(cad)
              print(cad)
              print(i)
      print(i)
file.close()

文件包含以下内容:

section .data
    a db 2
    b db 3
section .bss
    result resw 1
section .text
global CMAIN
CMAIN:
    mov r1,a
    mov r2,b
    add r1,r2
    mov word[result],r1
    ret

我得到的结果是

1
1
section .data

        a db 2

        a db 2
2
3
4

这很奇怪,我的打印结果应该是

1
section .data
a db 2
a db 2
2
3
b db 3
b db 3
4

基本上,当i = 1时,if条件成立。

然后,如果i = 2,则while循环应打印“ a db 2”,如果i = 3,则应打印“ b db 3”。如果i = 4,请退出while循环。

相反,代码做了一些很奇怪的事情。我不知道第二个“ 1”来自哪里,而while循环仅执行1次。

1 个答案:

答案 0 :(得分:1)

两个快速建议:

方法1:While循环

这就是循环的方式

file=open('program.asm','r+')
lista= file.readlines()
i=0
while i < len(lista):
    print(i)
    cad=lista[i]
    if "data" in cad:
        # Move INTO data section
        print(cad.strip())
        i+=1
        cad=lista[i]
        # Now, read until the next section
        while "section" not in cad and i < len(lista):
            print(i)
            print(cad.strip())
            i=i+1
            cad=lista[i]
    # If no data section found, keep on looking
    else:
        i += 1
file.close()

方法2:提取数据

这可能需要针对不同的换行格式进行编辑,或者针对其他(而非bss)部分跟随数据但您了解的情况:

file=open('program.asm','r+')
lista= file.readlines()

data_start = lista.index("section .data\n")
bss_start = lista.index("section .bss\n")
# Print all lines starting from data section and until bss
print("\n".join(i.strip() for i in lista[data_start:bss_start]))