【问题标题】:Randomly display either key or value from dictionary; followed by it's corresponding paired item随机显示字典中的键或值;后面跟着它对应的配对项
【发布时间】:2023-01-04 02:30:15
【问题描述】:

这是我的第一篇文章。我希望有人会好心帮助我。

我正在寻找创建一个程序,以随机显示字典键或值,然后按照用户输入(例如按下键)显示键或值对应的项目。

字典将存储表示字母表中某些字母及其相应数字位置的值。

alphabet = {'1':'A','2':'B','3':'C','4':'D'} 

此代码将为用户提供一个数字,然后在按回车键后它将显示字母表中的相应字母。

random_selection = choice(list(alphabet))
print('Guess corresponding value', random_selection)
    input('Press return to see corresponding value')
    print(alphabet[random_selection])

我如何编写程序以随机​​选择数字或字母?例如,它可能会显示字母 B,然后在用户按下回车键后显示 2。

接下来我会创建一个循环,以便程序连续运行,但我相信我已经可以完成这一部分了。

【问题讨论】:

    标签: python dictionary random


    【解决方案1】:

    由于您想在两个方向上执行查找,即也通过它们的值查找键,因此字典不是可行的方法,因为它不利于反向查找。我可能会将此 alphabet 存储为 2 元组列表,然后使用 choice 函数选择其中一个,然后再次随机选择元组的第一个或第二个元素(例如,使用相同的 @987654324 @ 功能。

    您可以将字典转换为元组列表,如下所示:

    list(alphabet.items())
    

    编辑:

    您可以这样做,而不是再次使用 choice

    from random import choice, sample
    
    alphabet = {'1': 'A', '2': 'B', '3': 'C', '4': 'D'}
    
    ...
    pair = choice(list(alphabet.items()))
    key, value = sample(pair, k=2)
    print('Guess corresponding value', key)
    input('Press return to see corresponding value')
    print(value)
    

    sample 函数返回长度为k 的随机打乱的子序列。

    编辑 2:

    根据要求,这是我的第一个想法的可能实现:

    from random import choice
    
    alphabet = {'1': 'A', '2': 'B', '3': 'C', '4': 'D'}
    
    ...
    pair = choice(list(alphabet.items()))
    key = choice(pair)
    value = pair[0] if key == pair[1] else pair[1]
    print('Guess corresponding value', key)
    input('Press return to see corresponding value')
    print(value)
    

    我希望很清楚,为什么这个解决方案不那么优雅。

    【讨论】:

    • 谢谢你。这实现了我需要做的事情。您介意在您的原始解决方案中也提供一些代码吗?转换为 2 元组列表,然后使用选择?我将不胜感激。我没有介绍示例函数,因此替代方法会有所帮助。
    • 我所做的编辑应该表明我认为我最初的想法是次优的。如果您使用选择,则需要检查它是元组的哪个元素没有选择,这当然是可能的,但是不稳定的和非常不优雅的海事组织。如果你非要看的话,我可以提供一个可能的实现,但我认为这不是一个好的解决方案。
    • 我同意,这是一个更好的解决方案,您的代码比我想象的要简单得多。您介意为最初的想法提供一些代码吗?我真的很想看看,它会帮助我进一步发展我的理解,
    • @nowmakeshift0 我将您请求的代码附加到我的答案中。很高兴我能帮助你。将不胜感激。 :)
    • 惊人的。太感谢了。我确实尝试过投票,但作为新用户,我的声誉太低了。我现在会更积极地参与这些论坛,希望我们能再次相遇。
    猜你喜欢
    • 2013-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-11-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多