如何保存" for"环? Python 3

时间:2017-10-17 03:26:41

标签: python function for-loop

昨天我发布了一个问题,我正在寻找一种方法来进行无限的 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

提前致谢!任何建议表示赞赏和欢迎! :)

3 个答案:

答案 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上的数组工作为链接列表,所以你不会有任何溢出问题,至少这将是一个起点