繁体   English   中英

如何让用户输入具有特定条件的列表中对象的索引选择

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM