Python 我怎样才能创造一个无限的“世界”;至于;循环能够保存值,无需使用;而;?

Python 我怎样才能创造一个无限的“世界”;至于;循环能够保存值,无需使用;而;?,python,for-loop,Python,For Loop,我正在学习Python(使用3.6.2),在上节课上,他们让我做一些事情,我需要为循环创建一个无限。出于某种原因,老师不希望我们在整个练习中使用,。这就是它变得复杂的地方 所以,我一直在寻找一种方法。但是,这也很困难,因为老师不希望我们使用课堂上没有看到的任何命令。所以我不能使用.append,sys函数,我甚至不能使用break。我必须找到一种方法来处理简单的命令 我想我可以这样做 x=1 for i in range(x): do_something() x += 1

我正在学习Python(使用3.6.2),在上节课上,他们让我做一些事情,我需要为循环创建一个无限
。出于某种原因,老师不希望我们在整个练习中使用
。这就是它变得复杂的地方

所以,我一直在寻找一种方法。但是,这也很困难,因为老师不希望我们使用课堂上没有看到的任何命令。所以我不能使用.append,sys函数,我甚至不能使用break。我必须找到一种方法来处理简单的命令

我想我可以这样做

x=1
    for i in range(x):
    do_something()
    x += 1
然而,它似乎不起作用。我认为这是因为Python不会再次读取范围的值

我找不到办法,但经过几个小时的思考,我找到了一个可以使用的小解决方案:

def ex():
    print("Welcome")
    for i in range(1):
        math = int(input("Please insert grades obtained at Math, or insert 666 to exit" ))
        if(math > 0 and math < 60):
            print("Sorry. You failed the test")
            return ex():
        elif(math >= 60 and math <= 100):
            print("Congratulations. You passed the test")
            return ex():
        elif(math == 666):
            return exit()
        else:
            print("ERROR: Please insert a valid number")
            return ex():

def exit():
     pass
def ex():
打印(“欢迎”)
对于范围(1)中的i:
数学=int(输入(“请插入数学成绩,或插入666退出”))
如果(数学>0且数学<60):
打印(“对不起,你考试不及格”)
return ex():

