2021-05-06

"""
1. 加密是日常生活中经常用到的保护信息内容的方法,
比如非常简单的凯撒密码,利用字母移位来加密字母,
比如让字母移动1位,比如a变成b,b变成c,最后z变成a,
将内容整体移动一位来加密内容,
现在要求实现这样的一个加密类,有一个加密的方法,
也有一个解密到的方法,请实现这样的一个类
"""
class Encryption:
    def encryption(self,password):
        self.password = password
        stri = ''
        for i in self.password:
            if i == 'z' or i == 'Z':
                i = ord(i) - 25
                i = chr(i)
            else:
                i = ord(i) + 1
                i = chr(i)
            stri += i
        return stri

    def decryption(self,p):
        self.p = p
        stri2 = ''
        for i in self.p:
            if i == 'a' or i == 'A':
                i = ord(i) + 25
                i = chr(i)
            else:
                i = ord(i) - 1
                i = chr(i)
            stri2 += i
        return stri2

password = input('输入密码:')
a = Encryption()

p = a.encryption(password)

b = a.decryption(p)
print('加密过后的密码',p)
print('解密过后的密码',b)

"""
2. 有两个长度一样列表a和b,它们里面的元素都是整形的数值,要求:通过交换两个列表的元素,使得sum(a) 和 sum(b)的差值最小
提示如下:
    1.将两序列合并为一个序列,并排序,为列表Source
    2.拿出最大元素Big,次大的元素Small
    3.在列表Source中找出最大值和最小值,将最大值和Small放在一起组成列表 c,将最小值和Big放在一起组成列表 d
    4.再在列表Source中找出最大值和最小值,重新计算sum(c)和sum(d),将最大值放在重新计算后和最小的列表里面,最小值放在另一个列表里面
    5.重复第4步,直到分完
(华为06年面试题)
"""

num = int(input('你想要列表有几个元素'))
a = []
b = []
i = 0

while i < num:                  #两个列表中添加数据
    a.append(int(input('输入整形数据')))
    b.append(int(input('也输入整形数据')))
    i += 1

Source = a + b
Source.sort()          #合并后的列表从小到大排序

Big = Source[-1]        #列表中最大的
Small = Source[-2]      #列表中次大的

Source.pop(-1)
Source.pop(-1)

c = [Small,Source[-1]]
d = [Big,Source[0]]
Source.pop(-1)
Source.pop(0)

i = True
while i:
    temp = 0
    temp1 = 0
    for i in range(0,len(c)):
        temp = temp + c[i]

    for i in range(0,len(d)):
        temp1 = temp1 + d[i]

    if temp > temp1:
        c.append(Source[0])
        d.append(Source[-1])
        Source.pop(-1)
        Source.pop(0)

    elif temp < temp1:
        d.append(Source[0])
        c.append(Source[-1])
        Source.pop(-1)
        Source.pop(0)

    else:
        c.append(Source[0])
        d.append(Source[-1])
        Source.pop(-1)
        Source.pop(0)

    if len(Source) == 0:
        i = False

print(c)
print(d)


"""
3. 定义一个类,可以对输入的文章进行统计,要求实现以下几个方法:
    1. 统计出各个单词出现的次数和频率
    2. 查看出现频率最多的前10个单词
    3. 输入单词能够得到单词的出现次数和频率
"""

import re
class Statistical:          #统计
    def calculast(self,p):
        self.p = p
        self.article = re.split('[?| |,|.|!]',p)
        self.de_weight = set(self.article)
        self.dict1 = {}    #方便查询的字典
        self.list1 = []   #总列表
        temp = []   #间接列表
        for i in self.de_weight:
            x = 0
            for j in self.article:
                if j == i:
                    x += 1
            temp = [i,x]
            self.list1.append(tuple(temp))
            self.dict1 = dict(self.list1)
        print(self.list1)
        print(self.dict1)

    def Ten(self):       #文章单纯>10,打印前十个, <10,全部打印
        if len(self.de_weight) <= 10:
            print(self.list1)
        else:
            self.list1.sort(key = lambda x:x[1],reverse=True)
            print(self.list1[:10])

    def Inquire(self,keyv):
        print(self.dict1[keyv])

wen_zhang = input('输入文章:')
a = Statistical()
a.calculast(wen_zhang)
a.Ten()
word = input('输入要查询的单词:')
a.Inquire(word)


"""
4. 写一个函数实现将包含100个元素的列表随机分成12分,每份至少有2个元素
"""

import random

def divide(li):
    dict1 = {}
    for i in range(12):
        stri = 'list'+str(i)
        dict1[stri]= []
        for j in range(2):
            temp = random.choice(li)
            dict1[stri].append(temp)
            li.remove(temp)
    list_keys = list(dict1.keys())
    while True:
        key1 = random.choice(list_keys)
        va = random.choice(li)
        dict1[key1].append(va)
        li.remove(va)
        if li == []:
            return dict1

list_i = [i for i in range(100)]
dict2 = divide(list_i)
for k,v in dict2.items():
    print(k,v)



"""
5.  给定一个列表和一个值,列表中数字两两相加如果有等于这个值的,
就返回这两个值的索引,否则返回[-1, -1],比如:
1. 给定列表[1, 5, 7, 20], 给定值12,返回[1,2]
2. 给定列表[1, 2, 6, 8 ], 给定值2,返回[-1, -1]
"""

element = int(input('您想在列表中添加几个元素,必须大于1'))
li = []
while element >= 1:
    value = int(input(f'输入{element}个元素'))
    li.append(value)
    element -= 1

num = int(input('请输入一个数值'))

list_zong = []     #总列表
for i in range(len(li)):
    for j in range(len(li)):
        if j <= i:
            continue
        if li[i] + li[j] == num:
            list_temp = [i,j]     #过度列表
            list_zong.append(tuple(list_temp))

if list_zong == []:
    list_zong = [-1,-1]
    print(list_zong)

else:
    print(list_zong)


'''
6.一个列表,里面都是整数,要求删除一个元素,使得剩余元素的乘积最大
现在要求找到这个待删除的元素
来源参考:https://mp.weixin.qq.com/s/Ct5AxXCuDhyHCg7ykCg1kQ
'''
li = []
num = int(input('列表中想添加几个元素:'))

if num <= 1:
    raise Exception('列表元素不够')    #如果列表中只想添加<=1提前报错
while num >= 1:
    value = int(input(f'输入{num}个元素:'))
    li.append(value)
    num -= 1

n = 0
for i in li:
    if i < 0:
        n += 1


if n%2 == 0:
    if n == len(li):
        li.sort()
        print('要移除下标为:', 0, '的数,他的值为:', li[0])
    else:
        li.sort()
        print('要移除下标为:',n,'的数,他的值为:',li[n])

elif n%2 == 1:
    if n == len(li):
        li.sort()
        print('要移除下标为:', -1, '的数,他的值为:', li[-1])
    else:
        li2 = []
        for i in li:
            if i < 0:
                li2.append(i)
        li2.sort()
        temp = li2[-1]
        index = li.index(temp)
        print('要移除下标为:',index,'的数,他的值为:',temp)

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值