Python:抽认卡游戏库中的随机密钥选择

Python:抽认卡游戏库中的随机密钥选择,python,dictionary,random,Python,Dictionary,Random,一般来说,我对python和编程相当陌生,正在尝试创建一些简单的程序。 我决定建立一个小型的抽认卡程序,以帮助我学习БССаа,并使用了一本字典,其中英文定义为关键,等价物为值。程序运行了,但我正在努力想如何将被调用的单词随机化。我尝试过随机选择(词汇),但收效甚微。我还尝试将字典键/值对转换为列表,但很难使用到目前为止使用的格式调用它们 有没有一种方法可以使用此脚本的变体来随机调用密钥?此外,不同的对象类型对这样的程序更有用吗?谢谢 import random vocabulary = {

一般来说,我对python和编程相当陌生,正在尝试创建一些简单的程序。 我决定建立一个小型的抽认卡程序,以帮助我学习БССаа,并使用了一本字典,其中英文定义为关键,等价物为值。程序运行了,但我正在努力想如何将被调用的单词随机化。我尝试过随机选择(词汇),但收效甚微。我还尝试将字典键/值对转换为列表,但很难使用到目前为止使用的格式调用它们

有没有一种方法可以使用此脚本的变体来随机调用密钥?此外,不同的对象类型对这样的程序更有用吗?谢谢

import random

vocabulary = {
    "to study (imperfective)": "изучать",
     "to begin (imperfective)": "начинать",
     "to begin (perfective)": "начать"
}

n = 0
while n < 1:
for english, russian in vocabulary.items():
    print("Translate:\n" + english + "\n")
    answer = input("Answer:\n" )
    if answer == russian:
        print("Correct!\n")
    else:
        print("Incorrect! Correct answer: \n" + russian + "\n")
随机导入
词汇={
“学习(不完善)”:“学习(不完善)”,
“开始(不完善)”:“开始”,
“开始(完成)”:“开始”
}
n=0
当n<1时:
对于英语,词汇为俄语。items():
打印(“翻译:\n”+英语+“\n”)
回答=输入(“回答:\n”)
如果答案=俄语:
打印(“正确!\n”)
其他:
打印(“不正确!正确答案:\n”+俄语+“\n”)

您可以使用
随机
模块的
选项
功能:

from random import choice
numbers = [1, 2, 3, 4, 5]
random_element = choice(numbers)
你可以在字典的
.keys()
上调用它来获取python2中的一个随机键,或者正如abarnert所说,在python3中使用
选项之前,将你的项更改为
元组(或
列表的键)

可以:

从非空序列seq返回一个随机元素

唯一的问题是这里没有序列,你有字典

但字典是其键的一个iterable,因此您可以直接构造其键的元组(或列表,或大多数其他类型的序列):

english = random.choice(tuple(vocabulary))
russian = vocabulary[english]
或者,由于其items视图是键值对的iterable:

english, russian = random.choice(tuple(vocabulary.items())
对于一个大型字典来说,这有点浪费,因为它将键或项复制到一个元组中,只是为了选择一个元组。但是,当你只谈论3个键,甚至50000个键时,这不会是一个问题,所以请保持简单

import random

vocabulary = {
  "to study (imperfective)": "изучать",
  "to begin (imperfective)": "начинать",
  "to begin (perfective)": "начать"
}
randomChoice = random.randint(0, len(vocabulary)-1)
randomChoice = list(vocabulary.keys())[randomChoice]
print randomChoice
print vocabulary[randomChoice]
印刷品:

“学习(不完善)”、“开始(不完善)”或“开始(完善)”

以及:“зггггггга”和“ггггаа”


在脑海中浮现……@PatrickArtner,答案就在前三个字中:)事实上,你不能在关键视图上,或者在dict本身上调用它
choice
需要一个序列,而不仅仅是一个iterable。最简单的解决方案(对于这么小的dict来说很好)是
choice(tuple(词汇表))
@abarnert(在python 3中,对吧)。choice函数确实需要索引,我会更新以反映这一点。它在Python 2中也需要一个序列,它只是不检查它,所以如果你这样做,比如说,
choice({0:“spam”,2:“eggs”})
它将返回
“spam”
一半的时间和
keyrerror:1
另一半的时间。除非您的键恰好位于
范围(0,len(d))
,否则它实际上不起作用。它对2.x中的
keys()
有效的唯一原因是
keys()
已经在将键复制到列表中。