elif(math>=60和math如果你不允许使用
itertools
并且你被限制在基本的语言结构中,并且在
期间不允许使用
,那么我有一些不幸的消息要告诉你

这可能是不可能的。至少在python
for
循环中是不可能的

我建议你与你班上的带头人联系,让他们澄清要求。这方面的知识没有实际应用,所以我很想知道这项作业的目标是什么

注意:这在其他支持实际for循环(即,而不是foreach循环)的语言中是可能的,所以这个任务的赋值人可能从不同的语言类移植了这个问题


编辑;现在您可以使用itertools了,我建议使用我在最初的评论中给出的答案

from itertools import count
for i in count():
    pass  # this will loop for longer than you will live.

有了这些,再加上在循环之前创建的列表,您应该可以轻松跟踪成绩并计算其平均值。

您可以尝试以下方法吗:

for i in iter(int, 1):
    print("Infinite for loop executing")
有关更多信息,请参阅关于不带
的infinte迭代器的问题,而

我讨厌这样的“把戏”问题,这些问题与您在现实世界中如何使用Python几乎没有关系。但无论如何

这里的技巧是迭代在
for
循环中修改的列表。这通常被认为是一种不好的做法,但我们可以在这里利用它来进行这种人为的赋值

我们在函数中请求用户输入,这样我们就可以使用
return
从循环中退出,因为您不允许使用
break

def get_data(prompt):
    lst = [None]
    for i in lst:
        s = input(prompt)
        if not s:
            return lst[1:]
        lst += [int(s)]
        print(lst)

print('Enter data, one number at a time. Enter an empty line at the end of the data')
lst = get_data('Number: ')
print('Data:', lst)
演示

Enter data, one number at a time. Enter an empty line at the end of the data
Number: 3
[None, 3]
Number: 1
[None, 3, 1]
Number: 4
[None, 3, 1, 4]
Number: 1
[None, 3, 1, 4, 1]
Number: 5
[None, 3, 1, 4, 1, 5]
Number: 9
[None, 3, 1, 4, 1, 5, 9]
Number: 
Data: [3, 1, 4, 1, 5, 9]

基于类的Python 3.x无限循环:

class loop_iter(object):
    def __iter__(self):
        return self
    def __next__(self):
        # for python2.x rename this method to `next`

        # Return the next item from the container.
        # If there are no further items, raise the StopIteration exception.
        # Because this is infinite loop - StopIteration is not raised
        return None

class infinite_loop(object):
    def __iter__(self):
        # This method is called when an iterator is required for a container. 
        # This method should return a new iterator object that can iterate over all the objects in the container.
        # For mappings, it should iterate over the keys of the container, and should also be made available as the method keys().

        # Iterator objects also need to implement this method;
        # they are required to return themselves.
        # For more information on iterator objects, see Iterator Types.
        return loop_iter()

x = []
# thx PM 2Ring for text
print('Enter data, one number at a time. Enter an empty line at the end of the data')  

for _ in infinite_loop():
    line = input('Number: ')

    if line:
       x += [int(line)]
       continue

    print('Average:', sum(x)/len(x))  # average
    exit()

这是很难回答的,因为我们不知道你们在课堂上看到了什么,但会导入并使用
itertools.count
()解决这个问题?你没有什么要道歉的。这是一个愚蠢的任务,被分配不是你的错。我期望会发生这样的事情:/是的,不重要的是我不能使用它。我在论坛上发现了这一点,但我不能使用
itertools
。不过,谢谢你的帮助。这对我来说也很困难,因为我知道这样很难找到解决办法,但我不知道我还能做什么:/老师不想让我们使用课堂上没有见过的任何命令-这太可笑了。你有什么办法可以解雇你的白痴老师吗?可能是重复的。显然,一切都是重复的。。。“出于某种原因,老师不希望我们在整个练习中使用while。”-这个答案无效。不重要的是,我不能使用
while
来做任何事情:(.谢谢你的帮助,though@oScarDiAnno你能用iter()吗
function?@akhilsp谢谢你,巴德。我们在课堂上没有看到过这个函数,但鉴于我没有任何选择,我想我会使用这个或
itertools
解决方案,并告诉我的老师我试过了,但我找不到其他方法。我明白了……嗯,很遗憾我花了很多时间绞尽脑汁想找到一个解决方案方法……但我认为你是对的。我不确定他对我们的期望是什么,但我会让你们了解我们的最新情况。非常感谢你们的帮助。我应该结束这个问题吗?不-让它打开。如果确实没有适合我的解决方案,请给我打勾-但是如果你找到了,或者老师让你知道,请随意发布你自己的答案。这个问题以后可能会被澄清,但我很好奇,如果没有其他问题的话,老师们的意图是什么。当然可以通过常规的
for
循环来实现这一点,但我不会推荐它。我想,我也不会教它:P这是我认为这位老师唯一的意思。谢谢你们两位的帮助p、 伙计们。今天我没有和那个老师上课,但我去搜了搜他的身,我们可以聊一聊。看起来他明白了,他告诉我我可以用itertools,也可以用一个足够大的范围(他告诉我们不要——但在他给我们布置作业的那天).那么,现在,如果问题不多的话,你能不能给我一点指导,告诉我如何使用这些选项来解决我问题中黄色方框中的问题?大多数情况下,我不知道如何保存这些值以便以后计算平均值。多谢各位,这是一个聪明而有趣的解决方案,我同意你的说法,这是“人为的”“作业。从您的代码中,我看到的唯一一件事是,我们没有看到
附加
。但是,我会收集这些解决方案,并向我的老师展示我发现的内容,这样他就可以看到我们确实试过了,但我们只是发现,如果不使用whiles或任何我们没有看到的东西,就无法做到这一点。因此,这非常有帮助,而且,