2012-01-28 80 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 2012-01-28 00:42:36

+0

所以你面臨什麼問題? – RanRag 2012-01-28 00:42:51

+0

使用setattr(self,func_name,function) – 2012-01-28 06:27:27

回答

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. 讓我們把這個週期的類中:

    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. 對於我明白你要存儲用戶提供爲您Program類實例的屬性名稱,因此:

    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__被立即調用並將空字符串分配給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 2012-01-28 05:17:43

+0

@ hijaked79:不客氣!當你找到一個有用的答案時(比如我認爲你找到了這個答案),你也可以對它投票,這將不勝感激:) – 2012-01-28 09:29:48

1

在詢問方法中,每次寫入name時,它應該是self.name

例如:

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

在你的主要功能,object1.createname()會給出一個錯誤。它期待着兩個參數。這個隱含的,名爲object1的函數以外,和self裏面,正在被傳遞。但是,您不會爲name提供價值。當名稱是一個空字符串

object1.createname("Joe") 

這些線僅執行。所以print '\n'會做同樣的事情。將它排除在外只會在每一行上創建一個「Name:」,直到給出有效的輸入。

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

考慮限定INIT方法,它需要一個名稱。這樣你可以在創建類時設置一個。你也可以給一個默認值,這將不會影響您當前調用(它是可選的,所以如果你想以後給一個名字,就可以了。

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

我編輯並添加了3倍的信息比我已經有。 – FakeRainBrigand 2012-01-28 00:50:11

+0

感謝您的幫助,我將更多地閱讀__init__。 – hijaked79 2012-01-28 17:54:54

相關問題