小E学Python PART1 NCRE二级

    xiaoxiao2021-04-15  271

    小E学Python PART1 NCRE二级_习题六

    写这篇的过程十分曲折,主要是用了Edge浏览器,真的很抓马,赶紧换了Google,不然会被气出痘痘哈哈哈 写的都很繁琐而且可能有BUG,要继续修修补补,望各位不吝赐教:)

    编程题

    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?!太不严谨了,前一题应该写禁止使用集合方法!


    最新回复(0)