gpt4 book ai didi

python - 加密插入单词和 key , key 将在字母表中向右移动字母

转载 作者:太空宇宙 更新时间:2023-11-04 06:05:35 26 4
gpt4 key购买 nike

这是我的代码,要求用户输入一个字母和一个数字。我的代码根据“数字”的大小将字母向右移动。

def code_char(character, number):
characterOrd = ord(character)
characterNew = characterOrd + number
if 65 <= characterOrd <= 90:
characterNew = characterOrd + number
if characterNew > 90:
characterNewi = characterNew - 26
return (chr(characterNewi))
elif characterNew <= 90:
return (chr(characterNew))
elif 97 <= characterOrd <= 122:
characterNew = characterOrd + number
if characterNew > 122:
characterNewi = characterNew - 26
return (chr(characterNewi))
elif characterNew <= 122:
return (chr(characterNew))

(不要担心我的代码中的缩进,当我从我的 python 程序中复制和粘贴它们时它们不会出现 - 我已经测试过它并且它工作正常 - 例如插入 'a' 给 'b' 和插入“Z”得到“A”。

我想知道如何在一个新函数中使用这个函数,它要求一个 8 个字符长的字符串“abcdefgh”和一个 8 位长数字“11111111”,并将所有相应的字母移到字母表的右侧,所以我的示例将返回“bcdefghi”。棘手的是,我宁愿使用字符串,也不愿使用像顶部函数中那样的指令。

任何提示或方法将不胜感激,但我对python的了解有限,所以如果使用基本功能就更好了。

最佳答案

最简单的方法是在 for 循环中使用您的函数并使用 zip 组合字符串和偏移量。

def new_func(string, offsets):
outstr = ""
for char, num in zip(string, offsets):
outstr += code_char(char, int(num))
print(outstr)

加分一类轮版:

print("".join([code_char(char, int(num)) for char, num in zip(string, offsets)]))

查看实际效果(使用 python3):

if __name__ == '__main__':
string = input("string: ")
offsets = input("offsets: ")
if len(string) != len(offsets):
print("They must be the same length!")
else:
print("".join([code_char(char, int(num))
for char, num in zip(string, offsets)]))

# string: abcdefgh
# offsets: 12345678
# bdfhjlnp

您还可以简单地更新现有功能以满足新需求。

# Modified original
def code_char_string(character_string, offsets):
out_string = ""
for character, offset in zip(character_string, offsets):
number = int(offset)
characterOrd = ord(character)
characterNew = characterOrd + number
if 65 <= characterOrd <= 90:
characterNew = characterOrd + number
if characterNew > 90:
characterNewi = characterNew - 26
out_string += (chr(characterNewi))
elif characterNew <= 90:
out_string+= (chr(characterNew))
elif 97 <= characterOrd <= 122:
characterNew = characterOrd + number
if characterNew > 122:
characterNewi = characterNew - 26
out_string += (chr(characterNewi))
elif characterNew <= 122:
out_string += (chr(characterNew))
return out_string

您还可以使用以下技巧使其更易于阅读。

# Simplified readable version
def code_char_string_compact(character_string, offsets):
out_string = ""
for cord, number in zip([ord(x) for x in character_string], [int(x) for x in offsets]):
newchar = cord + number
if 65 <= cord <= 90:
out_string += chr(newchar - 26) if newchar > 90 else chr(newchar)
elif 97 <= cord <= 122:
out_string += chr(newchar - 26) if newchar > 122 else chr(newchar)
return out_string

您的函数也可以简化为冗长的一行代码。

# oneliner awesomeness
def code_char_one_line(character_string, offsets): return "".join([chr(cord + number - 26) if 65 <= cord <= 90 < cord + number or 97 <= cord <= 122 < cord + number else chr(cord + number) for cord, number in zip([ord(x) for x in character_string], [int(x) for x in offsets])])

全部测试一下:

string, offsets, offsets2 = "abcdefgh", "11111111", "48151623"
print(code_char_string(string, offsets), code_char_string_compact(string, offsets), code_char_one_line(string, offsets))
# bcdefghi bcdefghi bcdefghi
print(code_char_string(string, offsets2), code_char_string_compact(string, offsets2), code_char_one_line(string, offsets2))
# ejdiflik ejdiflik ejdiflik

关于python - 加密插入单词和 key , key 将在字母表中向右移动字母,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22327174/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com