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

时间:2018-07-07 20:08:48

标签: python dictionary random

我一般对python和程序设计还很陌生,并且正在尝试创建一些简单的程序。 我决定构建一个小型抽认卡程序来帮助我对русский进行研究,并使用了以英语定义为键,而русский等效为值的字典。该程序可以运行,但是我很难弄清楚如何才能随机化被调用的单词。我尝试过random.choice(vocabulary),但收效甚微。我还尝试过将字典键/值对转换为列表,但后来却很难用我到目前为止使用的格式来调用它们。

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

@RunWith(SpringRunner.class)
@SpringBootTest
@AutoConfigureMockMvc
public class AdminControllerTest extends AbstractShiroTest {

    @Autowired
    private MockMvc mvc;

    @Test
    public void testSimple() throws Exception {
        //1.  Create a mock authenticated Subject instance for the test to run:
        Subject subjectUnderTest = createNiceMock(Subject.class);
        expect(subjectUnderTest.isAuthenticated()).andReturn(true);

        //2. Bind the subject to the current thread:
        setSubject(subjectUnderTest);

        mvc.perform(MockMvcRequestBuilders.get("/admin/list"))
                .andExpect(MockMvcResultMatchers.status().isOk());
    }

}

3 个答案:

答案 0 :(得分:1)

您可以使用random模块的choice函数:

from random import choice
numbers = [1, 2, 3, 4, 5]
random_element = choice(numbers)

您可以在字典的.keys()上调用它以获取python2中的随机密钥,或者如abarnert所说,将您的项目更改为tuple(或将密钥更改为list)在python3中使用choice之前。

答案 1 :(得分:0)

random.choice可以:

  

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

唯一的问题是您在这里没有序列,您有字典。

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

english = random.choice(tuple(vocabulary))
russian = vocabulary[english]

或者,由于其项视图是键值对的可迭代项:

english, russian = random.choice(tuple(vocabulary.items())

对于一本巨大的字典,这有点浪费,因为它将键或项复制到一个元组中只是为了选择一个。但是,当您只谈论3个键甚至5万个键时,这不会有问题,因此请保持简单。

答案 2 :(得分:0)

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]

打印:

  

“学习(不完美)”,“开始(不完美)”或“开始(完美)”

     

和:“изучать”,“начинать”和“начать”