2012-01-28 78 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

相关问题