注:本文所有代码均经过Python 3.7实际运行检验,保证其严谨性。
Python基础练习题17
指定一个列表,列表里含有唯一一个只出现过一次的数字。写程序找出这个“独一无二”的数字。
解答:找出“唯一一个只出现过一次的数字”,就意味着列表中的其它数字都必定是重复的。这就涉及到去重的问题。
去重自然要想到集合,毕竟互异性是集合的两大特性之一(另一大特性当然是无序性)。
列表变成集合之后,所有重复的数字将不再有重复,而只剩下一个了,每个数字无论重复的还是“独一无二”的,都会只剩下一个。这时再将用集合中的元素和原列表中的元素一一比较,并在原列表中剔除集合中的元素,那么原列表经过剔除后剩下的必然是以前有重复的数字,而唯一被剔除的就是那个“独一无二”的数字。
接着把剔除后的列表再次转换为集合。这个集合和最开始的集合之间的区别就是,最开始的集合相比它多了一个元素:那个独一无二的数字。事情到这里就解决了。
l = [1, 3, 4, 3, 3, 5, 2, 4, 2, 5, 2]S = set(l) # l中的元素全部去重后形成一个集合S。print(S)# l去重后,每个元素再删除1次,则原来唯一的元素会被删除,且原来有重复的元素至少还会有1个留在新的l内。for i in S: l.remove(i) S1 = set(l) # S1为原先l中有重复的数字的集合。for i in S: # S为l中的数字全部去重后形成的集合。 if i not in S1: # 在S中但不在S1中的数字必然为l中没有重复的数字。 print(i)<<
Python基础练习题18
p是一个质数(素数),p+10和p+14也都是质数,p < 1000,求p的值。
# 设计一个判断是否质数的函数,是质数返回True,否则返回False。def isPrime(n): if type(n) != int or n <= 1: # 当n不是int型,或者n<=1时均不是素数。 return False for i in range(2, n): if n % i == 0: return False return Truefor p in range(2, 1000): if isPrime(p) and isPrime(p+10) and isPrime(p+14): print(p)<<<3
To be continued.