簡體   English   中英

如何使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只返回循環的開頭而不創建一個完整的新列表!

您要使用continue 用一個玩具示例嘗試一下:

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

輸出:

1
3
5
7
9

你可以把

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

在循環外傳遞rNums來開始。 這樣,您將在列表中擁有相同的四個數字。 希望這可以幫助

為了最大程度地減少代碼中的循環次數,我可能首先將您的隨機數彈出到字典中。

諸如此類(可能更有效的方式...但這是我腦海中浮現的第一件事):

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM