恺撒密码 B
描述
恺撒密码是古罗马凯撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:
原文:A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
密文:D E F G H I J K L M N O P Q R S T U V W X Y Z A B C
对于原文字符P,其密文字符C满足如下条件:C = (P+3) mod 26
上述是凯撒密码的加密方法,解密方法反之,即:P = (C-3) mod 26
假设用户可能使用的输入仅包含西文字母,即英文大小写字母a~zA~Z和特殊字符,请编写一个程序,对输入字符串进行凯撒密码加密,直接输出结果,其中特殊字符不进行加密处理。
此题目是AutoOJ(自动评阅)类型,请注意:
1. 输入使用input(""),不要增加提示信息
2. 输出与要求一致
3. 不考虑异常输入情况
输入
示例1: python is GOOD!
输出
示例1: sbwkrq lv JRRG!
#凯撒密码
sr1="abcdefghijklmnopqrstuvwxyz"sr2=sr1.upper()
sr=sr1+sr1+sr2+sr2
in_str=input("")
out_str=""
n=0
outstr=""
for j in in_str:
i=sr.find(j)
if j==" ":
out_str = out_str +" "
continue
if(i>-1):
out_str=out_str+sr[i+3]
else :
n=in_str.index(j)
outstr=list(out_str)
outstr.insert(n,in_str[n])
print(''.join(outstr))
在程序结果中增加一个字符,首先应将结果格式改为列表,再对结果数据进行操作,采用网上一个字符串中增加一个字符的程序,如下:
str1='wo shi yi zhi da da niu/n'
strlist=list(str1)
print(strlist)
n=strlist.index('/')
print(n)
strlist.insert(n,'0')
print(strlist)
print(''.join(strlist))
在之前增加一个字符串中出现下面问题
TypeError: can only join an iterable为join操作是针对列表的,
即print(''.join(strlist))中,只需将strlist改为列表即可。
在使用列表操作函数insert插入字符串时,使用这个语句strlist.insert(n,0)出现问题
这是因为insert函数插入字符时0为数字,出现语法错误,将其改为strlist.insert(n,'0')这样就可以正常插入字符
3位水仙花数计算 B
描述
"3位水仙花数"是指一个三位整数,其各位数字的3次方和等于该数本身。例如:ABC是一个"3位水仙花数",则:A的3次方+B的3次方+C的3次方 = ABC。
请按照从小到大的顺序输出所有的3位水仙花数,请用"逗号"分隔输出结果。
注意:这是一个OJ题目,输出格式要严格一致。
输入
无
输出
示例:634,412
(注意,这两个数字不是水仙花数)
本文程序是借鉴网上的,输入结果中以逗号分隔开,再开始时使用print(num,end=",")输出时,结果数据最后面也有逗号,为消除最后面的逗号,参考网上程序如下:outputs=[]
for x in range(5,10):
outputs.append("%s"%x)
print( ','.join(outputs))
输出结果最后面没有逗号,后将自己网上借鉴的程序进行修改如下:
n=[]
for num in range(99,999):a=num%10
b=(num%100-a)//10
c=num//100
if (a**3+b**3+c**3)==num:
n.append("%s"%num)
print(','.join(n))
成功输出结果,并且最后面也没有逗号输出,符合要求。