繁体   English   中英

请帮助我更好地理解这一条“除外”条件线

[英]Please help me better understand this one “except”conditional line

我大约要学习Python几周。

在用户的指导下:Stackoverflow上的“ Lost”丢失了,我得以弄清楚如何构建一个简单的解码器程序。 他提出了一个代码,我做了一些更改,但是对我来说重要的是我了解正在发生的事情。 我了解此代码的97%,但以下情况except: i += 1行在decode() 到目前为止,该代码有效,但是我想了解这一行。

因此,基本上,此代码根据特定条件对加密的单词进行解密。 您可以输入此示例加密字来进行尝试。 "0C1gA2uiT3hj3S"的答案应为"CATS"

我尝试用值错误替换例外: i += 1 ,因为我从未见过只具有可操作且没有Error子句的Try / Except条件。 但是用Value Error替换它会创建一个永无止境的循环。

我的问题是写例外的目的是什么: i += 1

如果您在那里,“丢失”可以回答这个问题。 抱歉,关于旧线程

def unscramble(elist):

    answer = []
    i = 0

    while i <= len(elist):

        try:
            if int(elist[i]) > -1:
                i = i + int(elist[i]) + 1
                answer.append(elist[i])
        except:
            i += 1

    return "".join(answer)

def boom():
    eword  = input("paste in your encrypted message here >> ")
    elist = list(eword)
    answer = unscramble(elist)
    print (answer)

clear()
boom()

目的是将i向前加1,以防在强制转换为int失败(即elist[i]不是数字)的情况下跳过当前字符。

在try-Block内部可能会发生一些错误:

  1. i没有索引,因为while循环将一个索引运行到很远。
  2. elist[i]不是数字,导致ValueError
  3. i = i + int(elist[i]) + 1变大,下一次索引访问也会导致IndexError

无论哪种方式,除外条款都将忽略下一个字符。 然后循环继续进行。

正确的实现不需要任何例外:

def unscramble(elist):
    answer = []
    i = 0
    while i < len(elist):
        i += int(elist[i]) + 1
        answer.append(elist[i])
        i += 1
    return "".join(answer)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM