2

私は数字ゲームを少し推測しています。ユーザーが正しい数字を推測するまでループし続けたい「while True」ループがあります。現在、テストを容易にするために番号が表示されています。正しい数を推測したかどうかに関係なく、「'Nonetype' オブジェクトには属性 'Guess' がありません」というエラーが表示されます。「while True」が最初にループするときにエラーが発生しないのに、その後エラーが発生する理由がわかりません。

Tracker.py

from Number import *

class Runner(object):
def __init__(self, start):
    self.start = start
    print Integer.__doc__
    print Integer.code

def play(self):
    next_guess = self.start

    while True:
        next_guess = next_guess.Guess()

        if next_guess == Integer.code:
            print "Good!"
            exit(0)

        else:
            print "Try again!"

Integer = Random_Integer()

Game = Runner(Integer)

Game.play()

Number.py

from random import randint

class Random_Integer(object):

"""Welcome to the guessing game! You have unlimited attempts
to guess the 3 random numbers, thats pretty much it."""

def __init__(self):
    self.code = "%d%d%d" % (randint(1,9), randint(1,9), randint(1,9))
    self.prompt = '> '

def Guess(self):
    guess_code = raw_input(self.prompt)

ありがとう!

4

1 に答える 1

8

あなたの.Guess()メソッドは何も返しません:

def Guess(self):
    guess_code = raw_input(self.prompt)

returnそこにステートメントを追加する必要があります。

def Guess(self):
    guess_code = raw_input(self.prompt)
    return guess_code

関数に明示的な return ステートメントがない場合、その戻り値は alwaysNoneです。したがって、次の行:

next_guess = next_guess.Guess()

に設定next_guessNoneます。

ただし、結果が返されたとしても.Guess() 文字列の結果にraw_input()置き換えられnext_guessており、文字列オブジェクトにはメソッドがないため、ループの次の反復は失敗します.Guess()

Integerまた、インスタンスに引数として渡した後、グローバル値をどこでも参照し、そこRunner()に格納しますself.start。グローバルに依存しないでください。すでに持っていますself.start

class Runner(object):
    def __init__(self, start):
        self.start = start
        print start.__doc__
        print start.code

    def play(self):        
        while True:
            next_guess = self.start.Guess()

            if next_guess == self.start.code:
                print "Good!"
                exit(0)

            else:
                print "Try again!"

Integer上記のコードでは、 を使用する代わりに、グローバルへのアクセスを省略していself.startます。変数は現在のnext_guess推測を保持するために厳密に使用され、self.start.Guess()代わりに使用します。

于 2013-06-13T16:29:49.977 に答える