我正在为岩石剪刀纸游戏编写代码。但是当我运行它时,它会陷入无限循环。
问题发生在以下代码中。为什么这段代码导致任何输入值的无限循环? (我的python版本是3.5.0)
class Peoples(object):
def recept(self):
u = input('choose..r or s or p: ')
print('choice: ',{'r':'rock','s':'scissor','p':'p'}.get(u,'{} (wrong input)'.format(u)))
return {'s':0,'r':1,'p':2}.get(u,self.recept())
P=Peoples()
P.recept()
答案 0 :(得分:1)
因为get
的第二个参数无论最终是否由get
使用都会被执行。你应该把它分成多行,所以它只在必要时递归调用:
d = {'s':0,'r':1,'p':2}
if u in d:
return d[u]
else:
return self.recept()
但实际上,最好不要使用递归,因为在用户连续选择足够多次输入后,你会达到最大递归深度并崩溃。
def recept(self):
d = {'s':0,'r':1,'p':2}
while True:
u = input('choose..r or s or p: ')
print('choice: ',{'r':'rock','s':'scissor','p':'p'}.get(u,'{} (wrong input)'.format(u)))
if u in d:
return d[u]