我正在编写一个程序,询问两个用户的男孩或女孩名字以及他们是否喜欢他们。这是程序的开始,我创建了一个函数,所以如果他们不输入男孩或女孩,它会再次询问它们,以便程序可以正常运行。
user_name_class= BabyNames()
print "Let's get started!"
print "Who will user1 be and who will user2 be?"
name_user1 = raw_input("User1 = ")
name_user2 = raw_input("User2 = ")
print user_name_class.baby_namer(raw_input("Do you want boy or girl names? \n").lower())
class BabyNames():
def baby_namer(self, gender):
self.gender = gender
if 'b' not in gender or 'g' not in gender:
return self.start_wrong_input()
elif 'b' in gender:
test = raw_input("What round are you on? (1-{}) \n".format(str(len(boy_rounds))))
return boy(boy_rounds[test])
elif 'g' in gender:
test = raw_input("What round are you on? (1-{}) \n".format(str(len(girl_rounds))))
return girl(girl_rounds[test])
else:
pass
def start_wrong_input(self):
x = BabyNames()
print "You need to put boy or girl to move on!"
re_try = raw_input("Do you want boy or girl names? \n").lower()
if 'g' in re_try:
return x.baby_namer('girl')
elif 'b' in re_try:
return x.baby_namer('boy')
else:
print "You need to put boy or girl to move on!"
我知道创建这个类可能不是必需的,但我刚刚了解了它们,所以我尝试将它们合并到我的代码中。 发生的事情是"你想要男孩还是女孩?"如果您输入除此之外的任何其他内容,它会正确调用该函数并重新询问它,但是当您放置男孩或女孩时,它会循环并继续询问问题而不会破坏。为什么会发生这种情况,让我知道我是否需要详细说明其他内容!(ps我是初学者,所以它可能不是pythonic,但我正在研究它!)
答案 0 :(得分:0)
使用if 'b' not in gender and 'g' not in gender
,使用或始终返回start_wrong_input
方法,因为如果性别为girl
b
不在girl
且性别为男孩g
不在boy
,因此if 'b' not in gender or 'g' not in gender:
将始终评估为True
class BabyNames():
def baby_namer(self, gender):
if 'b' not in gender and 'g' not in gender:
return self.start_wrong_input()
elif 'b' in gender:
test = raw_input("What round are you on? (1-{}) \n".format(str(len(boy_rounds))))
return boy(boy_rounds[test])
elif 'g' in gender:
test = raw_input("What round are you on? (1-{}) \n".format(str(len(girl_rounds))))
return girl(girl_rounds[test])
else:
pass
def start_wrong_input(self):
print "You need to put boy or girl to move on!"
re_try = raw_input("Do you want boy or girl names? \n").lower()
if 'g' in re_try:
return self.baby_namer('girl') # use self.baby_namer, you don't need to use x = BabyNames()
elif 'b' in re_try:
return self.baby_namer('boy')
else:
print "You need to put boy or girl to move on!"
答案 1 :(得分:0)
代码中的错误位于baby_namer
:
if 'b' not in gender or 'g' not in gender:
你可能想要一个'和'那里,如果它不是男孩或者它不是女孩你会失败。您可以尝试输入'boyg'值......
除此之外,你不应该使用递归调用来制作循环,这很难阅读!使用正确的while
循环。
答案 2 :(得分:0)
您已创建了名为mutual recursion functions
的内容功能:baby_namer()
调用start_wrong_input()
,然后start_wrong_input()
回拨start_wrong_input()
。你让自己无限循环。