按要求实现程序功能

(1)定义一个函数prime判断某个整数是否为素数;

(2)然后从键盘输入一行字符串,将其中的连续数字依次提取出来形成一个列表。例如,字符串“ab12cd34fg67”按要求提取后形成列表[12,34,67];

(3)将列表中的所有非素数改为0(要求用prime函数判断列表中的元素是否为素数);

(4)输出原始字符串及修改前、修改后的列表。提示:可以用s.isdigit()判断s是否为数字字符(串)


题目思路

(1)首先我们先定义一个判断素数的函数

        质数又称素数。一个大于1的自然数,除了1和它自身外,不能被其他自然数整除的数叫做质数;否则称为合数(规定1既不是质数也不是合数)。

基本判断思路:

在一般领域,对正整数n,如果用2到√n之间的所有整数去除,均无法整除,则n为质数。

质数大于等于2 不能被它本身和1以外的数整除


 下面这一部分代码就是用来判断素数的,flag作为一个标志,首先给flag赋值为False,如果在2到√n之间有一个数能被这个数整除,那么他就不是素数,flag=True。

import math,re
def prime(num):#判断是否为素数
    flag = False
    if num > 1:
        for i in range(2, math.floor(math.sqrt(num))):
            if (num % i) == 0:#判断能否被整除
                flag = True
                break    #若能被整除,则跳出循环
    if flag:
        print(num, "不是素数")
    else:
        print(num, "是素数")
    return flag

(2)然后我们需要判断数字字符和中文字符,将数字导入列表中       

代码并没有使用 s.isdigit() 区分数字字符和英文字符,而是直接使用 re.findall() 配合正则表达式进行文本提取。

(3)对数字列表中不为素数的改为0


代码

import math,re
def prime(num):#判断是否为素数
    flag = False
    if num > 1:
        for i in range(2, math.floor(math.sqrt(num))):
            if (num % i) == 0:
                flag = True
                break
    if flag:
        print(num, "不是素数")
    else:
        print(num, "是素数")
    return flag
s = input("请输入字符串:")
sList = re.findall(r'(\d+)', s)#用正则表达式提取数字
sNum = [int(x) for x in sList]
y = lambda x: 0 if prime(x) else x
sNew = [y(x) for x in sNum]
print(sNum) 
print(sNew)

不会正则表达式的可以看下面的

import math


def prime(num):  # 判断是否为素数
    flag = False
    if num > 1:
        for i in range(2, math.floor(math.sqrt(num))):
            if (num % i) == 0:
                flag = True
                break
    if flag:
        print(num, "不是素数")
    else:
        print(num, "是素数")
    return flag


s = input("请输入字符串:")
sList = []
i, j, n = 0, 0, len(s)
while i < n:  # 循环条件
    if s[i].isdigit() == False:
        i += 1
    else:
        j = i+1
        while s[j].isdigit():
            if j == n-1:
                x = s[i:]
                break
            j += 1
        else:
            x = s[i:j]
        sList.append(x)
        i = j+1


sNum = [int(x) for x in sList]
def y(x): return 0 if prime(x) else x  # 将不是素数的变成0


sNew = [y(x) for x in sNum]
print(sNum)
print(sNew)
# ab12cd34fg67