【问题标题】:Accessing Dictionary with Raw Input使用原始输入访问字典
【发布时间】:2012-08-14 18:59:59
【问题描述】:

我正在尝试让用户输入 1、2、3、4、5、6。 然后让该整数与我字典中的字符名称对齐。

characters = {
'Stark': '1',
'Greyjoy': '2',
'California': '3',
'Whitewalkers': '4',
'Knights Watch': '5',
'Dalthraki': '6'
 }   

print 'Type 1 for Stark'
print 'Type 2 for Greyjoy'
print 'Type 3 for Lannister'
print 'Type 4 for Whitewalkers'
print 'Type 5 for Knights Watch'
print 'Type 6 for Dalthraki' 
choice = raw_input("> ")
if choice in characters:
    print 'You\'ve selected', choice 
else:
    splash()

我想让我的脚本在用户输入 1 后打印“你选择了 Stark”。 感谢您的帮助

【问题讨论】:

  • 为什么不将数字映射到角色名称?
  • 这个问题根本不重要,但它是“White Walkers”、“Night's Watch”和“Dothraki”。
  • @F.J.由于 Dothraki 没有本地脚本,我怀疑他们会注意到。 :^) user1598939:对于奖励积分,在您反转字典之后,您可以循环遍历字典的键和值,这样您就不必对所有这些打印语句进行硬编码。
  • @DSM 我将为 dict 中的每一行尝试另一个 for 循环,并自行打印,而无需我打印每一行。感谢您的想法

标签: python loops if-statement dictionary raw-input


【解决方案1】:

你有 dict 倒退:

characters = {
'1': 'Stark',
'2': 'Greyjoy',
'3': 'California',
'4': 'Whitewalkers',
'5': 'Knights Watch',
'6': 'Dalthraki',
}   

print 'Type 1 for Stark'
print 'Type 2 for Greyjoy'
print 'Type 3 for Lannister'
print 'Type 4 for Whitewalkers'
print 'Type 5 for Knights Watch'
print 'Type 6 for Dalthraki' 
choice = raw_input("> ")
if choice in characters:
    print 'You\'ve selected', characters[choice] 
else:
    pass

【讨论】:

  • @user1598939 -- 如果这对您有帮助,您应该将其标记为已接受的答案(单击答案旁边的小复选标记)。这让人们知道您的问题已得到解决。
【解决方案2】:

将您的 dict 更改为:

characters = {
'1':'Stark',
 '2':'Greyjoy',
'3':'California',
'4':'Whitewalkers',
'5':'Knights Watch',
'6':'Dalthraki'
 }  

并使用:

if choice in characters:
    print 'You\'ve selected {0}'.format(characters[choice])
else:
    splash()

【讨论】:

    【解决方案3】:

    你不能那样使用字典。您可以反转键/值对,然后使用 characters[choice] 来获取角色的名称。如果您想按原样保留字典,最好的办法是遍历项目

    characterName = None
    names = characters.items()
    while characterName is None and names:
        if names[0][1] == choice:
            characterName = names[0][0]
        else:
            names = names[1:]
    

    运行此程序后,您将在 characterName 中拥有一个角色名称,或者如果用户输入了无效条目,则该名称将为 None。

    【讨论】:

    • 我认为这需要一些编辑:它不是有效的 Python 语法,并且还有其他几个拼写错误(字符名称、项目)。不过,即使您以这种方式搜索,我认为带有中断的 for 循环或 next 调用会更简单。
    • 我想这取决于个人喜好。我不喜欢使用 for 循环,除非我知道我肯定会遍历每个项目。
    • @Skunkwaffle 所以如果这个游戏是一个 20 秒的快速脚本,而玩家只会选择一次角色,那么 for 循环可能不是最明智的选择?
    • 如果我们谈论性能,我认为这不会太重要。但请记住,“代码的阅读次数多于编写次数”,代码的风格和清晰度很重要,即使在这样的简单情况下也是如此。如果您看到一个带有 x 次迭代的 for 循环,您应该能够假设它将执行所有 x 次迭代,但在这种情况下这是不必要的,因为您只需要找到正确的答案。但实际上,除非您需要最初发布的字典结构,否则交换键和值是迄今为止最好的解决方案。
    猜你喜欢
    • 2015-08-28
    • 1970-01-01
    • 2018-02-01
    • 2013-12-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多