3 回答

TA貢獻(xiàn)1839條經(jīng)驗 獲得超15個贊
您缺少一些字母,例如N。請注意,這{"M": "N"}與 不同{"N": "M"}。
話雖如此,您甚至不需要字典,就好像您從 155 (65+65+26-1) 中減去大寫字母的ASCII 代碼(例如 A 的 65),您最終會得到 ASCII 代碼對應(yīng)的字母:
>>> szyfr = "SOME SENTENCE WHATEVER"
>>> "".join(chr(155-ord(e)) if "A" <= e <= "Z" else e for e in szyfr)
'HLNV HVMGVMXV DSZGVEVI'

TA貢獻(xiàn)1796條經(jīng)驗 獲得超4個贊
根據(jù)您提供的代碼,我發(fā)現(xiàn)以下奇怪之處:
szyfr = "SOME SENTENCE WHATEVER"
def split(szyfr):
return [char for char in szyfr]
szyfr = split(szyfr)
看來您正在嘗試從字符串構(gòu)建一個列表,這可以簡單地完成為:
>>> s = "hola"
>>> l1 = list(s)
>>> l1
['h', 'o', 'l', 'a']
因此,根據(jù)您的具體情況:
szyfr = "SOME SENTENCE WHATEVER"
szyfr = list(szyfr)
不過,這并不是真正需要的,因為您可以使用for直接管理字符串,就好像它是列表一樣。
現(xiàn)在,您想要替換特定字典后面的字符。我發(fā)現(xiàn)你的解決方案太復(fù)雜,而你只需要:
diction = {
"A" : "Z",
"Y" : "B",
"C" : "X",
"W" : "E",
"E" : "V",
"U" : "F",
"G" : "T",
"S" : "H",
"I" : "R",
"Q" : "J",
"K" : "P",
"O" : "L",
"M" : "N",
" " : " "
}
sentence_to_code = input("Give me a sentence: ").strip().upper()
toret = ""
for ch in sentence_to_code:
coded_ch = diction.get(ch)
if not coded_ch:
coded_ch = ch
toret += coded_ch
print(toret)
如果您沒有定義所有可能字符的對應(yīng)項,那么使用字典的get(k)方法是明智的,該方法在未找到鍵k時返回None 。
必須考慮到get(k)方法有默認(rèn)返回值參數(shù),以防找不到鍵,因此您可以使用get(k, default_return_value),這可以讓我們進(jìn)一步簡化代碼:
diction = {
"A" : "Z",
"Y" : "B",
"C" : "X",
"W" : "E",
"E" : "V",
"U" : "F",
"G" : "T",
"S" : "H",
"I" : "R",
"Q" : "J",
"K" : "P",
"O" : "L",
"M" : "N",
" " : " "
}
sentence_to_code = input("Give me a sentence: ").strip().upper()
toret = "".join([diction.get(ch, ch) for ch in sentence_to_code])
print(toret)
現(xiàn)在我們使用列表理解,因為我們不再需要條件。該調(diào)用diction.get(ch, ch)返回ch或相應(yīng)的編碼字符,如果在字典中找不到,則返回ch本身。通過調(diào)用str.join(),"".join(...)我們將列表轉(zhuǎn)換回字符串。

TA貢獻(xiàn)2039條經(jīng)驗 獲得超8個贊
如果您確實想使用一個字典,其中每個鍵“字母”都有值“相反字母”:
這是一個可能的解決方案:
diction = {" ": " "}
all_letters = range(ord('A'), ord('Z')+1)
for char, opsite_char in zip(all_letters, reversed(all_letters)):
diction[chr(char)] = chr(opsite_char)
print(diction)
輸出:
{' ': ' ', 'A': 'Z', 'B': 'Y', 'C': 'X', 'D': 'W', 'E': 'V', 'F': 'U', 'G': 'T',
'H': 'S', 'I': 'R', 'J': 'Q', 'K': 'P', 'L': 'O', 'M': 'N', 'N': 'M', 'O': 'L',
'P': 'K', 'Q': 'J', 'R': 'I', 'S': 'H', 'T': 'G', 'U': 'F', 'V': 'E', 'W': 'D',
'X': 'C', 'Y': 'B', 'Z': 'A'}
添加回答
舉報