2017-07-24 53 views
1
item = word_bank.pop(random.choice(list(word_bank.keys()))) 
print(list(word_bank.keys())) 
print("The Word is: ", item) 
print("=" * 25) 
a = input("Do You Know It? (y/n):\t") 
answer = word_bank[item] 

以上item变量是从我的字典word_bank返回值,而不是钥匙。我打印了我的密钥列表以尝试和调试问题,并且没有存在任何值,这使我认为问题存在于pop方法或random.choice方法中。我研究了这两个文件,并没有发现任何可以指出问题的地方。随机弹出,服务价值,没有钥匙

我认为这与random.choices有关,它将一个索引返回给一个键,然后pop方法将相应的值作为该项返回给该键。但是,如果我撤消角色并使用values()代替keys(),则会出现重大错误,并且找不到解决该问题的解决方案。

任何人都可以请摆脱这一点,并帮助我找到最有效的方式来做到这一点?

+2

* ...不存在任何值*,你知道'dict.pop'的作用吗? –

+0

你究竟想要做什么?是的,如果你将一个键传递给'.pop'方法,它会弹出*相应的值... –

回答

0

word_bank.keys()显然返回键,如果有的话。 word_bank.pop将返回给定密钥的值。因此,项目将包含来自word_bank的值。 但是,当我反转角色并使用values()代替keys()时,我得到一个关键错误,这是因为您正尝试使用值搜索键。字典可以直接通过键而不是按值来索引。 检查:

word_bank = {'one':1,'two':2,'three':3} 
item = word_bank.pop(random.choice(list(word_bank.keys()))) 
print(list(word_bank.keys())) 
print("The Word is: ", item) 
print("=" * 25) 
a = input("Do You Know It? (y/n):\t") 
answer = item 
0
word_bank = {'hello':'goodbye','yes':'no'}  

      item = random.choice(list(word_bank.items())) 
       key = item[0] 
       value = item[1] 
       print("The Word is: ", key) 
       print("=" * 25) 
       a = input("Do You Know It? (y/n):\t") 
       answer = value 
      if a.lower() == "y": 
        print() 
        print("Answer:\t", answer) 
        score += 1 
        del word_bank[key]   #remove from dict 
        print() 
      elif a.lower() == "n": 
        print() 
        print("Answer:\t", answer) 
        del word_bank[key]   #remove from dict 
        print() 

我想出了这个解决方案,但它似乎并不十分有效,任何人都可以提供一种方法,通过破坏性地使用较少的线路或提供了更多可读性我的字典迭代?我的直觉说弹出,但只适用于键而不是值,我需要删除并返回一个键给用户,然后显示他们的价值。上面的例子很有用,但看起来很庞大。

+0

因此,如果他们声称知道答案,即使没有检查答案,你也在给某人一个观点? –

+0

该程序仅供我使用,我正在运行不同语言的单词词典,其中的关键字是外语,值是英语定义。这仅供我使用,因此检查响应确实不是当前的问题。 – GainesvilleJesus

+0

为什么破坏性地?你只是在回答一部分,并对剩下的部分做些什么? – cmd

0

随机选择一个密钥,然后pop()答案:

import random 

word_bank = {'hello':'goodbye','yes':'no'} 
score = 0 
item = random.choice(list(word_bank.keys())) 
answer = word_bank.pop(item) 
print("The Word is: ", item) 
print("=" * 25) 
a = input("Do You Know It? (y/n):\t") 
if a.lower() == "y": score += 1 
print() 
print("Answer:\t", answer) 

上面的代码变异字典在每个阶段。如果例如你想再次运行测验?我不喜欢无故消灭信息。这里是一个整体测试,洗牌的按键,因此,在不同的运行给出不同阶的非破坏性的版本(注意,我省去可变answer因为我只在一个代码行所需要的值):

import random 

word_bank = {'hello':'goodbye','yes':'no'} 
score = 0 
questions = list(word_bank.keys()) 
random.shuffle(questions) 
for item in questions: 
    print("The Word is: ", item) 
    print("=" * 25) 
    a = input("Do You Know It? (y/n):\t") 
    if a.lower() == "y": score += 1 
    print() 
    print("Answer:\t", word_bank[item]) 

print("Final score =",score)