2017-07-24 48 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)