赞
踩
1.从键盘输入一个包含有英文字母、数字、空格和其它字符的字符串,并分别实现下面的功能:
1)统计字符串中出现2次的英文字母(区分大小写);
2)统计字符串中出现n次的数字,n从键盘输入。
- #第一题
- s=input('input a string:\n') #输入一个字符串
- dict1={}#定义一个空字典
- for c in s:#遍历字符串
- if c.isalpha():#判断c是否为字母
- if c not in dict1.keys():#判断字母c是不是第一次存入字典dict1。是,就存入键为c、值为1的字典元素
- dict1[c] = 1
- else:#否,就将键为字母c的值加1
- dict1[c] += 1
- for key in dict1.keys():#遍历字典的值
- if dict1[key]==2:#判断字母是否出现2次。是,就输出该字母
- print(key)
- #第二题
- s=input('input a string:\n')
- n=int(input('input a n:\n'))
- dict2={}
- for c in s:
- if c.isdigit():
- if c not in dict2.keys():
- dict2[c] = 1
- else:
- dict2[c] += 1
- for key in dict2.keys():
- if dict2[key]==n:
- print(key)
分析:
第一题 计算字母出现的次数,利用了字典的键值对的特点。先用isalpha()判断是否为字母,再判断字母是否已经存在字典的键里。不在,就将字母存入字典的键,并将键的值置1。在,就将键的值加1。字典中存入的都是字母,只要判断键的值是否为2,就能知道出现2次的英文字母。
第二题 只需要添加一句输入的整数n,并将判断键的值改为是否为n就可以,题一是题二的特例,将n换成了2。
2.随机生成一个具有 20 个元素的元素值在 1-10 之间的列表,输出连续最长数的个数。
- import random #导入随机数的库
- a = [random.randint(1,10) for i in range(20)] #生成20个1~10直接的任意数字(包括1和10),并存入列表a中。
- print(a) #打印列表a
- l = rl = 1 #记录 连续的次数 和 连续最大的次数
- n = rn = a[0] #记录当前数值和连续最长数字
- for v in a[1:]: #从列表a的第二个值开始遍历
- if v==n: #判断列表中 当前数字 和 当前数值 是否相等。是,将连续次数加1。
- l += 1
- if l>rl: #判断当前连续次数,是否大于连续最大的次数。是,就更新连续最大的次数,并更新连续最长的数字。
- rl = l
- rn = v
- else: #否,将连续次数置1,并将当前数值更新。
- l = 1
- n = v
- print(f'连续最长的数是{rn},连续了{rl}次') #打印 连续最长的数、连续次数
分析:
1)列表解析式去产生一个随机数列表a。
2)randint()函数产生随机数,random()是不能直接访问的,需要导入 random 模块,然后通过 random 静态对象调用该方法。
3.简答题 (1)定义一个函数prime判断某个整数是否为素数; (2)然后从键盘输入一行字符串,将其中的连续数字依次提取出来形成一个列表。例如,字符串“ab12cd34fg67”按要求提取后形成列表[12,34,67]; (3)将列表中的所有非素数改为0(要求用prime函数判断列表中的元素是否为素 数); (4)输出原始字符串及修改前、修改后的列表。 提示:可以用s.isdigit()判断s是否为数字字符(串)
- import math,re #导入math库、re模块
- def prime(num): #定义函数prime,用来判断是否为素数。
- flag = False #判断num是否为素数的标志位
- if num > 1: #素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
- for i in range(2, math.floor(math.sqrt(num))):# 判断2~num的开方向下取整,减少运算次数,提高效率
- if (num % i) == 0: #判断怒num是否可以整除i。是,就将flag置1,退出循环。
- flag = True
- break
- if flag: #flag为1,则输出num不是素数
- print(num, "不是素数")
- else: #flag为0,则输出num是素数
- print(num, "是素数")
- return flag #返回flag的值
- s = input("请输入字符串:") #输入字符串
- sList = re.findall(r'(\d+)', s) #利用正则表达式找出字符串中的连续数字
- sNum = [int(x) for x in sList] #将连续数字变成 整型,存入sNum
- y = lambda x: 0 if prime(x) else x #如果不是素数,则为0;是素数则,为自己本身
- sNew = [y(x) for x in sNum] #利用y的解析式,遍历sNum中的数。
- print(sNum) #打印sNum、sNew
- print(sNew)
分析:
1)math库中含有许多数学函数,例如:向下取整foor、开方sqrt、三角函数等。
2)re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。
3)素数定义:素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
4)本题用到了,开平方的方法去判断是否为素数。 因为如果它不是质数,那么它一定可以表示成两个数(除了1和它本身)相乘,这两个数必然有一个小于等于它的平方根。只要找到小于或等于的那个就行了。简化程序运算次数,提高效率。
如果你还有疑问,欢迎留言,我会尽可能解答。
本次分享就这些了,如果你觉着对你有所帮助,点个赞呗,谢谢。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。