昨天我发布了一个问题,我在其中寻找一种方法来执行无限 for
循环,而不使用 while
(因为我的老师想要这样,而且,我们不能使用任何我们在类里面没有见过的命令)。这很困难,因为显然没有一个不使用 while
或其他函数(如 itertools
或 .append 等)的非常可行的选项。
可以看到那个问题here
另外,非常感谢你们给我带来的反馈! :)
但是我设法和我的老师谈过,我们得到了使用 itertools
的许可,或者只是一个足够大的范围(而不是实际上是无限的).
我已经完成了一些练习,但现在我有以下说明:
(Think about grades)
• Ask the user a number (through inputs), and keep asking until the user tells to stop.
• Then, calculate the average from all the numbers entered.
(其实有点复杂,但我把它缩短了,我相信我可以处理剩下的)
正如我所说,我必须使用for
循环,而我不能使用whiles
全部。
如果我可以使用 while,我会这样做:
def grades():
totalg = 0
countg = 0
keepAdding = "y"
while(keepAdding == "y"):
qualif = int(input("Insert grades obtained, in scale from 0 to 100 "))
totalg = totalg + qualif
countg = countg + 1
keepAdding = str(input("Do you wish to keep adding data? (y/n) "))
print("The average of your grades is", totalg/countg)
如何使用 for
循环做类似的事情?我不知道如何存储数据以供以后计算。
此外,我很想知道一种更“正确”的方式来结束循环,但我也不能使用break
。
提前致谢!任何建议表示赞赏和欢迎! :)
最佳答案
一种方法是在没有外部模块的情况下使用 two-arg iter
;当传递两个参数时,第一个是一个无参数的函数来一遍又一遍地调用,第二个是一个标记值,它指示你应该停止。
因此,例如,您可以使用如下简单的内容进行无限循环:
for _ in iter(bool, True):
由于 bool
构造函数返回 False
,True
的标记值将永远不会出现,因此这是一个无限循环。
类似地,要制作一个提示循环,直到用户使用给定的标记字符串进行响应,例如 'q'
表示退出(或只是空字符串),您可以这样做:
for inp in iter(lambda: input("Insert grades obtained, in scale from 0 to 100 (type 'q' to quit)"), 'q'):
val = int(inp)
... rest of loop ...
显然,这有点晦涩(双参数 iter
很少见),所以通常你会使用 while True:
和包含测试的循环and-break
或 test-and-return
(后者不违反老师的要求)。同样,异常处理可以用于退出循环,虽然它很丑陋:
try:
for ...:
if test_for_end:
raise StopIteration
except StopIteration:
pass
# You're outside the loop
注意:从字面上看,我提到的所有内容都是糟糕的风格,除了实际的 while True:
循环和 test-and-break
/return
案例。但是你的一只手被绑在背后,所以我建议用一些可怕的变异手来代替。
关于python - 如何保存 "for"循环中的值? python 3,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46782017/