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

时间:2015-09-19 13:36:59

标签: python loops random numbers break

我对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()

问题在于,当我使用一个中断时,会创建一个包含4个数字的新列表,我希望python能够回到循环的开头,而不是创建一个全新的列表!

2 个答案:

答案 0 :(得分:0)

你可以把

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

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

答案 1 :(得分:0)

为了最大限度地减少代码中发生的循环次数,我可能会首先在字典中弹出随机数。

这样的事情(这可能是更有效的方式......但这是我头脑中的第一件事):

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

启动你的while循环,并不断要求用户猜测。每当他们做出正确的猜测时,只需执行此操作:

d.pop(correctly_guessed_num)

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

编辑在实施中添加我的快速插入。没有完全考虑过,可能是一些打破这个问题的边缘案例......但这是整体想法。希望它有所帮助。

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")