[英]How to have user input index selection of object in list with specific criteria
我试图弄清楚如何让用户输入列表中对象的索引号。 我的最终目标是显示您的法术书中按索引号排序的法术列表。 然后,我希望用户能够输入索引号来选择该咒语并对其执行功能。 这是一个简单的示例:
(咒语是对象)
spells = [spell1(), spell2()]
print(spells.index(Spell),Spell.name)
应显示:
0 spell1
1 spell2
x = input('Input number of spell')
print(spells[int(x)].description)
因此,通过在列表中输入对象的索引号,我检索了它的描述。 我已经得到了功能本身的工作。 但是,我很难设置规则,以使其不接受列表中可用索引以外的任何输入。 在此示例中,只有0和1应该是可用输入。 我还希望“ p”选项返回上一屏幕。
如果要使用混合类型输入,则需要将所有内容都视为字符串并分别处理。 一个简单的技巧是,您可以先检查字母,然后尝试将其他内容强制转换为int。 由于用户可以输入其他字母,因此这并不是完全可以证明的。 最有效的方法可能是在转换为int时使用try catch语句。
因此,您需要满足两个条件: x
必须是有效数字,并且必须在拼写列表的范围内。
您可以将其包装在适合您应用程序的任何控制流程中。 例如,您可以重新提示用户,直到他们提供有效的输入为止:
def validate_spell_index(spell_list, i):
return i.isdigit() and int(i) in range(len(spell_list))
x = input('Spell index> ')
while not validate_spell_index(spells, x):
print('Please give a number between 0 and {}.'.format(len(spells) - 1))
x = input('Spell index> ')
print(spells[int(x)].description)
演示 (对于任何拼写错误的咒语,我深表歉意)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.