如何解决目标匹配后如何停止发电机?
尝试创建一个生成器,该生成器生成指定范围内的一组随机数字,然后在生成指定的目标编号后停止。尝试达到该次数的次数将被打印。如果未在指定的尝试次数内生成该数字,则用户将获得单独的提示。这是我到目前为止的内容:
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,max_attempts) is None:
print("Could not find target within the max number of attempts. Maybe better luck next time?")
现在,生成器立即停止(我猜测它与如何指定if not 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,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?
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。