如何让python返回到循环的开头而不使用random?

2024-09-27 23:17:00 发布

您现在位置:Python中文网/ 问答频道 /正文

我对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返回到循环的开头,而不是创建一个全新的列表!你知道吗


Tags: you列表defrange数字randomstartrunning
3条回答

您想使用continue。以玩具为例:

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

输出:

1
3
5
7
9

为了尽量减少代码中循环的数量,我可能会首先在字典中弹出随机数。你知道吗

类似这样的事情(可能是更有效的方法…但这是我脑海中突然出现的第一件事):

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

你可以把

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

在环路外通过rNums启动。这样,列表中的四个数字就相同了。希望这有帮助

相关问题 更多 >

    热门问题