学习python艰难的练习41

时间:2015-03-10 06:24:18

标签: python python-2.7

http://learnpythonthehardway.org/book/ex41.html

我如何运行脚本(与编写器完全相同)

import random
from urllib import urlopen
import sys

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

PHRASES = {
  "class %%%(%%%):":
    "Make a class named %%% that 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
if len(sys.argv) == 2 and sys.argv[1] == "english":
    PHRASE_FIRST = True
else:
    PHRASE_FIRST = False

  # 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, snippet.count("***"))
    results = []
    param_names = []

    for i in range(0, snippet.count("@@@")):
      param_count = random.randint(1,3)
      param_names.append(', '.join(random.sample(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 parameter lists
      for word in param_names:
         result = result.replace("@@@", word, 1)

      results.append(result)

   return results


# keep going until 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"

然后我得到这个错误(图片)? 这个错误与我的python版本有关吗?

因为我甚至使用CTRL-C CTRL-V来确保脚本与编写器完全相同,所以我无法弄清楚导致错误的原因是什么?

我使用的是Python 2.7.6(默认,2014年9月9日,15:04:36) enter image description here

错误:

Traceback (most recent call last):
  File "123.py", line 30, in <module>
    for word in urlopen(WORD_URL).readlines():
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 87, in urlopen
    return opener.open(url)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 208, in open
    return getattr(self, name)(url)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/urllib.py", line 346, in open_http
    errcode, errmsg, headers = h.getreply()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1117, in getreply
    response = self._conn.getresponse()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 1045, in getresponse
    response.begin()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 409, in begin
    version, status, reason = self._read_status()
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 365, in _read_status
    line = self.fp.readline(_MAXLINE + 1)
  File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/socket.py", line 476, in readline
    data = self._sock.recv(self._rbufsize)
IOError: [Errno socket error] [Errno 54] Connection reset by peer

0 个答案:

没有答案