小言_互联网的博客

课上练习

416人阅读  评论(0)

习题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
查看评论
* 以上用户言论只代表其个人观点,不代表本网站的观点或立场