2021年10月4日“Python 每日一练” 答案+分析

 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和它本身)相乘,这两个数必然有一个小于等于它的平方根。只要找到小于或等于的那个就行了。简化程序运算次数,提高效率。

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

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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花落指尖❀

您的认可是小浪宝宝最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值