我正在尝试raw_input使用以下代码检查这是三个选项之一的选择:
def selectDiff():
upperbound = 0
difficulty = ['easy', 'medium', 'hard']
diff = raw_input(' or '.join(difficulty)).lower()
if diff in difficulty:
if diff == 'easy':
upperbound = 20
elif diff == 'medium':
upperbound = 25
elif diff == 'hard':
upperbound = 30
else:
print "Please select easy, medium or hard\n"
selectDiff()
return upperbound
Run Code Online (Sandbox Code Playgroud)
如果用户从难度列表中输入值,则['easy','medium','hard']该函数按照我的意愿工作,但如果用户首先输入未包含在列表中的值,则当他们最终输入列表中找到的值时,该变量upperbound将返回为0.我试过移动return语句,但结果是相同的,或者由于在变量被拒绝之前引用变量而得到错误.
是否有可能改变我的方法以产生所需的行为,还是应该使用另一种方法?
我同意在这里使用循环可能更有意义,但如果你想继续使用递归,只需分配upperbound内部的结果selectDiff.
def selectDiff():
difficulty = ['easy', 'medium', 'hard']
diff = raw_input(' or '.join(difficulty)).lower()
if diff in difficulty:
if diff == 'easy':
upperbound = 20
elif diff == 'medium':
upperbound = 25
elif diff == 'hard':
upperbound = 30
else:
print "Please select easy, medium or hard\n"
upperbound = selectDiff() # Use the returned value
return upperbound
Run Code Online (Sandbox Code Playgroud)
另外,您还可以使用a dict替换elif链并使其更容易扩展.
def selectDiff():
difficulty = {
'easy': 20,
'medium': 25,
'hard': 30,
}
diff = raw_input(' or '.join(difficulty)).lower()
try:
return difficulty[diff]
except KeyError:
print "Please select easy, medium or hard\n"
return selectDiff()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
188 次 |
| 最近记录: |