如何让 python 回到循环开始而不使用随机数?

How to get python to go back to start of loop and not use random?

我对 python 有点陌生,我给自己布置了一个任务,我想要一个猜数字的游戏,让你猜四个数字,程序会不断告诉你你猜对了多少个数字直到您猜出完整的数字列表。

running = True
import random
def compareLists(a, b):
    return list(set(a) & set(b))
def start():
    rNums =  random.sample(range(10), 4)
    gNums = []

    print("Get ready to guess 4 numbers!")
    for i in range(0, 4):
        x = int(input("Guess: "))
        gNums.append(x)

    print("You guessed: ", gNums)
    comparison = len(compareLists(rNums, gNums))

    while gNums and rNums:
        if gNums != rNums:
            print("You guessed " + str(comparison) + " numbers right, keep guessing!")
            break
        elif gNums == rNums:
            print("What amazing luck!")
while running:
    start()

问题是当我使用 break 时创建了一个包含 4 个数字的新列表,我希望 python 回到循环的开始而不是创建一个全新的列表!

你可以把

rNums =  random.sample(range(10), 4)

在循环外传递 rNums 开始。这样您将在列表中拥有相同的四个数字。希望这有帮助

为了尽量减少代码中的循环次数,我可能会先将随机数放入字典中。

类似这样的事情(可能是更有效的方法...但这是我脑海中首先想到的):

from collections import Counter
d = Counter(random.sample(range(10), 4))

开始您的 while 循环,并不断要求用户猜测。每次他们猜对了,就执行这个操作:

d.pop(correctly_guessed_num)

一旦你的字典为空,你就完成了并打破了循环。

EDIT 添加我对实现的快速尝试。没有经过深思熟虑,可能是一些边缘情况打破了这一点……但这是总体思路。希望对你有帮助。

from collections import Counter
import random

d = Counter(random.sample(range(1, 10), 4))
size = len(d) - 1

while True:
    x = int(input("Guess: "))

    if size == 0:
        print("you guessed them all, way to go")
        break

    if x not in d:
        print("keep going buddy")
        continue
    else:
        d.pop(x)
        size -= 1
        print("A right guess")

您想使用 continue。用玩具示例试试:

i = 0;
while i < 10:
   i += 1
   if i % 2 == 0:
      continue
   print i

输出:

1
3
5
7
9