python caesar chr和ord没有换行符,只是在字母表中迭代
我的凯撒密码有问题 1) 我不知道如何检查一个字符是否是标点符号,如何打印而不求和 2) 在同一行上打印字符,但完成后返回换行符 3) 用大数字重复字母表返回标点符号,我如何才能只返回一个字符python caesar chr和ord没有换行符,只是在字母表中迭代,python,cs50,caesar-cipher,Python,Cs50,Caesar Cipher,我的凯撒密码有问题 1) 我不知道如何检查一个字符是否是标点符号,如何打印而不求和 2) 在同一行上打印字符,但完成后返回换行符 3) 用大数字重复字母表返回标点符号,我如何才能只返回一个字符 import sys import string def main(): if len(sys.argv) != 2: print("Usage: caesar.py k") else: k = int(sys.argv[1])
import sys
import string
def main():
if len(sys.argv) != 2:
print("Usage: caesar.py k")
else:
k = int(sys.argv[1])
if k == 1 or k <= 26:
text = input("plaintext: ");
j = len(text)
for i in range(j):
#check if is a character
if text[i].isalpha:
if text[i].islower():
print(chr(ord(text[i]) + k),end = "")
if text[i].isupper():
print(chr(ord(text[i]) + k),end = "")
elif text[i].punctuation():
print(text[i])
else:
print("You have to introduce a number between 1 and 26")
main()
导入系统
导入字符串
def main():
如果len(sys.argv)!=2:
打印(“用法:caesar.py k”)
其他:
k=int(sys.argv[1])
如果k==1或k请尝试以下代码:
import string
def encrypt_ceasar(s, shift):
assert abs(shift) < 26, 'shift is between -25 and 25 (inclusive)'
encrypted_s = ''
for char in s:
if char.isalpha():
is_upper = char.isupper()
char = char.lower()
pos_alphabet = ord(char) - ord('a')
new_pos = (pos_alphabet + shift) % 26
encryted_char = chr(ord('a') + new_pos)
if is_upper:
encryted_char = encryted_char.upper()
encrypted_s += encryted_char
else:
encrypted_s += char
return encrypted_s
def decrypt_ceasar(s, shift):
return encrypt_ceasar(s, -shift)
if __name__ == "__main__":
s = 'AbC1$de#zy'
encrypted_s = encrypt_ceasar(s, 3)
print('s:', s)
print('encrypted_s:', encrypted_s)
print('again s:', decrypt_ceasar(encrypted_s, 3))
当然现在我可以了,在我不能投票之前,因为我没有足够的声誉
s: AbC1$de#zy
encrypted_s: DeF1$gh#cb
again s: AbC1$de#zy