我如何 运行 多个 while 循环在每次循环后关闭?

How do I run multiple while loops that switch off after each loop round?

我对 Python(和一般编程)还很陌生,我想知道是否有办法同时 运行 2 个或更多 while 循环,以便在每一轮之后从一个循环切换到另一个循环,而不必从第 0 轮重新开始。这是我目前所拥有的:

def loop1():
rounds = 0
while True:
    if rounds == 1:
        print('A')
    elif rounds == 2:
        print('B')
    else:
        rounds = 0
    rounds = rounds + 1

def loop2():
    rounds = 0
    while True:
        if rounds == 1:
            print('a')
        elif rounds == 2:
            print('b')
        else:
            rounds = 0
        rounds = rounds + 1

loop1()
loop2()

现在,当我这样做时,它所做的只是 运行 loop1() 无限循环,永远不会到达 loop2(),但我想知道一种让输出显示的方法:

A
a
B
b
A
a
B
b
A
a
... and so on. 

有人知道我该怎么做吗?

另请注意,我是初学者,并没有真正掌握所有编程术语,所以请使用小词 :) 提前致谢。 (我还使用 Python 3(虽然我想你可能已经知道了吧?))

我不知道 Python,但将每个循环定义为函数并在单个循环中按顺序调用它们似乎是个好主意。

在我看来你并不是真的想要 运行 2 个循环,你想在一个循环中做 2 件事。类似于:

def loop():
  rounds = 0
  while True:
    doThing1(rounds)
    doThing2(rounds)
    rounds = rounds + 1
    # Look up the mod function for an easier way to do this
    if rounds > 2:
        rounds = 1

def doThing1(rounds):
    if rounds == 1:
        print('A')
    elif rounds == 2:
        print('B')

def doThing2(rounds):
    if rounds == 1:
        print('a')
    elif rounds == 2:
        print('b')

为什么不将它们合并为一个循环?

rounds = 0
while True:
    if rounds == 0:
        print('A')
    elif rounds == 1:
        print('a')
    elif rounds == 2:
        print('B')
    elif rounds == 3:
        print('b')
    rounds = (rounds + 1) % 4

你有一个没有中断或 return 语句的无限循环。最好的办法是将 while 替换为 for rounds in range(3).

用 return 语句替换 rounds = 0 也可以。

你可以试试这个,我不知道它是否是你要找的,但它会有你的输出。

rounds = 0
rounds2= 0
loop=1
while True:
    if loop==1:
        if rounds == 1:
            print('A')
        elif rounds == 2:
            print('B')
        else:
            rounds = 0
        rounds = rounds + 1
        loop=2
    if loop==2:
        if rounds2 == 1:
            print('a')
        elif rounds2 == 2:
            print('b')
        else:
            rounds2 = 0
        rounds2 = rounds2 + 1
        loop=1

忽略你有两个独立函数的原因(如果你有一个,你应该把它放在你的问题中),你可以使用一个循环和 itertools 模块来做到这一点。

import itertools
for c in itertools.cycle("AaBb"):
    print(c)

我会这样做:

from itertools import cycle

cycler = cycle(zip((1, 1, 2, 2), 'AaBb'))

for round, letter in cycler:
    # infinite loop-body here

通过使用 itertools.cycle,您可以保持程序的原始结构。循环的每次迭代都对应一个整数和一个字母,您通过元组拆包分发它们。

您所描述的可以归结为状态机。机器有一个变量,我们可以称之为 'letter',因此机器有两种状态,具体取决于该变量是 'A' 还是 'B'(您也可以将其设为 True/False 布尔变量)。它还有两个输出变量,大写字母后跟小写字母。打印当前状态后,我们更改状态并再次打印。

letter = 'A'

while True:
  if letter == 'A':
    print('A')
    print('a')
    letter = 'B'
  else:
    print('B')
    print('b')
    letter = 'A'