全国计算机等级考试二级教程2019年版-Python语言程序设计编程题参考答案第6章

第6章 组合数据类型

1.英文字符频率统计。编写一个程序,对给定字符串出现的a-z字母频率进行分析,忽略大小写,采用降序方式输出。

  • 思路:1.剔除字符串中的非字母字符,或者用一个条件语句输出字母字符。2.用字典统计各字母字符的数量。
s = input("please input a sentence:")
# To create a dictionary to collect the string and its frequency
counts = {}
# to judge if it is a english character and record the time it presented.
if i in s:
    if 97<=ord(i)<=122 or 65<=ord(i)<=90:
        counts[i]=counts.get(i,0)+1
# to transfer a dictionary to a list, and to sort with its value.
items = list(counts.items())
items.sort(key=lambda x : x[1], reverse = True)

for j in range(len(items)):
    i,count = items[j]
    print("{0:<5} {1:>5}".format(i,count))

2.中文字符频率统计。编写一个程序,对给定字符串中出现的全部字符(含中文字符)频率进行分析,采用降序方式输出。

  • 思路: 同上一样,只要改一下条件语句
s = input("please type a sentence in Chinese:")

counts = {}

for i in s:
    if 19968 <= ord(i) <= 40869:
        counts[i] = counts.get(i,0) + 1
 
 items = list(count.items())
 items.sort(key = lambda x:x[1],reverse =True)
 
for j in range(len(items)):
    i,count = items[j]
    print("{0:<10} {1:>5}".format(i,count)

3.随机密码生成。编写程序在26个字母和9个数字组成的列表中随机生成10个8位密码。

  • 思路:1.随机8位密码,可以使用random。2.10条密码,可以使用for循环,运行10次。
import random

times = eval(input('请输入生成密码个数:'))
#密码字符库
se = "abcdefghijklmnopqrstuvwxyz"
sn = "123456789"
#将密码可选字符以列表形式储存
l = list(se) + list(sn)

for i in range(times):
    p = random.choices(l,k=8)
    password =  "".join(p) #组成一个字符串
    print("password{}:{}".format(i+1,password))
  • 小结:随机从列表中取数,random库有两种方式:
random模块常用函数 功能描述 不同点
random.choices(seq, weights=None, cum_weights=None, k=1) 从 seq 序列中抽取 k 个元素,还可通过 weights 指定各元素被抽取的权重(代表被抽取的可能性高低)。 它实际选了k次,每次选后会放回,所以会出现同一个元素多次被选中的情况
random.sample(population, k) 从 population 序列中随机抽取 k 个独立的元素。 一次选取K个元素,所以选出的K个元素不相同

4.重复元素判定。编写一个函数,接收列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和输出测试结果的程序。

  • 思路:判断列表中是否有重复的元素,可以先用集合{},若有相同的元素,集合的唯一性会将之排除。然后通过判断列表和集合的长度是否相等,来判断是否有元素出现不止一次。
def Same_Func(l):
    s = set(l)
    if len(l) != len(s)
        return True
lt = input("请输入一个列表:")
print(Same_Func(lt))
print(lt) #查看原来列表的值是否改变

其他方法

  • 排序数组,然后访问数组,判断相邻元素是否相等
def ContainsDuplicate(nums):
    # type nums: List[int]
    #rtype: bool
    nums.sort() #对素组列表排序
    count = 0
    while count < len(nums)-1:
        if nums[count]==nums[count+1]: 
            return True 
        count += 1
    return False
  • 分析:这种方法在生活中常常会用到,但这种方法只能判断数组的列表,如果列表中有字符串,就不行了。
  • 可以做一些修改,先用ord()将列表中的每一个元素转为Unicode编码,然后排序。

5.重复元素判定续。利用集合的无重复性改编上一个程序,获得一个更快更简洁的版本。
*看来上题希望我用其他方法

def Same_Func(l):
    s = set(l)
    if len(l) != len(s)
        return True
lt = input("请输入一个列表:")
print(Same_Func(lt))
print(lt) #查看原来列表的值是否改变

你可能感兴趣的:(Python)