如何在Method(python)中获取用户输入

时间:2012-01-28 00:35:19

标签: 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()

我基本上只是想让用户输入他们的名字,然后将他们的名字作为一个对象,所以如果我以后在程序中需要它,我可以称之为

2 个答案:

答案 0 :(得分:1)

在ask方法中,每次写入name时,都应为self.name

例如:

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

在您的主要功能中,object1.createname()会出错。它期待两个参数。函数外部的隐式调用object1和内部self正在传递。但是,您没有为name提供值。

object1.createname("Joe")

这些行仅在name为空字符串时执行。所以print '\n'会做同样的事情。离开它只会在每一行上创建一个“Name:”,直到给出有效输入。

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

考虑定义 init 方法,该方法采用名称。这样,您可以在创建类时设置一个。你也可以给出一个默认值,它不会影响你当前的调用(它是可选的,所以如果你想稍后给出一个名字,你可以。

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

答案 1 :(得分: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