一旦目标匹配,如何停止发电机



尝试创建一个生成器,该生成器生成指定范围内的随机数字集,然后在生成指定目标数字后停止。尝试达到该数字的次数将被打印出来。如果没有在指定的尝试次数内生成该数字,则用户将得到单独的提示。到目前为止,我拥有的是:

try:
min_value = int(input("Enter the minimum value for your random generator: "))
max_value = int(input("Enter the maximum value for your random generator: "))
target = int(input("Enter the target value you are trying to find: "))
max_attempts = int(input("Enter the maximum number of attempts to find the target before stopping generation: "))
except ValueError:
print("Please enter an integer value for your input!")
def find_target(target: int, min_value: int, max_value: int, max_attempts: int) -> Optional[int]:
# Start counter for number of attempts
j = 0
while j in range(max_attempts):
#Increment the attempts counter
j += 1
for k in range(min_value, max_value):
if not target:
yield k
gen = find_target(target, min_value, max_value, max_attempts)
while True:
print(next(gen))

一旦找到目标,理想情况下会发生这样的事情:

# Stop the generator
print("Target acquired! It only took ", j, "tries to find the target!")
gen.close()
if find_target(target, min_value, max_value, max_attempts) is None:
print("Could not find target within the max number of attempts. Maybe better luck next time?")

现在生成器立即停止(我猜这与如何指定if not target有关(。我怎么能让这个逻辑起作用呢?

如果您想返回target,只需在If语句后面加上yield。

import random
def gen(low, high, attempts, target):
for j in range(1, attempts+1):
guess = random.randint(low, high)
yield guess
if guess == target:
print()
print("Target acquired! It only took ", j, "tries to find the target!")
break
else:
print()
print("Could not find target within the max number of attempts. Maybe better luck next time?")
low, high = 0, 10
attempts = 10
target = 5
for el in gen(low, high, attempts, target):
print(el, end=' ')

输出:

7 0 0 3 3 5 
Target acquired! It only took  6 tries to find the target!
#or
4 2 0 6 1 4 3 6 1 6 
Could not find target within the max number of attempts. Maybe better luck next time?

最新更新