1

簡単な数推測プログラムを作成しようとしています。この特定のプログラムでは、python はユーザーが考えている数字を推測していますが、その逆ではありません。

私のコードは UnboundLoalError を返します。

また、すべてが長すぎて面倒に思えます。どうすれば短くできますか?

ありがとうございました。

# Guesses a number

from random import randint
number = ""

def numberGuesser():
    while True:
        print "Think of a number between 1 and 50"
        raw_input("Hit a key when ready")
        number = randint(1,50)
        answer = raw_input("Is your number: %d?. y/n> " % number)
        if answer == 'y':
            print "Great!"
            raw_input("Hit a key to exit.")
        elif answer == 'n':
            greater_or_smaller()
        else:
            print "Please type y or n"



def greater_or_smaller():
    while True:
        greater_or_smaller = raw_input("Is\
 your number greater or smaller than %d? g/s> " % number)
        if greater_or_smaller == 'g':
            number = randint(number, 50)
            answer = raw_input("Is your number %d? y/n> " % number)
            if answer == 'y':
                print "Hooray!"
            elif answer == 'n':
                greater_or_smaller()

        elif greater_or_smaller == 's':
            number = randint(1, number)
            answer = raw_input("Is your number %d? y/n> " % number)
            if answer == 'y':
                print "Hooray!"
            elif answer == 'n':
                greater_or_smaller()


numberGuesser()
4

2 に答える 2

1

関数が呼び出しでgreater_or_smaller変数numberを使用し、後でそれに割り当てるため、このエラーが発生します。関数の先頭に置くと、エラーはなくなります。(ただし、ここで得ている他のアドバイスに耳を傾けてください)。raw_inputglobal number

説明:グローバル変数を割り当てたり変更したりするには、最初にそれをグローバルに宣言する必要があります。(関数内のどこにも代入しない限り、グローバル変数を宣言せずにグローバル/非ローカル変数を使用できます)。

于 2013-06-21T10:28:04.983 に答える
1

これ :

        if greater_or_smaller == 'g':
            number = randint(number, 50)
            answer = raw_input("Is your number %d? y/n> " % number)
            if answer == 'y':
                print "Hooray!"
            elif answer == 'n':
                greater_or_smaller()

        elif greater_or_smaller == 's':
            number = randint(1, number)
            answer = raw_input("Is your number %d? y/n> " % number)
            if answer == 'y':
                print "Hooray!"
            elif answer == 'n':
                greater_or_smaller()

になり得る :

        if greater_or_smaller in ['g','s']:
            number = randint(number, 50) if greater_or_smaller == 'g' else randint(1, number)
            answer = raw_input("Is your number %d? y/n> " % number)
            if answer == 'y':
                print "Hooray!"
            elif answer == 'n':
                greater_or_smaller()

また、期待される回答のリストに回答が確実に含まれるように、ユーザーとの対話を処理するための小さな関数を作成する必要があります。

何かのようなもの :

def get_input(prompt_text, valid_options):
    x = raw_input(prompt_text)
    while x not in valid_options:
        print x, "is not a valid value. Expected are :", valid_options
    return x
于 2013-06-21T10:17:44.837 に答える