我对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能够回到循环的开头,而不是创建一个全新的列表!
答案 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")