习题1. 任意给定一个集合,按照包含元素数量从小到大,列出该集合的所有真子集
"""
结题思路,以包含3个元素的集合{"a", "b", "c"}为例
一个集合中的元素数量为N,那么其包含子集的数量为2^N
包含0个元素
□ □ □ 000 包含0个1
包含1个元素
□ □ "c" 001 包含1个1
□ "b" □ 010
"a" □ □ 100
包含2个元素
□ "b" "c" 011 包含2个1
"a" "b" □ 110
"a" □ "c" 101
包含3个元素
"a" "b" "c" 111 包含3个1
"""
SpecialSet = {"a", "b", "c", "d", "e"}
N = len(SpecialSet)
SpecialList = list(SpecialSet)
# 按照集合包含元素数量遍历
for ElementNum in range(N+1):
print("含有", ElementNum, "个元素的子集")
for Index in range(2**N):
IndexBinStr = str(bin(Index)) # 将Index转换为二进制数字
IndexBinStr = IndexBinStr.replace("0b", "") # 去掉二进制数前面的0b
IndexBinStr = str("0")*(N - len(IndexBinStr)) + IndexBinStr # 前面补0 , 形成一个N位的二进制
"""
求解其中1的个数,判断是否与子集元素个数相等
"""
if len(IndexBinStr.replace("0", "")) == ElementNum:
# 根据IndexBunStr的位置判断入选元素
subset = {SpecialList[Index] for Index in range(0, len(SpecialList)) if IndexBinStr[Index] == '1'}
print(subset)
习题2. 求出1~10000中所有由且仅由3,6,9三个数字构成的数之和。
说明:
693、3396、963都是由且仅由3、6、9三个数字构成,符合要求;
1235、968不是全由3、6、9三个数字构成,不符合要求;
669不包含数字3,不符合要求。
Sum = 0
SpecialSet = {3, 6, 9}
for num in range(0, 10001):
Set = set(str(num))
if Set == SpecialSet:
Sum += num
else:
continue
print(Sum)
Out:
243972
习题3. 求出1~10000中所有由3或6或9三个数字构成的数之和。
说明:
3、33、396、96、999都是由3或6或9三个数字构成的数。
Sum = 0
Set1 = {"3", "6", "9"}
for num in range(1, 10001):
Set = set(str(num))
if Set <= Set1:
Sum += num
else:
continue
print(Sum)
Out:
558540
习题4. 求出1~10000中所有不包含3或6或9三个数字构成的数之和。
说明:
17、25、587不包含3或6或9三个数字构成的数,符合要求;
17、25、587不包含3或6或9三个数字构成的数,不符合要求。
Sum = 0
Set1 = {"3", "6", "9"}
for num in range(1, 10001):
Set = set(str(num))
if Set & Set1 == set():
Sum += num
else:
continue
print(Sum)
Out:
10298971
习题5. 对于给定的整数列表,例如[12,32,43,12,33,90,100,32],生成一个字典,字典中包含两项:一项是由列表中大于40的元素组成的列表,另一项是由列表中小于40的元素组成的列表,保持原列表中元素的先后顺序不变。
"""
注意等于40的情况
"""
List = [12, 32, 43, 12, 33, 90, 100, 32]
NewList1 = []
NewList2 = []
for ii in List:
if ii<40:
NewList1.append(ii)
elif ii>40:
NewList2.append(ii)
else:
continue
Dict1 = {"More": NewList1}
Dict2 = {"Less": NewList2}
print(Dict1)
print(Dict2)
Out:
{'More': [12, 32, 12, 33, 32]}
{'Less': [43, 90, 100]}
习题6. 任意给定一个字符串:
1)判断该字符串是否为纯英文字符构成;
2)判断该字符串是否为纯小写英文字符构成;
3)判断该字符串是否为纯大写英文字符构成;
4)判断该字符串中包含多少个不同英文字母(大小写不同);
5)判断该字符串中包含多少个不同小写英文字母;
6)判断该字符串中包含多少个不同大写英文字母;
说明:
“abcbcDEDE66”
不是纯英文字母构成、不是纯小写英文字母构成、不是纯大写英文字母构成
包含5个字母:a,b,c,D,E
包含3个小写字母:a,b,c
包含2个大写字母:D,E
String = "abcbcDEDE66"
StringSet = set(String)
# 小写字母的ASCII码97(a)~122(z)
LetterSetLowerSet = {chr(ASCIINumber) for ASCIINumber in range(97, 122+1)}
"""
chr() 用一个范围在 range(256)内的(就是0~255)整数作参数,返回一个对应的字符。
chr(48).chr(49),chr(97)对应0 1 a
"""
# 大写字母的ASCII码65(A)~90(Z)
LetterSetCapital = {chr(ASCIINumber) for ASCIINumber in range(65, 90+1)}
# 大小写字母集合 并集
LetterSet = LetterSetLowerSet | LetterSetCapital
# 判断该字符串是否为纯英文字母构成
if StringSet <= LetterSet:
print("给出的字符是全部都由字母组成")
else:
print("给出的字符不是都由纯字母组成")
# 判断该字符串是否全部由小写字母组成
if StringSet <= LetterSetLowerSet:
print("给出的字符串是由纯小写字母组成")
else:
print("给出的字符串不是由纯小写字母组成")
# 判断该字符串是否全部由大写字母组成
if StringSet <= LetterSetCapital:
print("给出的字符串是由纯大写字母组成")
else:
print("给出的字符串不是由纯大写字母组成")
# 给出该字符串包含多少个不同小写字母
print("给出的字符串中小写字母的数量",\
len(StringSet & LetterSetLowerSet))
# 给出该字符串包含多少个不同大写字母
print("给出的字符串中大写字母的数量",\
len(StringSet & LetterSetCapital))
Out:
给出的字符不是都由纯字母组成
给出的字符串不是由纯小写字母组成
给出的字符串不是由纯大写字母组成
给出的字符串中小写字母的数量 3
给出的字符串中大写字母的数量 2
习题7. 求出1~10000所有回文数的和。
说明:
所谓回文数指的是2332,121,33,555,6666,这种从左读和从右读完全一样的数。
Sum = 0
for i in range(1, 10000):
CharI = str(i)
if CharI == CharI[::-1]:
Sum += i
print(Sum)
Out
545040
习题8. 生成一个列表X,X中的元素由1~1000中所有包含数字3或3的倍数组成,即[3,6,9,12,13……],并且删除列表中索引为0,5,10,15,20,25,……的元素。
# 方法一
x = [i for i in range(1, 1000) if ('3' in str(i)) or (i % 3 == 0)]
print(x)
# 方法二
x = [i for i in range(1, 1000) if ('3' in str(i)) or (i % 3 == 0)]
for Index in range(len(x), 0-1, -1): # 注意:删除元素后,元素的索引发生变化
if 0 == Index % 5:
x.pop(Index)
print(x)
习题9.求出所有水仙数的和。水仙数是指一个三位数,其各位数立方和等于该数。
Sum = 0
for i in range(100, 1000):
StrI = str(i)
if int(StrI[0]) ** 3 + int(StrI[1]) ** 3 + int(StrI[2]) ** 3 == i:
Sum += i
print(Sum)
Out:
1301
习题10.有1,2,3,4个数字,能组成多少个互不相同且无重复数字的三位数,都是多少?
Num = 0
for x in range(1, 5):
for y in range(1, 5):
for z in range(1, 5):
if (x != y) and (y != z) and (x != z):
Num += 1
print("{0}{1}{2}" .format(x, y, z))
print("Num=", Num)
习题11.判断101-200之间有多少个素数,并输出所有素数。
for i in range(101, 201):
for j in range(2, i):
if (0 == i % j):
break
else:
print(i)
习题12.一个数如果恰好等于它的因子之和,这个数就称为"完数"。例如6=1+2+3.编程找出1000以内的所有完数
for i in range(1, 1000):
sum = 0
for j in range(1, i):
if 0 == i % j:
sum += j
if i == sum:
print(i)
转载:https://blog.csdn.net/weixin_44054487/article/details/102470527