python中无限循环需要提前确定循环次数吗_如何在python中检测无限循环

我不确定我是否同意两次访问一条线证明了一个无限循环。请参阅问题下面的评论。但我能回答实际的问题。

提示如下:A hint given by the tutorial assistant says "initialize a list visited = [False] * len(prog) and change visited[i] to True when prog[i] is visited. Each time through the loop, one value updates in visited[]. Think about how you change a single value in a list. Then think about how you identify which value in visited[] needs to change."

这意味着您应该有两个列表,一个包含程序,一个包含true/false标志。第二个名为visited,最初包含False值。

Python代码就像提示所说的:visited = [False] * len(prog)

这使用*list操作符“list repetition”来重复length-1列表并生成一个更长的新列表。

将visited[i]更改为True很简单:visited[i] = True

然后你可以这样做:if visited[i]:

print("We have already visited line {}".format(i))

print("Infinite loop? Exiting.")

sys.exit(1)

注意,我们只是通过简单地说if visited[i]:来测试True值

我们也可以编写if visited[i] == True:,但是较短的格式就足够了,而且在Python社区中是很常见的。这里记录了这个习惯用法和其他习惯用法:http://python.net/~goodger/projects/pycon/2007/idiomatic/handout.html

对于一个这么小的程序来说,保留两个这样的列表并不算太坏。对于更大更复杂的程序,我更喜欢把所有东西放在一个地方。这将使用一个你可能还没学会的“类”。像这样的:class ProgramCode(object):

def __init__(self, statement):

self.code = statement

self.visited = False

prog = []

with open(input_basic_program_file, "rt") as f:

for line in f:

prog.append(ProgramCode(line))

现在,我们没有两个列表,而是有一个列表,其中每个项都是一些基本代码和一个visited标志。

p.S.上面显示了一个显式的for循环,它反复使用.append()来添加到列表中。一个有经验的Python开发人员可能会使用“列表理解”来代替,但我希望尽可能容易地理解它。

这是对列表的理解。别担心现在看起来有点怪,你的课最终会教给你的。with open(input_basic_program_file, "rt") as f:

prog = [ProgramCode(line) for line in f]

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值