少女祈祷中...

PythonDailyQuestion-0610


本篇概述:0610-每日一问


Tips

github:https://github.com/Elegant-Smile/PythonDailyQuestion

1、基础题

恺撒密码是古罗马恺撒大帝用来对军事情报进行加解密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列中该字符后面的第三个字符,即,字母表的对应关系如下:‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬‬

原文: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、空格和特殊符号,请编写一个程序,对输入字符串进行恺撒密码加密,直接输出结果,其中空格不用进行加密处理。使用input()获得输入。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 首先知道2个函数
ord() # str -> ascii
chr() # ascii -> str

ord('a')
# 97
chr(ord('a'))
# a

# a位移1位
# ord('a')=97,ord('b')=98
chr(ord('a')+((98-97)+1)%26)
# b

# z位移1位
# ord('a')=97,ord('z')=122
chr(ord('a')+((122-97)+1)%26)
# a
1
2
3
4
5
6
7
8
9
10
word = 'za %test'	# 加密字符串
offset = 3 # 偏移量
target = ''
for w in word:
if 'a' <= w <= 'z':
target += chr( ord('a') + ((ord(w)-ord('a')) + offset )%26 )
elif 'A'<= w <='Z':
target += chr( ord('A') + ((ord(w)-ord('A')) + offset )%26 )
else:
target += w

2、提高题

请实现一个函数用来找出字符串中第1个只出现1次的字符。
例如:
当从字符串中只读出前两个字符”go”时,第1个只出现次的字符是”g”。
当从该字符串中读出前六个字符”google”时,第1个只出现1次的字符是“l”。

1
2
3
4
5
6
7
import sys
a = input('input the word:')
for a1 in a:
if a.count(a1) == 1:
print('第一个只出现一次的字符为{}'.format(a1))
sys.exit()
print('没有只出现一次的字符')
-------------本文结束感谢您的阅读-------------

本文标题:PythonDailyQuestion-0610

文章作者:Coder-Sakura

发布时间:2019年06月14日 - 22:30:57

最后更新:2019年09月26日 - 11:03:41

原始链接:https://coder-sakura.github.io/blog/2019/06/14/pythondailyquestion-0610/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。