编程题
T1 英文字符频率统计。编写一个程序,对给定字符串中出现的a-z字母频率进行分析,忽略大小写,采取降序方式输出。
str=input() str=str.lower() a=dict() for j in str: a[j]=a.get(j,0)+1 items=list(a.items()) length=len(items) items.sort(key=lambda x:x[1],reverse=True)#根据第二列进行排序,并且是降序 for i in range(length): alphbet,nums=items[i] print("{0:<3}{1:>5}".format(alphbet,nums))总结: 参考了书上的文本统计实例。 重点:dict→list;sort()和lambda保留字
T2 中文字符频率统计。编写一个程序,对给定字符串中出现的全部字符(含中文字符)频率进行分析,采用降序方式输出.
str=input() a=dict() exstr=",。!?、()【】<>《》=:+-*—“”…" for ch in exstr: str=str.replace(ch,'') for j in str: a[j]=a.get(j,0)+1 items=list(a.items()) length=len(items) items.sort(key=lambda x:x[1],reverse=True)#根据第二列进行排序,并且是降序 for i in range(length): alphbet,nums=items[i] print("{0:<3}{1:>5}".format(alphbet,nums))总结: 和第一题有一定的相似之处,但是还考虑到给定字符中可能存在符号,利用replace()进行替代。
T3 随机密码生成。编写程序在26个字母大小写和9个数字组成的列表中随机生成10个8位密码。
import random list=[] for strn in range(65,91):#strn为字母对应的ascll码,将字母添加进list list.append(chr(strn)) list.append(chr(strn).lower()) for nums in range(0,10):#将数字添加进list list.append(nums) print(list) for i in range(10): for j in range(8): print(random.choice(list),end='') print('')#print会自动换行总结: 第一次写的时候发现bug:在for循环里用list.append()的时候, 最终的list只保留最后一次循环。查了许多博客,明白之前写在append里面的都是一个地址,每次改变都会覆盖上一个值。直接将chr(strn)直接放进append里面就可以解决问题。
https://www.cnblogs.com/iqunqunqun/p/9249888.html
T4 重复元素判定。编写一个函数,接收列表作为参数,如果一个元素在列表中出现了不止一次,则返回True,但不要改变原来列表的值。同时编写调用这个函数和输出测试结果的程序。
def repeat_list(list): s=set(list) for i in s: sum=list.count(i) if sum>1: return True list=['a','a','a','c'] print(repeat_list(list))总结: 唔,set()可以判重。
T5 重复元素判定续。利用集合的无重复性改编上一个程序,获得一个更快更简洁的版本。
def repeat_list(list): s=set(list) for i in s: sum=list.count(i) if sum>1: return True list=['a','a','a','c'] print(repeat_list(list))总结: 唔,怎么办,前一题就是用set?!太不严谨了,前一题应该写禁止使用集合方法!