生成有100个随机正整数的列表,随机数小于1000,遍历列表,删除其中的素数,然后输出最大值,将剩余数值降序输出
随机数的生成需要使用random模块
lst = [random.randint(2, 999) for i in range(100)]
素数,是大于1的数,除了1和自身,没有其他的因数,大白话就是除了1和自身,除以其他的数都得不到整数结果
假设一个数值是M,那么从2开始到M//2 ,用M逐个对这些数取模,如果得到0,就说明可以整除,M就不是素数
为啥只遍历到M//2 呢,因为大于M//2的数,除了M意外,其他的肯定不能被整除,简单的数学知识,不必再解释
def is_prime(number):
for i in range(2, number/2):
if number % 2 == 0:
return False
return True
想要删除素数,千万不能这么写
for number in lst:
if is_prime(number):
lst.remove(number)
在使用for循环对列表进行遍历时,本质上是在根据数据的索引获取数据,如果使用remove方法删除的某个数据,那么被删除的数据后面的数据的索引都发生了改变,会影响for循环,导致紧挨着你删除的数据的下一个数据无法遍历到,下面的这个例子可以很清楚的观察到这个情况
lst = [2, 4, 6, 8, 10, 12]
for number in lst:
print(number)
if number % 2 == 0:
lst.remove(number)
print(lst)
不能用remove,咋办呢,可以使用列表推导式,也可以使用一个新的列表来存储非素数
lst = [item for item in lst if not is_prime(item)]
或者
new_lst = []
for item in lst:
if not is_prime(item):
new_lst.append(item)
最后找出列表最大值,可以使用max内置函数,也可以对列表进行排序,从大到小
import random
# 生成100个随机正整数
lst = [random.randint(1, 1000) for i in range(100)]
def is_prime(number):
"""
判断一个正整数是否为素数
:param number:
:return:
"""
for i in range(2, number//2):
if number % i == 0:
return False
return True
# 过滤素数
lst = [item for item in lst if not is_prime(item)]
# 从大到小排序
lst.sort(reverse=True)
print(lst[0]) # 最大值
# 倒序输出
for item in lst:
print(item)
QQ交流群: 211426309