如何让 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
我对 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