簡體   English   中英

Python 3.x 基於字典的注冊機幫助?

[英]Python 3.x dictionary-based keygen help?

我正在研究 Python 一個月,我正在嘗試使用字典制作一個 keygen 應用程序。 想法是將 name = input('Name: ') 中的每個字母與 dict.keys() 進行比較,並為每個等於 dict.keys() 的名稱字母打印結果 dict.values()。 這就是我寫的:

name = input('Name: ')

kalg = dict()
kalg['a'] = '50075'
kalg['b'] = '18099'
kalg['c'] = '89885'
etc...

我試着寫這個...

for x in kalg.keys():
    print(x)[/code]

...但我需要保留 print(x) 結果,但我不知道該怎么做:如果我這樣做:

for x in kalg.keys():
    a = x

'a' 只保留字典的最后一個鍵:(。我認為這是因為 print(x) 將 dict.keys() 的每個鍵打印在一個新行上,但我不知道如何解決它(我試過了轉換類型等......但它沒有工作)。

請問你能幫我解決這個問題嗎? 我也不知道如何將字符串的每個字母與另一個字符串進行比較並打印 dict.values() 作為結果並在右側 position 中。

抱歉這個愚蠢的問題,但我在編寫 python 應用程序時太興奮了:)


@卡爾

I'm studing Python over two differt books: 'Learning Python' by Mark Luts which covers Python 2 and a pocket which covers Python 3. I examined the list comprehension ón the pocket one and Imanaged to write three other variants of this keygen. 現在我想問你如何在一個真實的應用程序中實現這個 keygen 的源代碼,它有一個 GUI 驗證 name_textbox 和 key_textbox 標題是否匹配(我來自基本,所以這是我以前寫的,只是為了給你一個想法)作為注冊機 output 結果。 我知道我可以自己嘗試做這件事(我做了但沒有成功),但我想先完成這本書(袖珍版)並了解 Python 的所有主要方面。 謝謝你的耐心。

我只能猜測,但這可能是你想要的:

name = input('Name: ')
kalg = {'a':'50075', 'b': '18099', 'c': '89885'}
keylist = [kalg[letter] for letter in name]
print(" ".join(keylist))

調用print不能“保留”任何東西(因為沒有變量可以存儲它),並且重復分配給變量會替換以前的分配。 (我不明白你對這個問題的推理; print(x)的行為方式與a = x行為方式無關,因為它們是完全不同的事情。)

您的問題歸結為“我如何保留幾個類似操作的一堆結果?” 在概念層面上,答案是“將它們放入容器中”。 但是明確地將東西放入容器中比真正需要的更乏味。 你有你想要的數據的英文描述:“dict.values() for each letter of name equal to dict.keys()”。 事實上,等效的 Python 驚人地相似。

當然,我們實際上並不希望每個匹配的字母都有一個單獨的dict.values()副本; 而且我們實際上不想將字母與整組dict.keys()進行比較。 作為程序員,我們必須更加精確:我們正在檢查字母是否是 dict 的鍵,即它是否在dict.keys()的集合中。 幸運的是,這個測試寫起來很簡單:對於給定的字母,我們檢查letter in dict中的字母。 當找到字母時,我們想要對應的值; 我們通過正常查找來得到它,因此dict[letter]

然后我們用我們的特殊語法將這一切包裝起來,給我們想要的東西:列表推導 我們把括號放在一個列表中,然后在里面寫(一些從輸入元素計算結果的表達式) for (輸入元素的變量名,所以我們可以在第一個表達式中使用它) in (的來源輸入元素); 並且我們可以通過添加if (輸入元素上的某些條件)同時過濾輸入元素。

所以這很簡單: [kalg[letter] for letter in name if letter in kalg] 請注意,我將name作為“元素的來源”,因為它應該是這樣的。 您在對問題的描述中完美地解釋了這一點-為什么要在現有的 for 循環中迭代dict.keys() :)

現在,這個表達式會給我們一個結果列表,例如 ['foo', 'bar', 'baz']。 如果我們想要一個連續的字符串(我假設您的 dict 中的所有值都是字符串),那么我們需要將它們連接起來。 幸運的是,這也很容易。 事實上,由於我們要將結果傳遞給 function 接受一個參數,所以有一個特殊的語法規則可以讓我們去掉方括號,讓事情看起來更整潔。

它也比你一開始就初始化字典更容易; 慣用的 Python 代碼實際上很少需要單詞dict

把它們放在一起:

kalg = {'a': '50075', 'b': '18099', 'c': '89885'} # etc.
name = input('Name: ')
print(''.join(kalg[letter] for letter in name if name in kalg))

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM