2

「絶対初心者のための Python プログラミング (第 3 版) 」という本を読んでいます。私はカスタム モジュールを紹介する章にいますが、これは本書のコーディングの誤りである可能性があると思います。5、6 回チェックして正確に一致させたからです。

まず、カスタム モジュールgames.pyがあります。

class Player(object):
    """ A player for a game. """
    def __init__(self, name, score = 0):
        self.name = name
        self.score = score

    def __str__(self):
        rep = self.name + ":\t" + str(self.score)
        return rep

def ask_yes_no(question):
    """ Ask a yes or no question. """
    response = None
    while response not in ("y", "n"):
        response = input(question).lower()
    return response

def ask_number(question, low, high):
    """ Ask for a number within a range """
    response = None
    while response not in range (low, high):
        response = int(input(question))
    return response

if __name__ == "__main__":
    print("You ran this module directly (and did not 'import' it).")
    input("\n\nPress the enter key to exit.")

そして今、SimpleGame.py

import games, random


print("Welcome to the world's simplest game!\n")

again = None
while again != "n":
    players = []

num = games.ask_number(question = "How many players? (2 - 5): ", low = 2, high = 5)
    for i in range(num):
        name = input("Player name: ")
        score = random.randrange(100) + 1
        player = games.Player(name, score)
        players.append(player)

    print("\nHere are the game results:")
    for player in players:
        print(player)

    again = games.ask_yes_no("\nDo you want to play again? (y/n): ")

input("\n\nPress the enter key to exit.")

したがって、これはまさにコードが本の中でどのように表示されるかです。プログラムを実行すると、でエラーが発生IndentationErrorfor i in range(num):ます。これが起こると予想していたので、変更して、各行の前にある 1 つのタブまたは 4 つのスペースを から に削除しfor i in range(num)ましたagain = games.ask_yes_no("\nDo you want to play again? (y/n): ")

この後、出力は次のとおりです"Welcome to the world's simplest game!"

なぜこれが起こっているのか誰かが私に知らせることができるかどうか疑問に思っていましたか?

また、import gamesPYTHONPATH へのパスを追加した後、モジュールは Eclipse で認識されます。

4

3 に答える 3

2

実は私自身、この本を持っています。はい、それはタイプミスです。これを修正する方法は次のとおりです。

# SimpleGame.py
import games, random


print("Welcome to the world's simplest game!\n")

again = None
while again != "n":
    players = []

    num = games.ask_number(question = "How many players? (2 - 5): ", low = 2, high = 5)
    for i in range(num):
        name = input("Player name: ")
        score = random.randrange(100) + 1
        player = games.Player(name, score)
        players.append(player)

    print("\nHere are the game results:")
    for player in players:
        print(player)

    again = games.ask_yes_no("\nDo you want to play again? (y/n): ")

input("\n\nPress the enter key to exit.")

私がしたことはnum、4 つのスペースをインデントして、最初の for ループに並べただけです。

于 2013-08-06T00:39:58.887 に答える
1
于 2013-08-06T00:38:57.137 に答える