为什么我从LPTHW ex41获取此代码中的缩进错误

时间:2014-07-23 22:48:32

标签: python indentation

嗨,我是Zed Shaw的LPTHW(第3版)的初学者。当我尝试在练习41中运行代码时,我在第42行得到一个缩进错误。我没有使用Tab按钮,这通常是缩进错误的问题。它是第二次发生,我无法弄清楚缩进的错误。我在Powershell中运行它

    import random 
from urllib import urlopen
import sys

WORD_URL = "http://learnpythonthehardway.org/words.txt"
WORDS = []

PHRASES = {
    "class %%%(%%%):":
     "Make a class named %%% thart is-a %%%.",
    "class %%%(object): \n\tdef __init__(self, ***)" :
     "class %%% has-a __init__ that takes self and *** parameters.",
    "class %%%(object): \n\tdef ***(self, @@@)":
     "class %%% has-a function named *** that takes self and @@@ parameters.",
    "*** = %%%()":
     "Set *** to an instance of class %%%.",
    "***.***(@@@)":
     "From *** get the *** function, and call it with parameters self, @@@.",
    "***.*** = '***'":
     "From *** get the *** attribute and set it to '***'."
}

#do they want to drill phrases first
PHRASE_FIRST = False
if len(sys.argv) == 2 and sys.argv[1] == "english":
  PHRASE_FIRST = True

  #load up the words from the website
for word in urlopen(WORD_URL).readlines():
  WORDS.append(word.strip())


def convert(snippet, phrase):
   class_names = [w.capitalize() for w in   
                  random.sample(WORDS, snippet.count("%%%"))]
   other_names = random.sample(WORDS, snippets.count("***"))
   results = []
   param_names = [] 

   for i in range(0, snippets.count("@@@")):
       param_count = random.randint(1,3)
       param_names.append(','.join(random.samples(WORDS, param_count)))

   for sentence in snippet, phrase:
       result = sentence[:]

     #fake class names
        for word in class_names:
            result = result. replace("%%%", word, 1)

    #fake other names
        for word in other_names:
            result = result.replace("***", word, 1)

    #fake parameters list 
        for word in param_names:
            result = result.replace("@@@", word, 1)

        result.append(result)

    return results


    #keep going till they hit CTRL-D
try:
    while True:
        snippets = PHRASES.keys()
        random.shuffle(snippets)

        for snippet in snippets: 
            phrase = PHRASES[snippet]
            question, answer = convert(snippet, phrase)
            if PHRASE_FIRST:
               question, answer = answer, question

            print question

            raw_input(">")
            print "ANSWER:%s\n\n" % answer
except EOFError
  print "\nBye"                         

2 个答案:

答案 0 :(得分:0)

你试过通过python的IDLE运行吗?它通常会告诉您要为缩进错误提供哪些行。这可能有所帮助。

答案 1 :(得分:0)

在转换第3个for循环时,对于class_names中的单词:似乎缩进了1个空格太远。