如何从“中保存值”;至于;环Python 3

如何从“中保存值”;至于;环Python 3,python,function,for-loop,Python,Function,For Loop,昨天我发布了一个问题,我正在寻找一种方法来为执行无限循环,而根本不使用,(因为我的老师想要这样做,而且,我们不能使用课堂上没有看到的任何命令)。这很困难,因为显然没有一个非常可行的选项不使用while,或其他功能,如itertools或.append等 你可以看到这个问题 另外,非常感谢你们给我带来的反馈!:) 但是我设法与我的老师交谈,我们获得了使用itertools或仅仅是一个足够大的范围(而不是实际上无限的范围)的许可 我已经解决了一些练习,但现在我有以下说明: (想想等级) •向用户

昨天我发布了一个问题,我正在寻找一种方法来为执行无限
循环,而根本不使用
(因为我的老师想要这样做,而且,我们不能使用课堂上没有看到的任何命令)。这很困难,因为显然没有一个非常可行的选项不使用
while
,或其他功能,如
itertools
或.append等

你可以看到这个问题
另外,非常感谢你们给我带来的反馈!:)


但是我设法与我的老师交谈,我们获得了使用
itertools
或仅仅是一个足够大的范围(而不是实际上无限的范围)的许可


我已经解决了一些练习,但现在我有以下说明:

(想想等级
•向用户询问一个号码(通过输入),然后继续询问,直到用户告知停止。
•然后,根据输入的所有数字计算平均值

(实际上有点复杂,但我缩短了它,我相信我可以处理其余的事情)

正如我所说,我必须为循环使用
,而我根本不能在循环中使用

如果我能用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
循环?我不知道如何存储数据以备以后计算


另外,我想知道一种更“合适”的方法来结束循环,但我也不能使用
中断


提前谢谢!欢迎您提供任何建议!:)

一种方法是,在没有外部模块的情况下,使用;当传递两个参数时,第一个是要反复调用的无参数函数,第二个是指示应该停止的sentinel值

例如,你可以用如下简单的东西做一个无限循环:

 for _ in iter(bool, True):
由于
bool
构造函数返回
False
,因此将永远不会出现
True
的哨兵值,因此这是一个无限循环

类似地,要创建一个循环,直到用户使用给定的sentinel字符串做出响应,如退出的
'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
),因此通常使用
,而True:
循环包含一个test和-
break
或test和-
return
(后者不违反教师要求的字母)。类似地,可以使用异常处理退出循环,尽管这很难看:

 try:
     for ...:
         if test_for_end:
             raise StopIteration
 except StopIteration:
     pass
 # You're outside the loop

注意:从字面上说,我提到的所有东西都是糟糕的风格,除了实际的
,而True:
使用测试循环和-
中断
/
返回
案例。但是你的一只手被绑在背后,所以我建议用一些可怕的变异手来代替。

也许把所有获得的数据保存在一个数组中?
我认为python上的数组就像链表一样工作,所以不会有任何溢出问题,至少这是一个起点,即使“no-打破”规则和请求以“适当”的方式结束循环有点矛盾,我认为这是可能的,即使没有返回

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了解更多详细信息-这是一种糟糕的编码方式,不应使用。

在昨天的回答中,我使用了
return
来克服no-
break
限制。或者你也不能使用
return
吗?也许你应该列出你可以使用的东西。当我们不知道规则是什么的时候,很难回答这类问题。是的。(抱歉这么晚了,顺便说一句)我可以使用return,这或多或少是我所做的,但是在这个例子中,对于这段代码,我如何放置return命令以结束它,同时保持变量值?对不起,我的无知,我想这是我可以从你的代码中推断出来的,但我恐怕还不能完全理解它。是的,让我列出一些我们见过的东西,让事情变得更简单。但我想我们离得越来越近了,谢谢:)@PM2Ring:可能。一个arg
iter
并非完全没有听说过,因此他们可能已经看到了它,即使他们没有被引入到两个arg的形式中。如果他们检查了内置函数,它就在那里;类似地,如果他们讨论了for循环是如何工作的,
iter
是所有
for
循环的一个隐含部分,那么谁知道呢?我相信我能够使用iter知道,嗯,事实上,一开始我相信它包含在iter中。工具和我的老师允许这样做。当然,我们在课堂上没见过,但我知道我想我可以用它。然而,我看到了一些我们无法使用的其他东西,比如
lambda
。我想我让你们有点太纠结了,真的,非常感谢。但我认为,如果像@PM2Ring所说的那样,我列出了我们所看到的东西,那会更容易。给我一点时间,这对我很有用:不,Python没有为
列表
类型使用链表(
数组
是一个针对C特定类型的模块,可能不是你的意思)。第二:这不是一个真正的答案;它在某种程度上回应了问题的标题,但问题的主体根本不是存储原始值;即使是,这也太模糊/宽泛,无法作为答案。