簡體   English   中英

使用 lambda 使用 rot13 加密/解密?

[英]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)

我使用chrord所以我們不需要保留所有字母的字符串。 這里的想法是我們得到一個整數來表示任何給定字符的代碼點,所以我們可以做一些數學而不是使用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 ''

為了使用它,您需要傳遞消息和要旋轉的字母數。 因此, rot13rot上的部分應用程序相同,例如rot13(message) == rot(13, message) 然后你可以這樣定義rot13

rot13 = lambda m: rot(13, m)

暫無
暫無

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

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