2017-10-19 49 views
0

我试图用Python编程21点牌游戏。 在玩家类中,我想定义一个循环,要求玩家决定是“打”还是“站”(二十一点规则)。除非输入是正确的(无论是“S”还是“H”),循环需要循环,直到玩家输入其中一个选项。错误处理所需的输入

这是我为这个特定的部分代码:

while True: 
    try: 
     D = input('What is your decision, stand or hit? [press S for stand and H for hit]: ') 
     if D in ['S', 'H'] is False: 
      1/0 
    except: 
     print('Incorrect input, please try again (S for stand and H for hit)!') 
     continue 
    else: 
     if D == 'S': 
      print('OK, you decided to stand!') 
     else: 
      print('OK, you decided to hit. You will receive a 3rd card!') 
     break 

这样的想法是,除非决策是正确的(“S”或“H”),将创建一个错误,但到目前为止,代码无法正常工作呢...我认为有一个小毛刺......

任何建议? 亲切的问候,

大号

+0

你知道吗,例如['S','H']中的'Foo'是False'评估结果?它可能让你感到惊讶。 – jonrsharpe

+0

除了以外,你还期待什么?你应该期待尝试除块 –

回答

1

你应该写:

if D not in ['S', 'H']: 

而且整个代码会更短,更易读没有例外:

while True: 
    D = input('What is your decision, stand or hit? [press S for stand and H for hit]: ') 
    if D not in ['S', 'H']: 
     print('Incorrect input, please try again (S for stand and H for hit)!') 
     continue 
    else: 
     if D == 'S': 
      print('OK, you decided to stand!') 
     else: 
      print('OK, you decided to hit. You will receive a 3rd card!') 
     break 
1

没有必要的例外,你可以这样做:

while True: # infinite loop 
    D = input('What is your decision, stand or hit? [press S for stand and H for hit]: ') 
    if D == "S": 
     #do some 
     break 
    elif D == "H": 
     # Hit some. 
     break 
    else: 
     print('Incorrect input, please try again (S for stand and H for hit)!') 
     break 
+0

谢谢,这是更清洁! – mcluka

+0

@mcluka欢迎您!不要担心倒票...有时候,即使他们错了,你也可以控制他人的想法 –

+0

@mcluka不用担心,有时我也不明白,但是当我看到类似的东西时,我尝试修复它,所以我投了你的问题,因为它是一个很好的例子,简短的代码示例,显示的努力,我的意思是,它拥有一切......我很高兴我可以帮助你,不要忘记接受,如果它是帮助,我一直都很喜欢帮助 –