數據結構字符串練習


1、用戶輸入一個數字
(1)判斷是幾位數
(2)打印每一位數字及其重複的次數
(3)依次打印每一位數字,順序個、十、百. . .位
    num = input(">>>")
    for i in num:
        print(i, end=' ')
    
    #打印重複次數的方法
    (1)判斷0-9的數字在字符串中出現的次數,每一次迭代都是用count,都是(O)問題
    counter = [0]*10
    for i in range(10): # n*10模式
        counter[i] = num.count(str(i))
        if counter[i]:
            
    (2)迭代字符串本身的字符 # n*n模式
    counter = [0]*10
    for x in num:
        i = int(x)
        if counter[i] == 0:
            counter[i] = num.count(x)
            
    (3)迭代字符串本身的字符
    counter = [0]*10 # n模式
    for x in num:
        i = int(x)
        counter[i] += 1
    

    for i in range(len(counter)):
        if counter[i]:
            print("The count of {} is {}".format(i,counter[i]))
    
    #倒序打印方法
    (1)倒序打印1
    for i in range(len(num),0,-1):
        print(num[i-1], end=' ')
    print()
    (2)倒序打印2
    for i in reversed(num):
        print(i, end=' ')
    print()
    (3)負索引方式打印
    for i in range(len(num)):
        print(num[-i-1], end=' ')
    print()
2、輸入5個數字,打印每個數字的位數,將這些數字排序打印,要求升序打印
    num = []
    length = len(num)
    for i in range(5):
        num.append(int(input('{}: '.format(i))))
        print("Number of digits:", len(str(num[i])))
    
    #冒泡法
    for i in range(length):
        flag = False
        for j in range(length-i-1):
            if num[j] > num[j+1]:
                num[j], num[j+1] = num[j+1], num[j]
                flag = True
            if not flag:
                break
    print(num)

    #sort方法排序
    lst = num.copy()
    lst.sort() #就地修改
    print(lst)

四、數據結構集合練習

1、共同好友:你的好友A、B、C,他的好友C、B、D,求共同好友
    {"A","B","C"}&{"C","B","D"}

2、微信羣提醒:XXX與羣裏其他人都不是微信朋友關係
    if{"XXX","sa","dd"}&{"b","c","d"} == set():#sa、dd是XXX的微信好友列表
        print("XXX 與羣裏其他人都不是微信朋友關係")

3、權限判斷
    有一個API,要求權限同時具備A、B、C才能訪問,用戶權限是B、C、D,判斷用戶是否能夠訪問該API
        API集合爲A,權限集合爲P
        A - P = set()
        A >= P
        A & P = A
    有一個API,要求權限具備A、B、C任意一項就可訪問,用戶權限是B、C、D,判斷用戶是否能夠訪問該API
        API集合爲A,權限集合爲P
        A & P != set()

4、一個總任務列表,存儲所有任務。一個已完成的任務列表。找出爲未完成的任務
    總任務列表集合P,已完成的集合爲A
    則未完成的爲:P - A

5、隨機產生2組各10個數字的列表,如下要求:
    (1)每個數字取值範圍[10,20]
    (2)統計20個數字中,一共有多少個不同的數字?
    (3)2組中,不重複的數字有幾個?分別是幾個?
    (4)2組中,重複的數字有幾個?分別是幾個?
    import random
    lst1 = []
    lst2 = []
    for i in range(10):
        lst1.append(radom.randrange(10,21))
        lst2.append(radom.randrange(10,21))
    print(lst1)
    print(lst2)
    #一共有多少個不同的數字
    set(lst1) | set(lst2)
    #不重複的數字
    set(lst1) ^ set(lst2)
    #重複的數字
    set(lst1) & set(lst2)

五、簡單選擇排序

1、一元簡單選擇排序
    lst = [1,3,6,5,2,4,7,9]
    length = len [lst]
    for i in range(length):
        maxindex = i
        for j in range(i+1,length):
            if lst[j] > lst[i]:
                maxindex = j
        if i != maxindex:
            lst[i], lst[maxindex] = lst[maxindex], lst[i]
    print(lst)

2、二元簡單選擇排序
    lst = [1,3,6,5,2,4,7,9]
    length = len(lst)
    for i in range(length//2): # 兩邊一起排序,所以少一半
        maxindex = i
        minindex = -i-1或 length-1-i
        minorigin = minindex
        for j in range(i+1,length-i): # 每次左右固定一個,就少比較1個
            if lst[j] > lst[maxindex]:
                maxindex = j
            if lst[-j-1或 length-1-j] < lst[minindex]:
                minindex = -j-1 或 length-1-j
        if lst[maxindex] == lst[minindex]: # 元素全相同
            break
        if i != maxindex:
            lst[i], lst[maxindex] = lst[maxindex], lst[i]
            # 如果最小值被交換過,要更新索引
            if i == length + minindex 或 i == minindex:
                minindex = maxindex - length 或 maxindex
        # 最小值索引不同,但值相同就沒必要交換了
        if minorigin != minindex and lst[minorigin] != lst[minindex]:
            lst[minorigin], lst[minindex] = lst[minindex], lst[minorigin]
    print(lst)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章