Python列表中的IndentationError

时间:2016-05-12 17:47:41

标签: python indentation

尝试编写python代码来加密字符串。

加密字符串,输出是加密字符串。

signals:

但是在运行此脚本时,会出现错误。

print "Enter the string "
a=raw_input()
e=''
i=0
while i<len(a):
  c=''
  c+=a[i]
  f=ord(c)
  if i%3==0:
    if f>21:
      e+=chr(f-21)
    else:
      e+=chr(f+5)
  elif i%3==1:
    if ord(c)>24:
      e+=chr(f-24)
    else:  
      e+=chr(f+2)   
  else:
    if ord(c)>21:
      e+=chr(f-20)
    else:
      e+=chr(f+6)     


  i=i+1
  del c

print e   

2 个答案:

答案 0 :(得分:0)

此缩进错误是由于脚本中的制表符和空格混合造成的。修复是遍历此文件中的每一行,确保为每个缩进级别使用四个空格。看起来你目前只使用两个空格,所以我不确定你是如何结束这个位置的,但删除所有缩进并使用四个空格而不是制表符可以解决你的问题。

尝试让您的代码看起来更像这样,看看您是否还有这些问题:

while i<len(a):
    c=''
    c+=a[i]
    f=ord(c)
    if i%3==0:
        if f>21:

注意每个缩进级别有四个空格而不是两个空格。这意味着行c=''while语句右侧的四个空格。此外,if f>21行是if i%3==0右侧的四个空格,while语句右侧有八个空格,因为它是while下的两个缩进级别言。

答案 1 :(得分:0)

我清理了你的代码:

plaintext = raw_input("Enter the string ")
encrypted = ''
for index, char in enumerate(plaintext):
    char_code = ord(char)
    index_mod = index % 3
    if index_mod == 0:
        if char_code > 21:
            offset = -21
        else:
            offset = 5
    elif index_mod == 1:
        if char_code > 24:
            offset = -24
        else:
            offset = 2
    else:
        if char_code > 21:
            offset = -20
        else:
            offset = 6
    encrypted += chr(char_code + offset)

print encrypted

为了好玩,也可以这样做:

offsets = [{True: -21, False: 5}, {True: -24, False: 2}, {True: -20, False: 6}]
upper_limits = [21, 24, 21]

plaintext = raw_input("Enter the string ")
encrypted = ''
for index, char in enumerate(plaintext):
    char_code = ord(char)
    index_mod = index % 3
    offset = offsets[index_mod][char_code > upper_limits[index_mod]]
    encrypted += chr(char_code + offset)

print encrypted

你甚至可以

offsets = [[5, -21], [2, -24], [6, -20]]

但不清楚那里发生了什么。

但是现在我在代码中看到偏移中的模式(第二个总是第一个减去26):

offsets = [5, 2, 6]
upper_limits = [21, 24, 21]

plaintext = raw_input("Enter the string ")
encrypted = ''
for index, char in enumerate(plaintext):
    char_code = ord(char)
    index_mod = index % 3
    offset = offsets[index_mod]
    if char_code > upper_limits[index_mod]:
        offset -= 26
    encrypted += chr(char_code + offset)

print encrypted