如何在不使用"while"的情况下创建一个无限的"For"循环来保存值?

oSc*_*nno 4 python for-loop

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

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

我以为我可以这样做;

x=1
    for i in range(x):
    do_something()
    x += 1
Run Code Online (Sandbox Code Playgroud)

但是,它似乎没有用.我认为那是因为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
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,使它"无限"的是它一次又一次地返回函数,直到你通过输入"666"告诉程序"退出".我也想有一个更合适的方法退出该功能.

我仍然想知道是否有更好的方法让我的for循环无限,直到用户调用它停止.但是,不管怎样,我都在练习这项练习.当我开始使用第二个时,问题出现了,这或多或少是这样的:

想象一下过去的相同程序,但这一次,它不会只是告诉你是否通过了测试.它想收集你尽可能多的成绩进入通过输入,然后计算平均值的所有等级.我无法保存这些值(等级)因为我每次都"重启"我自己的功能.

根据我老师的指示,我不能问用户他希望我计算多少等级.它必须是无限的并且一直要求输入,直到用户选择不这样做.

我真的被困在了它身上.这是非常困难和令人沮丧的,因为如果我们可以使用while的话会更容易:(而且更难,因为我们不能使用任何我们没有见过的选项...

所以,我有3个问题:

  • 如何为循环创建一个合适的"无限"?
  • 我如何正确地"完成"它?
  • 如何使其能够保存值?

非常感谢任何愿意帮助的人,并为我的无知感到抱歉.
我是社区的新手,所以关于我的问题,格式化问题或任何事情的任何建议都很受欢迎:)

编辑:我和我的老师谈过,他允许我使用任何一个itertools或只是一个足够大的范围来达不到.现在我想知道,我怎样才能将这些值保存在for以后的操作中?

akh*_*lsp 5

你能尝试这样的事吗:

for i in iter(int, 1):
    print("Infinite for loop executing")
Run Code Online (Sandbox Code Playgroud)

有关更多信息,请参阅有关infinte iterator的问题while.

  • @akhilsp谢谢你.我们没有在课堂上看到这个功能,但看到我没有任何选择可以使用,我想我会使用这个或者`itertools`解决方案并告诉我的老师我尝试了但我找不到另一种方法. (2认同)

PM *_*ing 5

我讨厌像这样的"技巧"问题,这些问题与你在现实世界中如何使用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)
Run Code Online (Sandbox Code Playgroud)

演示

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]
Run Code Online (Sandbox Code Playgroud)