2016-07-03 3 views
-1

変数TOTAL_TRIを追跡したいと思います。 TOTAL_TRIには、ゲームから正しく答えられた質問の数が含まれています。 statisticsが呼び出されると、その値を保存して関数statisticsに渡す必要があります。本質的に、プレイヤーはゲームpy_gameをプレイします。TOTAL_TRIは、彼らが得た質問の数を保持し、プレイヤーが関数statisticsを呼び出したときに、彼らが得た質問の数が表示されますか?私はしばらくの間これを驚かせてきましたが、大きな進展はありませんでした。何か案は?どのようにPythonのグローバル変数を追跡しますか

P.S. メニュー内の他のゲームはまだ実装されていませんが、同じ再生回数で正しい数の質問を保存し、プレーヤーにstatistics種類のものを呼び込ませます。グローバル変数を使用しての試みで更新

#py_game------------------------------------------------------------------------ 
import random 
from random import choice 
from random import randint 
TOTAL_TRI = 0 
def py_game(): 
    for k in range (1,2): 
     print('\nPractice Problem', k, 'of 2') 
     min_pyramid_size = 3 
     max_pyramid_size = 5 
     total_chars = 0 
     num_rows = random.randint(min_pyramid_size, max_pyramid_size) 
     for i in range(num_rows): 
      x = ''.join(str(random.choice('*%')) for j in range(2*i+1)) 
      print(' ' * (num_rows - i) + x) 
      total_chars = total_chars + x.count('%') 
     try: 
      user_answer = int(input('Enter the number of % characters' + \ 
            ' in the pyramid: ')) 
     except: 
       user_answer = print() 
     if user_answer == total_chars: 
      print('You are correct!') 
     else: 
      print("Sorry that's not the correct answer") 
    points = 0 
    global TOTAL_TRI 
    for k in range (1,2): 
     print('\nProblem', k, 'of 10') 
     min_pyramid_size = 3 
     max_pyramid_size = 5 
     total_chars = 0 
     num_rows = random.randint(min_pyramid_size, max_pyramid_size) 
     for i in range(num_rows): 
      x = ''.join(str(random.choice('*%')) for j in range(2*i+1)) 
      print(' ' * (num_rows - i) + x) 
      total_chars = total_chars + x.count('%') 
     try: 
      user_answer = int(input('Enter the number of % characters' + \ 
            ' in the pyramid: ')) 
     except: 
       user_answer = print() 
     if user_answer == total_chars: 
      print('You are correct!') 
      points +=1 
     else: 
      print("Sorry that's not the correct answer") 
     TOTAL_TRI = points 


#------------------------------------------------------------------------------ 
def statistics(points): 

    print('\nPyramid Game---------------------------') 
    incorrect = 10 - (points) 
    print ('You answered', points, 'questions correctly') 
    print ('You answered', incorrect, 'questions incorrectly') 



#Main Menu-------------------------------------------------------------------------- 

def main_menu(): 
    calculation_game = print("Enter 1 for the game 'Calculation'") 
    bin_reader = print("Enter 2 for the game 'Binary Reader'") 
    trifacto_game = print("Enter 3 for the game 'Trifacto'") 
    statistics = print("Enter 4 to view your statistics") 
    display_data = print("Enter 5 to display data") 
    save_game = print("Enter 5 to save your progress") 
    user_input = int(input('Make your selection: ')) 
    if user_input == 1: 
     calculation() 
    if user_input == 2: 
     binary_reader() 
    if user_input == 3: 
     py_game() 
    if user_input == 4: 
     statistics(TOTAL_TRI) 
    if user_input == 5: 
     save_game() 
    if user_input != 1 or 2 or 3 or 4 or 5: 
     print('invalid input') 
     print('\n') 
     main_menu() 



main_menu() 

答えて

1

は、公共のスコープ内の変数TOTAL_TRI = 0を宣言します。あなたがglobalキーワードを使用し、機能にアクセスしたいときはいつでも:

TOTAL_TRI = 0 

def some_function(...): 
    global TOTAL_TRI 
    ... # do something 

あなたはまだglobalキーワードを使用せずにこれを行うことができますが、あなたは非表示になり、同じ名前のローカル変数を宣言するリスクをTUNあなたが何をしているかに応じて、グローバルなものです。

EDIT:の内部にという関数を宣言することもできますが、他のすべての関数でその変数を表示するには、定義されている同じ関数内でグローバルとして宣言する必要があります同じように。

+0

私はあなたが言ったことを試しましたが、構文エラーが戻ってきただけです。私が間違っていることを知っていますか?私は更新を投稿します。 – kjf545

+0

あなたはエラーを投稿できますか?グローバル宣言は、関数の先頭で行う必要があります。 –

+0

右、関数の先頭に移動し、エラーはなくなりました。しかし、今私がコードを実行すると、TOTAL_TRIの値は変更されていません。実際、関数py_gameはTOTAL_TRIの存在を認識していません。私は検証のためにこのステッパーを使いました:http://www.pythontutor.com/visualize.html#mode=edit。 – kjf545

関連する問題