前言
本群的作业,没有指定Python方向,而在于提升群内成员的语言功底,以便大家在Python的其他方向走的更远。
本群欢迎任何程度的Python学习者
Python程序设计 群号:651707058
题一:求凯撒密码
凯撒密码的加密方法是:每当你想要加密一段文字时,你需要选择一个移位值 S,
它是一个0到25之间的整数。然后,你把文字中的每一个字母用S个位置之后的字母
替换(假设S=1,那么A就用B替换)。如果位置超过了Z,那么就要从A开始继续数
例如:密文: Ifsf up tubz 移位值s=25
输出的明文为:Here to stay
程序要求输入一段明文后,再输入一个移位值,输出相应的凯撒密码
def get_keywords(code,step):
res = ''
for c in code:
if c == ' ':
res+=' '
elif c.isupper():
res+=chr((ord(c)-ord('A')+step)%26+ord('A'))
else:
res+=chr((ord(c)-ord('a')+step)%26+ord('a'))
return res
print(get_keywords('Ifsf up tubz',25))
print(get_keywords('Here to stay',1))
'''
解释:chr((ord(c)-ord('A')+step)%26+ord('A'))
假如把 b移动2位到d
(98-97+2)%26 + 97 = 100
100就为b的ASCII码
'''
题二:统计最多出现的单词
统计一段话中出现最多次数的单词,单词一样,大小写不同视为同一个单词
输出出现次数最多的单词的时候,将其变成小写输出
例如:
Here is a line like sparkling wine
Line up fast or be the last
输出:line
import re
from collections import Counter
s = '''
Here is a line like sparkling wine
Line up fast or be the last
'''
res = re.findall(r'\b([a-zA-Z]+)\b',s)
for n,words in enumerate(res):
res[n] = words.lower()
count = Counter(res)
most_word = ''
times = 0
for w,t in count.items():
if t>times:
most_word = w
times = t
print(most_word)
'''
解释:主要用到了正则表达式,和一个Counter计数函数,使用.items()可以将
字典变成元组
'''
题三:设计一个简单的验证码生成器
要求生成一个4位验证码,每一位都有可能是数字、大写字母、小写字母,当生成一个验证码后
程序提示输入验证码。用户输入后,程序可以判断输入的验证码的正误,其中验证码验证不分
字母大小写
例如:生成的验证码为:X8p7
请输入验证码:x8P7
输出:验证成功
例如:生成的验证码为:X8p7
请输入验证码:x8L7
输出:验证失败
from random import randint
def gen_Verification_Code():
res = ''
for i in range(4):
choice = randint(1,3)
if choice == 1:
res+=chr(randint(65,90))
elif choice == 2:
res+=chr(randint(97,122))
else:
res+=str(randint(0,9))
return res
Verification_Code = gen_Verification_Code()
print('请输入验证码:{vfcode}'.format(vfcode=Verification_Code))
code = input(':')
if Verification_Code.lower() == code.lower():
print('验证成功')
else:
print('验证失败')
'''
解释:一种随机是随机某个位置是大写字母、小写字母还是数字,还有一种随机是在上一个随机的
基础上随机出具体的值
'''
题四:求最长公共前缀
编写一个函数来查找字符串数组中的最长公共前缀。
如果不存在公共前缀,返回空字符串 “”。
示例 1:
输入: [“flower”,”flow”,”flight”]
输出: “fl”
示例 2:
输入: [“dog”,”racecar”,”car”]
输出: “”
解释: 输入不存在公共前缀。
def longestCommonPrefix(str_list):
'''
:param str_list:传入的是元素为字符串的列表
:return: 最长公共前缀
'''
len_list = [len(w) for w in str_list]
len_min = min(len_list)
perfix = ''
for i in range(1,len_min+1):
for j in range(1,len(str_list)):
if str_list[j][0:i] != str_list[j-1][0:i]:
return perfix
perfix = str_list[0][0:i]
return perfix
print(longestCommonPrefix(["flower","flow","flight"]))
'''
解释:先求出最短单词的长度,因为公共前缀顶多是它的长度。
求解思路:
先暂定公共前缀是每个单词的第一位:然后遍历每个单词的第一位,
只要前一个单词第一位==后一个第一个单词第一位就行
如果遍历完了,都相等,那么就将单词的第一位存入到perfix中
然后暂定公共前缀是每个单词的前两位,然后遍历每个单词的前两位
遍历完了,如果都相等就将结果存入perfix,如果有不相等的就不存入
直接返回上一次存的perfix
如果最短单词长度循环完了,也要返回perfix
'''
最后祝群成员学习愉快~~