2012-01-28 16 views
2

私はまだクラス内での作業方法を学んでいます。私は自分のメソッド(トレーニング演習)を使用してユーザーからユーザーの入力を取得しようとしています。ここでメソッド内のユーザー入力を取得する方法(Python)

私は基本的には入力に自分の名前をユーザーに尋ね、その後、自分の名前を作りたい私のコードは

import os 
import time 

class Programs: 
     def basicintro(self): 
       print "Welcome to the BMR Calculator" 
       time.sleep(1)  
     def createname(self,name): 
       self.name = name 
     def ask(self): 
       while name == "": 
         name = raw_input("Name:") 
         if name != "": 
           print "Hello", name 
           time.sleep(1) 
         else: 
           print name     
def main(): 
     object1 = Programs() 
     object1.basicintro() 
     object1.createname() 
     object1.ask()  
     raw_input("\n\nPress enter to exit.")   
main() 

(私は、ユーザー入力を取得しますがメソッドを使用して、それを表示したい)でありますオブジェクトなので、後でプログラムで必要な場合は、私はそれを呼び出すことができます

+3

ご質問はありますか? – Amber

+0

あなたはどんな問題に直面していますか? – RanRag

+0

setattr(self、func_name、function)を使用します。 –

答えて

1

私はのカップルがあることを言うだろうあなたのコード内の問題:

  1. まずあなたが良い入力サイクルを必要とする、私はシンプルなものを使用します:

    while 1: # infinite loop 
        name = raw_input("Name: ") 
        if name == "": 
         print "Ops! Retry" 
        else: 
         print "Hello", name 
         break # this will break the loop 
    
  2. のは、あなたのクラス内このサイクルを入れてみましょう:

    私は、あなたがあなたのProgramクラスインスタンスのの属性として、ユーザが提供する名前を格納したい理解して何のため
    class Programs: 
    
        def ask(self): 
         while 1: # infinite loop 
          name = raw_input("Name: ") 
          if name == "": 
           print "Ops! Retry" 
          else: 
           print "Hello", name 
           break # this will break the loop 
    
  3. class Programs: 
    
        def __init__(self): # class constructur (called at creation time) 
         self.name = "" # the default name is the empty string 
    
        def ask(self): 
         while 1: # infinite loop 
          name = raw_input("Name: ") 
          if name == "": 
           print "Ops! Retry" 
          else: 
           print "Hello", name 
           break # this will break the loop 
    
         self.name = name # assign to self.name the value name 
    

    例:

    >>> prog = Programs() 
    >>> prog.name 
    '' 
    >>> prog.ask() 
    Name: Rik 
    Hello Rik 
    >>> prog.name 
    'Rik' 
    

    として、メソッド__init__がimmediatlyと呼ばれ、空の文字列がprog.nameに割り当てられました。

  4. あなたのスクリプト内でそのサンプルコードを入れたい場合は、これはそれを行う方法です:

    class Programs: 
    
        def __init__(self): # class constructur (called at creation time) 
         self.name = "" # the default name is the empty string 
    
        def ask(self): 
         while 1: # infinite loop 
          name = raw_input("Name: ") 
          if name == "": 
           print "Ops! Retry" 
          else: 
           print "Hello ", name 
           break # this will break the loop 
    
         self.name = name # assign to self.name the value name 
    
    
    if __name__ == '__main__': 
        prog = Programs() 
        prog.ask() 
        raw_input("\n\nPress enter to exit.") 
    

    したい場合は、関数内でそのコードを置くことができますが、私が見せたかったですif __name__ == '__main__':の使用。この井戸の情報はanswered questionです。

+0

ご連絡ありがとうございます。今や意味がある、私はちょっと__init__を投げ始めるのを恐れていた。私はあなたがしたことを理解しています。私は一般的な考えを持っていたと思うけど、私の配置は外されていた。 – hijaked79

+0

@ hijaked79:どうぞよろしく!あなたが(私はあなたがこの1つを見つけることを推測するように)有用である答えを見つけるとき、あなたはそれを高く評価することもできます。 –

1

質問メソッドでは、nameが書き込まれるたびにself.nameになるはずです。例えば

:あなたの主な機能には

while name == "": 
# to 
while self.name == "": 

object1.createname()はエラーになります。 2つのパラメータが必要です。関数の外側にあるobject1と暗黙のうちにselfが渡されています。ただし、nameの値を指定することはできません。

object1.createname("Joe") 

名が空白文字列であるとき、これらの行にのみ実行されます。したがって、print '\n'は同じことを行います。それを残しておくと、有効な入力が得られるまで各行に "Name:"を1つだけ作成します。

else: 
    print self.name # "self." added 

は名前を取りINIT方法を定義することを検討してください。そうすれば、クラスが作成されたときにクラスを設定できます。後で名前を与えたいので、もしあなたが、あなたの現在の呼び出しには影響しませんデフォルト値を与えることができます(それはあなたができる、オプションです。

def __init__(self, name="SomeDefaultName"): 
    pass # Content here 
+0

私はすでに編集した3倍の情報を編集して追加しました。 – FakeRainBrigand

+0

助けてくれてありがとう、私は__init__の詳細を読むつもりです。 – hijaked79

関連する問題