当前位置:   article > 正文

2021年10月4日“Python 每日一练” 答案+分析_python中从键盘输入一个包含有英文字母、数字、空格和其它字符的字符串,并分别实

python中从键盘输入一个包含有英文字母、数字、空格和其它字符的字符串,并分别实

 1.从键盘输入一个包含有英文字母、数字、空格和其它字符的字符串,并分别实现下面的功能:

1)统计字符串中出现2次的英文字母(区分大小写);

2)统计字符串中出现n次的数字,n从键盘输入。

  1. #第一题
  2. s=input('input a string:\n') #输入一个字符串
  3. dict1={}#定义一个空字典
  4. for c in s:#遍历字符串
  5. if c.isalpha():#判断c是否为字母
  6. if c not in dict1.keys():#判断字母c是不是第一次存入字典dict1。是,就存入键为c、值为1的字典元素
  7. dict1[c] = 1
  8. else:#否,就将键为字母c的值加1
  9. dict1[c] += 1
  10. for key in dict1.keys():#遍历字典的值
  11. if dict1[key]==2:#判断字母是否出现2次。是,就输出该字母
  12. print(key)
  13. #第二题
  14. s=input('input a string:\n')
  15. n=int(input('input a n:\n'))
  16. dict2={}
  17. for c in s:
  18. if c.isdigit():
  19. if c not in dict2.keys():
  20. dict2[c] = 1
  21. else:
  22. dict2[c] += 1
  23. for key in dict2.keys():
  24. if dict2[key]==n:
  25. print(key)

分析:

        第一题  计算字母出现的次数,利用了字典的键值对的特点。先用isalpha()判断是否为字母,再判断字母是否已经存在字典的键里。不在,就将字母存入字典的键,并将键的值置1。在,就将键的值加1。字典中存入的都是字母,只要判断键的值是否为2,就能知道出现2次的英文字母。

        第二题  只需要添加一句输入的整数n,并将判断键的值改为是否为n就可以,题一是题二的特例,将n换成了2。

2.随机生成一个具有 20 个元素的元素值在 1-10 之间的列表,输出连续最长数的个数。

  1. import random #导入随机数的库
  2. a = [random.randint(1,10) for i in range(20)] #生成20个1~10直接的任意数字(包括1和10),并存入列表a中。
  3. print(a) #打印列表a
  4. l = rl = 1 #记录 连续的次数 和 连续最大的次数
  5. n = rn = a[0] #记录当前数值和连续最长数字
  6. for v in a[1:]: #从列表a的第二个值开始遍历
  7. if v==n: #判断列表中 当前数字 和 当前数值 是否相等。是,将连续次数加1。
  8. l += 1
  9. if l>rl: #判断当前连续次数,是否大于连续最大的次数。是,就更新连续最大的次数,并更新连续最长的数字。
  10. rl = l
  11. rn = v
  12. else: #否,将连续次数置1,并将当前数值更新。
  13. l = 1
  14. n = v
  15. 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是否为数字字符(串)

  1. import math,re #导入math库、re模块
  2. def prime(num): #定义函数prime,用来判断是否为素数。
  3. flag = False #判断num是否为素数的标志位
  4. if num > 1: #素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
  5. for i in range(2, math.floor(math.sqrt(num))):# 判断2~num的开方向下取整,减少运算次数,提高效率
  6. if (num % i) == 0: #判断怒num是否可以整除i。是,就将flag置1,退出循环。
  7. flag = True
  8. break
  9. if flag: #flag为1,则输出num不是素数
  10. print(num, "不是素数")
  11. else: #flag为0,则输出num是素数
  12. print(num, "是素数")
  13. return flag #返回flag的值
  14. s = input("请输入字符串:") #输入字符串
  15. sList = re.findall(r'(\d+)', s) #利用正则表达式找出字符串中的连续数字
  16. sNum = [int(x) for x in sList] #将连续数字变成 整型,存入sNum
  17. y = lambda x: 0 if prime(x) else x #如果不是素数,则为0;是素数则,为自己本身
  18. sNew = [y(x) for x in sNum] #利用y的解析式,遍历sNum中的数。
  19. print(sNum) #打印sNum、sNew
  20. print(sNew)

分析:

        1)math库中含有许多数学函数,例如:向下取整foor、开方sqrt、三角函数等。

        2)re模块是python独有的匹配字符串的模块,该模块中提供的很多功能是基于正则表达式实现的,而正则表达式是对字符串进行模糊匹配,提取自己需要的字符串部分,他对所有的语言都通用。

        3)素数定义:素数一般指质数。质数是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。

        4)本题用到了,开平方的方法去判断是否为素数。 因为如果它不是质数,那么它一定可以表示成两个数(除了1和它本身)相乘,这两个数必然有一个小于等于它的平方根。只要找到小于或等于的那个就行了。简化程序运算次数,提高效率。

        如果你还有疑问,欢迎留言,我会尽可能解答。

       本次分享就这些了,如果你觉着对你有所帮助,点个赞呗,谢谢。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/601098
推荐阅读
相关标签