2012-02-11 11 views
0

私は以下の関数を書いていますが、変数はinput_nameです。ユーザはinput_nameに割り当てられた値を入力します。私はinput_nameに機能の外部からアクセス可能にするための最善の方法を知りたい。関数内でグローバル変数を変数として定義すると、その変数が関数の外部で使用できることがわかります。しかし、この場合、変数は実際には関数のパラメータなので、グローバル変数として定義する方法はわかりません。私はこれで任意の助けに感謝、以下の質問にコードを見つけてください。グローバル変数としてのPython関数パラメータ

def input(input_name, prompt): 
    while True: 
     data = raw_input(prompt) 
     if data: 
      try: 
       input_name = int(data) 
      except ValueError: 
       print 'Invalid input...' 
      else: 
       if input_name >= 0 and input_name < 100: 
        print 'Congratulations' 
        break 
       input_name = 'Please try again: ' 
     else: 
      print 'Goodbye!' 
      break 

month = 0 
day = 0 
year = 0 
century = 0 

input(month, "Please enter the month (from 1-12, where March is 1 and February is 12): ") 
input(day, "Please enter the day (from 1-31): ") 
input(year, "Please enter the year (from 0 - 99, eg. 88 in 1988): ") 
input(century, "Please enter the century (from 0 - 99, eg. 19 in 1988): ") 

A = month 
B = day 
C = year 
D = century 
+1

注意: 'input_name = 'もう一度やり直してください:'' - おそらく、 'input_name'ではなく' prompt'を設定したいと思うかもしれません。 – poke

答えて

10

を最も簡単な方法は、値を返し、関数外で割り当てるには、次のようになります。

def my_input(prompt): 
    #.. blah blah.. 
    return the_value 

month = my_input("Please enter the month") 
# etc. 
+1

+1関数から情報を取得する方法は、戻り値を使用する方法です。なぜそんなに多くの人々がそのような単純な概念に抵抗しているのか理解できません。 –

+2

@KarlKnechtel彼らはそれに抵抗しているわけではありません。私は、多くのPythonの初心者がreturn文を実際に理解していないことがわかりました。 REPLはデフォルトで戻り値を出力するため、印刷物とは違うものもあります。 Guido van Rossumによって投稿されたこのディスカッションを参照してください。https://plus.google.com/115212051037621986145/posts/NJnmxZkrE4J 私は、関数が単純なコードブロックやラベルであり、入力が与えられたときに何かを返すプロシージャではないと思う。その基本的なプログラミングの概念は、ほとんどのPythonチュートリアルでは教えられていません。 – Anorov

+0

ここで助けてくれてありがとう。ですから、関数内で 'return input_name'を実行すると、関数の外部で' print input_name'と言うことができますか?現在のところ、プログラムは0を返すだけです(変数を0に初期化したため)。 –

1

あなたがしたいのかおそらく悪い習慣です。 input機能からinput_nameを返すだけです。

def input(param1,param2): 
    return value 

value = input(param1,param2, ...) 
3

他の人がこのような何かを言っている:

def input(prompt): 
    return value 

value = input(param1,param2, ...) 

をそして、それはあなたが本当にやって欲しいものだが、ちょうどので、あなたが知っている、あなたがグローバル変数を変更するための)(グローバルを使用することができます。

def input(input_name, prompt): 
    globals()[input_name] = value 
+0

ありがとう、Elijaheac。トムが求めていたものではありませんが、あなたの反応は私にとって非常に有用でした。私が間違っている場合は私を修正してください。しかし、これは、関数の引数と同じ名前を持つモジュールの変数の値を設定する良い方法だと思います。私は引数とモジュールの変数の名前を変えてやっていますが、今からあなたの提案を使用します。 – bmello

関連する問題