[英]encrypt/decrypt with rot13 using a lambda?
我需要使用lambda
進行加密/解密,但遇到了一些問題。 我的 function create_rot13()
不能接收參數,只有我的 lambda 應該。
這是我目前的代碼,沒有使用任何lambda
,因為我找不到一個(經過幾天的環顧)。 怎么把這么幾行代碼放進去。
def create_rot13(message):
crypted = ""
letters = "abcdefghijklmnopqrstuvwxyz"
for car in message:
if car in letters:
num = letters.find(car)
num = num + 13
if num >= len(letters):
num = num - len(letters)
crypted = crypted + letters[num]
else:
crypted = crypted + car
crypted = crypted[:-1]
return crypted
print(create_rot13("jbeyq"))
print(create_rot13("world"))
任何人有提示或東西可以幫助我找到解決我的問題的方法嗎?
它應該看起來有點像,除了這個 1 只改變一個數字:
def create_rot13():
my_fonction = lambda x : x + 13
return my_fonction
coding = create_rot13()
print(coding(4))
如果你想用lambda做,那么你需要用lambda捕獲letters
變量並使用map
。 你想要這樣的東西:
def encode_rot13(message):
offset = ord('a')
result = map(lambda c: chr((ord(c) + 13 - offset) % 26 + offset), message)
return "".join(result)
我使用chr
和ord
所以我們不需要保留所有字母的字符串。 這里的想法是我們得到一個整數來表示任何給定字符的代碼點,所以我們可以做一些數學而不是使用find
。
這是一個簡單的(ab)使用codecs
模塊 (和lambda)。 請注意,您需要編解碼器模塊,而不是正常調用.encode('rot13')
因為您正在進行文本 - >文本編碼。
import codecs
rot13 = lambda s: codecs.encode(s, 'rot13')
以下是一些示例用法:
>>> rot13('foo')
'sbb'
這是我的解決方案:
rot13 = lambda m: ''.join(chr(ord(c)+13) if 'a' <= c.lower() < 'n' else chr(ord(c)-13) if 'm' < c.lower() <= 'z' else c for c in m)
我只是在this
上使用它,它是 rot13 編碼的:
import this
# output
print(rot13(this.s))
# same output
我正在讓 lambda 接受一個字符串並返回一個字符串。 我在連接的生成器上執行此操作,並且只旋轉非重音字母,無論大小寫如何。 我的版本接受旋轉長度並將其過濾為 [0-26] 間隔:
rot = lambda n, m: ''.join(chr(ord(c)+n) if 'a' <= c.lower() <= chr(ord('z')-n) else chr(ord(c)+n-26) if chr(ord('z')-n) < c.lower() <= 'z' else c for c in m) if 0 < n < 27 else ''
為了使用它,您需要傳遞消息和要旋轉的字母數。 因此, rot13
與rot
上的部分應用程序相同,例如rot13(message) == rot(13, message)
。 然后你可以這樣定義rot13
:
rot13 = lambda m: rot(13, m)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.