最简单的方法是在for循环中使用函数,并使用zip组合字符串和偏移量。在def new_func(string, offsets):
outstr = ""
for char, num in zip(string, offsets):
outstr += code_char(char, int(num))
print(outstr)
加分一行版:
^{pr2}$
看它的行动(使用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