如何在 Python 中的另一个 while 循环中正确地创建一个 while 循环?

Posted

技术标签:

【中文标题】如何在 Python 中的另一个 while 循环中正确地创建一个 while 循环?【英文标题】:How do i properly make a while loop inside another while loop in Python? 【发布时间】:2019-09-29 08:51:22 【问题描述】:

我知道这很简单,但我在 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

基本上,if 条件在 i=1 时满足。

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

相反,代码做了一些非常奇怪的事情。我不知道第二个“1”是从哪里来的,while 循环只执行了 1 次。

【问题讨论】:

Inner while 只会运行“section .data”行,我认为是因为cad.find('section')!=-1。然后你 ++i 并打印两次“a db 2”......其余的我不确定,但是:1.你没有在外循环中增加i 2.我感觉还有更多pythonic 方法(例如".data" in cad 而不是 find),但您必须多解释一下您尝试实现的目标(好像您提取数据部分) 【参考方案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]))

【讨论】:

以上是关于如何在 Python 中的另一个 while 循环中正确地创建一个 while 循环?的主要内容,如果未能解决你的问题,请参考以下文章

python中for循环的用法

如何在 Python 中使用 while 循环计算列表中的字符串?

当read()阻塞时如何退出while循环

如何使用while循环计算python代码中的条目数?

Python入门教程第18篇 while循环语句

python中的if循环怎么样?