2017-09-24 4 views
0

文字列を含む別の変数に設定しようとしているとき:game_startが呼び出されるととユーザ入力'easy'変数quiz_paragrapheasy_paragprahはなぜ変数の設定自体は「理論的には

の値を取る必要があります実際には:quiz_paragraphの値は、Iがuser_difficultyが適切に設定されていることを確認することができる"

に設定され、に適切'easy'を供給されています3210。 ifステートメントは実行されますが、quiz_paragraphの値は変更されません。

私はここで何が欠けているのか教えていただけますか?

# Easy Paragraph 
easy_paragraph = '''\n___1___ is a programming ___2___ used to solve simple and complex problems. ___1___ like 
many languages can be used to display a message to a user using ___3___. Try it sometime. 
To display this common message by typing ___3___ '___4___ World!' \n''' 

# Init Variables 
user_difficulty = "" 
quiz_paragraph = "" 

# Ask user difficulty 
def ask_difficulty(): 
    user_difficulty = raw_input("What difficulty level would you like? ") 
    return user_difficulty 

# Difficulty sets returned Paragraph 
def set_difficulty(difficulty): 
    if difficulty == "easy": 
     quiz_paragraph = easy_paragraph 
     return quiz_paragraph 
    else: 
     print '''Sorry, that is not a valid choice.''' 

# Start the game 
def game_start(): 
    set_difficulty(ask_difficulty()) 
    print quiz_paragraph 

# Game Start Test 
game_start() 
+0

はなぜゼロの理由とその人downvote質問が与えられているのですか?あなたは彼らが私たちが間違っていたことを学ぶことを望むと思いますか? –

+3

あなたの有権者ではないが、1)謝罪の段落を取り除く。これは、同様の問題を抱える将来の訪問者やあなたの質問に答える可能性のある人々に役立つ情報を追加しないためである。 2)このサイトや他のサイトで同様の質問を検索して得られた具体的な結果を表示することで、質問を改善することができます。私は「どこでも検索して何も見つけられませんでした」などの行を捨てることについては言及していませんが、やはり***具体的な***結果です。このサイトでは、尋ねるための事前検索*を行い、高い基準を設けています。 –

+3

また、賛成票や賛否票を掲示する際には、誰かがコメントする必要はありません。このトピックについての詳細は、[メタサイト](https://meta.stackoverflow.com/questions/261173/how-do-weavi-avoid-downvotes-without-a-comment)を参照してください。多くの質問を受けると –

答えて

2

スコープに問題があるようです。

set_difficultyの中の変数quiz_paragraphと同じではありません。現在同じ名前を使用していますが、set_difficultyの名前をfooに変更すると同じ結果になります。

「グローバル」quiz_paragraphは、set_difficultyによって返された値、またはより良い別のローカル変数game_startによって返される値に設定する必要があります。つまり、

def game_start(): 
    quiz_paragraph = set_difficulty(ask_difficulty()) 
    print quiz_paragraph 

または

def game_start(): 
    my_difficulty = set_difficulty(ask_difficulty()) 
    print my_difficulty 
+0

ありがとうございます。私は、グローバル/ローカルが要因であることに気付きませんでした。私が理解していることを確認するための簡単な質問です。だから、関数内の深い単一の「レベル」以上の変数はローカル変数になりますか?ですから、グローバル変数を変更したいのであれば、関数/ループ/などの最初の "層"でそれをやります。 –

+1

正しい。ルールのクイックダウンについてはhttps://stackoverflow.com/a/292502/1290118をご覧ください。 – jhenderson2099

+0

もう一度ありがとうございます。あなたの騒ぎを助けてくれてありがとう。今読んでください。 –

関連する問題