8/6/2018 Python程序设计群作业----Python语言测试练习题【第十天】

前言

本群的作业,没有指定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
'''

最后祝群成员学习愉快~~

猜你喜欢

转载自blog.csdn.net/tobe_numberone/article/details/81448359