2016-07-03 26 views
0
from random import randint 

count = 0 
Validation = False 

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     return "First time right! Genius?" 
     Validation = True 

    elif int(Guess) == Number and count == 2: 
     return "Correct. Second time, nice!" 
     Validation = True 
    elif int(Guess) == Number and count < 4: 
     return "Correct. Good job." 
     Validation = True 
    elif int(Guess) == Number and count > 3: 
     return "Correct. Took you long enough." 
     Validation = True 
    else: 
     return "Wrong! Try again " 

while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    count += 1 
else: 
    TryAgain = input("Would you like to try again? y/n \n") 

問題は、ユーザーが正しい番号を推測するときです。検証はTrueにする必要があります。したがって、whileループはループを停止します。しかし、プレイヤーが正しい数を推測すると、変数の検証はTrueになりません。関数内の変数の変更

+0

グローバルにプレフィックスを付けない限り、検証はローカルとみなされます。グローバル検証を関数から参照したい場合、それを次のように宣言する必要があります:関数内の 'グローバル検証 '。この方法で、値を変更すると永続化されます –

+0

Hmm。グローバルに追加するときは、関数自体、上の変数宣言、またはwhileループでそれを行います。それは私に悪い構文エラーを与える。 – Soundwave

+0

コードのもう1つの大きな問題は、検証フィールドを設定する前に文字列を返し、関数を効果的に破棄することです。 –

答えて

0

Pythonの大域変数はややこしいですが、ファイルの先頭に変数を宣言するだけでは不十分です。また

、最後の問題はしばらくのロジックで、入力し、他のくぼみ

をraw_input使用して代わりのための補正を参照してください。この変数

を設定する前に終了させる機能を引き起こし、あなたが検証値を設定する前に、あなたが値を返す保ちます

グローバル変数への読み取り専用アクセスは期待どおり機能しますが、関数内の値を変更するにはさらに1ステップが必要な場合は、グローバル変数をグローバルとして宣言する必要があります。あなたのケースでは:

if int(Guess) == Number and count < 1: 
    Validation = True 
    return "First time right! Genius?" 

は、すべてのif文のためにこれを行います

def generateNumber(): 
    Number = randint(1, 10) 
    return Number 

def checkNumber(Guess): 
    global Validation #<-- this instructs Python to use the global variable 
    Number = generateNumber() 
    if int(Guess) == Number and count < 1: 
     Validation = True 
     return "First time right! Genius?" 

    elif int(Guess) == Number and count == 2: 
     Validation = True 
     return "Correct. Second time, nice!" 

    elif int(Guess) == Number and count < 4: 
     Validation = True 
     return "Correct. Good job." 

    elif int(Guess) == Number and count > 3: 
     Validation = True 
     return "Correct. Took you long enough." 

    else: 
     return "Wrong! Try again " 

while Validation == False: 
    Guess = input("Please guess a number between 1 to 10: ") 
    print (checkNumber(Guess)) 
    count += 1 
    if (Validation): 
     if (raw_input("Would you like to try again? y/n \n") == "y"): 
      count = 0 
      Validation = False 
     else: 
      break 
0

あなたはこのように、メソッドから返さ検証前真に設定する必要があります。

0

私はあなたのコードに2(半)問題を発見:

  1. としてはIshay Peledによって指摘、あなたが
  2. 検証をグローバルにする必要がありあなたの「戻る」文は、あなたは前に位置しています

ない「他」ここで更新されたコードがありますしていない「ながら」が
  • 「検証」の値を変更
    from random import randint 
    
    count = 0 
    Validation = False 
    
    def generateNumber(): 
        Number = randint(1, 10) 
        return Number 
    
    def checkNumber(Guess): 
        global Validation 
        Number = generateNumber() 
        if int(Guess) == Number and count < 1: 
         Validation = True 
         return "First time right! Genius?" 
    
        elif int(Guess) == Number and count == 2: 
         Validation = True 
         return "Correct. Second time, nice!" 
        elif int(Guess) == Number and count < 4: 
         Validation = True 
         return "Correct. Good job." 
        elif int(Guess) == Number and count > 3: 
         Validation = True 
         return "Correct. Took you long enough." 
        else: 
         return "Wrong! Try again " 
    
    
    while Validation == False: 
        Guess = input("Please guess a number between 1 to 10: ") 
        print (checkNumber(Guess)) 
        print "validation: %s" % str(Validation) 
        count += 1 
    
    TryAgain = input("Would you like to try again? y/n \n") 
    
    0

    グローバル変数の問題以外に、別の修正プログラムを作成する必要があります。 Validation = Trueに対するすべての代入は、「return」ステートメントの後に表示されます。 Validation = Trueは決して実行されません!それらを実行する前に関数を終了します。返す前に 'Validation = True'を設定してください。 Ishayが述べたように、あなたはまだグローバル宣言をする必要があります。

    関連する問題