0

やり直したいプロジェクトがあります。これは、インタラクティブな Python プログラミングのコースラ コース用です。提出期限はすでに過ぎているので、ここでの名誉規定に違反しているのではなく、同じプロジェクトで現在取り組んでいるコードが機能しない理由を理解したいだけです。

ゲームはゲス・ザ・ナンバーです。if ブロック内の print ステートメントはまったく出力されません。もちろん、出力されるべきだと思います。したがって、間違いを犯したため、一生それが何であるかを理解することはできません。評価段階で他の学生のプロジェクトをいくつか調べましたが、コードが間違っている理由がまだわかりません。

ゲームはこちらのブラウザで実行されますゲーム内のブラウザはこちら

ここに私が取り組んでいるコードがあります:

# Sanderson, Steven
# template for "Guess the number" mini-project
# input will come from buttons and an input field
# all output for the game will be printed in the console

import simplegui
import random
import math

# initialize global variables used in your code
secret = 0         # The secret number
guesses = 0        # The amount of guesses you will have left
guess_count = 0    # How many guesses you made
range_limit = 100  # The number range of the game


def init():
    # Here I reference the global variables because they
    # are now inside of a function being referenced locally
    global range_limit
    global secret

    # This following line limits the amount of guesses
    # the player can have based upon the given 
    # range_limit of the game
    guesses = int(math.ceil(math.log(range_limit,2)))

    # This following line of code generates a secret
    # number for the specified range of the game,
    # it has been initialized to a range of 100 to 
    # start the game
    secret = random.randrange(0, range_limit)

    # Converts range_limit to a string to print to console
    print "Play Guess The Number. The range is 0 to", + range_limit
    print "You have " +str(guesses) + " guesses for this game"
    print ""

# define event handlers for control panel

def range100():
    # button that changes range to range [0,100) and restarts
    global range_limit
    global secret
    global guesses
    range_limit = 100
    init()

def range1000():
    # button that changes range to range [0,1000) and restarts
    global range_limit, secret, guesses
    range_limit = 1000
    init()

def input_guess(guess):
    # main game logic goes here
    int_guess = int(guess)
    global guess_count
    global guesses
    global secret
    guesses += -1
    guess_count = guess_count + 1

    if int_guess == secret:
        print "You Win and did it in " +str(guess_count) + " guesses"
        print ""
        init()
    elif int_guess > secret:
        print "You guessed " +str(guess) + " guess lower"
        print "You have " +str(guesses) + " guesses left"
        print ""
    elif int_guess < secret:
        print "You guessed " +str(guess) + " guess higher"
        print "You have " +str(guesses) + " guesses left"
        print ""
    if guesses == 0:
        print "You ran out of guesses, the secret was " +str(secret)
        print ""
        init()


# create frame
frame = simplegui.create_frame("Guess The Number!", 200, 200)

# register event handlers for control elements
frame.add_button("Range [0, 100)", range100, 125)
frame.add_button("Range [0, 1000)", range1000, 125)
frame.add_input("Enter your guess here and press enter", input_guess, 125)

# start frame
frame.start()
init()

# I know my code is not the best, constructive criticisim in order to help me
# be a better coder is appreciated :)

これは、実行したばかりの出力例です。secretguess_count、 、 の順に出力guessesしました。

71
0
0
You guessed 25 guess higher
You have -1 guesses left

71
1
-1
You guessed 25 guess higher
You have -2 guesses left

71
2
-2
You guessed 25 guess higher
You have -3 guesses left

また、カウントがリセットされていないため、ボタンが押されたときに init() が機能していないように見え、頭をかきむしっています。init() も正しく動作しない可能性があります

4

1 に答える 1

5

行を追加すると

print repr(guess), type(guess), repr(secret), type(secret)
print guess == secret, guess > secret, guess < secret

分岐の直前に、次のifように表示されます:

'23' <class 'str'> 4 <class 'int'>
False False False

文字列を整数と比較しています.Python 3では与えられますTypeError: unorderable types: str() < int()が、Python 2では予期しない動作を静かに返します(メモリが機能する場合、クラスの名前に基づいていますが、とにかくそれを行うべきではないので、私は決して管理しません詳細を覚えておくために。) 具体的には:

>>> "47" < 200
False
>>> "47" < 47
False
>>> "47" < 2
False
>>> 100 < "23"
True
>>> 100 < "1"
True
>>> 100 < "-23"
True

ユーザー入力を整数に変換すると、次の問題から作業を開始できます:^)

You guessed 5
5 <class 'int'> 35 <class 'int'>
False False True
You guessed 5 guess higher
You have -1 left
于 2012-10-28T18:32:25.167 に答える