昨天我发布了一个问题,我正在寻找一种方法来进行无限的 for
循环,而根本不使用 while
( 因为我的老师想要,而且,我们无法使用我们在课堂上看不到的任何命令。很难显然没有一个非常可行的选项没有使用while
,或其他函数,如itertools
或.append等。
您可以看到问题here
另外,非常感谢你们带给我的反馈! :)
但是我设法与我的老师交谈,我们获得了使用 itertools
的权限,或者只是一个足够大的范围(而不是实际上无限的)。< / p>
我已经解决了一些练习,但现在我有以下说明:
(考虑 成绩 )
•向用户询问一个号码(通过输入),然后 继续询问 ,直到用户告知停止为止。
•然后,根据输入的所有数字计算平均值。
(它实际上有点复杂,但我缩短了它,我相信我可以处理其余的事情)
正如我所说,我必须使用for
循环,而我根本不能使用whiles
。
如果我可以在时使用,我会做这样的事情:
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
循环执行此类操作?我不知道如何存储数据以供以后计算。
此外,我有兴趣了解更多&#34;正确的&#34;能够结束循环的方法,但我也不能使用 break
。
提前致谢!任何建议表示赞赏和欢迎! :)
答案 0 :(得分:4)
这样做的一种方法是,在没有外部模块的情况下,使用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 ...
显然,这有点模糊(很少看到两个arg iter
),所以通常你会在while True:
中使用包含test-and - {{1}的循环}或者测试 - 和 - break
(后者并没有违反教师的要求)。类似地,异常处理可用于退出循环,尽管它很难看:
return
注意:除了带有测试和 try:
for ...:
if test_for_end:
raise StopIteration
except StopIteration:
pass
# You're outside the loop
/ while True:
案例的实际break
循环外,我提到的所有内容都是糟糕的风格。但是你的一只手被绑在背后,所以我建议用一些可怕的突变手代替。
答案 1 :(得分:4)
即使'no- 中断'规则并且要求“正确”的方式来结束循环也有点矛盾,我会说这是可能的,即使没有 return < / strong>:
grades = [0]
for j in grades:
t = int(raw_input('grade:'))
ans = raw_input('more? [y/n]:').lower()
if(ans == 'y'):
grades.append(t)
else:
grades[0] = t
print(sum(grades)*1.0/len(grades))
这里我们只是迭代不断增长的值列表,当我们需要停止时 - 我们只是停止向其添加值,并且循环结束。
<强>无论其强> 这不是处理该问题的正确方法,请阅读ShadowRanger以获取更多详细信息 - 这是错误的编码风格,不应使用。
答案 2 :(得分:-1)
也许保存在数组中获得的所有数据? 我认为python上的数组工作为链接列表,所以你不会有任何溢出问题,至少这将是一个起点