我还在学习如何在课堂上工作。我正在尝试使用自我方法(训练练习)从用户那里获得用户输入。
这是我的代码(我只想获取用户输入并显示它,但使用方法)
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()
我基本上只是想让用户输入他们的名字,然后将他们的名字作为一个对象,所以如果我以后在程序中需要它,我可以称之为
答案 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)
我会说您的代码中存在一些问题:
首先你需要一个好的输入周期,我将使用一个简单的输入周期:
while 1: # infinite loop
name = raw_input("Name: ")
if name == "":
print "Ops! Retry"
else:
print "Hello", name
break # this will break the loop
让我们把这个循环放在你的班级里面:
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
根据我的理解,您希望将用户提供的名称存储为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
。
如果您想将该示例代码放在脚本中,请按照以下步骤操作:
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。