本文考虑了列表中元素为整数的情况,提出了两种方法用于解决pop()或remove()函数使用后list发生改变,影响迭代的问题。
使用了 定义全局变量,异常处理等方法编写程序。
方法一:赋给列表中的素数以特殊值,之后统一删除特殊值
注意:特殊值选取应当与列表中元素的类型不同,防止误删列表中的元素
def Prime_del(list):
#pop()或remove()之后list已经发生改变,继续迭代会出现问题。
for i in range(0,len(list)):
if Prime_judge(list[i]) and list[i]>1:
list[i]=0.1
while 0.1 in list:
list.remove(0.1)
print(list)
方法二:使用两个变量
def Prime_del_2(list):
#pop()或remove()之后list已经发生改变,继续迭代会出现问题。
j = 0
for i in range(len(list)) and list[i]>1:
if list[j] == value:
list_i.pop(j)
else:
j += 1
print(list)
通过定义全局变量和异常处理使得列表中出现<2的元素时会提醒素数范围,并且当出现多个元素时也只进行一次提醒。
def Prime_judge(data):
try:
if data<=1:
raise Exception("素数指的是在正整数范围内,大于1并且只能被1和自身整除的数")
else:
for i in range(2,data):
if(data%i==0):
return False
return True
except Exception as e:
global raise_judge_once
if raise_judge_once == 1:
raise_judge_once=0;
print(e)
程序如下
raise_judge_once = 1#在列表中含有多个<=1的数时,仅提示一次素数范围
def Prime_judge(data):
try:
if data<=1:
raise Exception("素数指的是在正整数范围内,大于1并且只能被1和自身整除的数")
else:
for i in range(2,data):
if(data%i==0):
return False
return True
except Exception as e:
global raise_judge_once
if raise_judge_once == 1:
raise_judge_once=0;
print(e)
def Prime_del(list):
#pop()或remove()之后list已经发生改变,继续迭代会出现问题。
#方法一:赋给列表中的素数以特殊值,之后统一删除特殊值
for i in range(0,len(list)):
if Prime_judge(list[i]) and list[i]>1:
list[i]=0.1
while 0.1 in list:
list.remove(0.1)
print(list)
# def Prime_del_2(list):
# #pop()或remove()之后list已经发生改变,继续迭代会出现问题。
# #方法二:使用两个变量
# j = 0
# for i in range(len(list)) and list[i]>1:
# if list[j] == value:
# list_i.pop(j)
# else:
# j += 1
# print(list)
number=list(map(int,input("输入数字,以空格分开").split(" ")))
Prime_del(number)