1. 程式人生 > 其它 >002、for迴圈,陣列,操作檔案 ( 猴子第一天摘桃數量 、等 )

002、for迴圈,陣列,操作檔案 ( 猴子第一天摘桃數量 、等 )

print('\n================= 第1題 ======================\n')
"""
1、list1=3.4,5.6,7,8,9,3 請輸出所有list元素中相加之和為12的兩個數字組含。注:3、9和9,3為同一組,需要去重輸出
"""

list1 = [3.4, 5.6, 7, 8, 9, 3, 4, 9, 8]

temp_list = []
for i in range(len(list1)):
    for j in range(i+1, len(list1)):
        if list1[i] + list1[j] == 12:
            t 
= (list1[i], list1[j]) temp_list.append(t) print(f'得到的臨時列表:{temp_list}') for i in range(len(temp_list)): for j in range(i+1, len(temp_list)): if temp_list[i][0] == temp_list[j][1]: temp_list.remove(temp_list[j]) print(f'得到的最終列表:{temp_list}') print('\n================= 第2題 ======================\n
') """ 2、請通過python實現以下需求: 同級目錄下存在一個 demo.txt 開啟一個文字檔案,讀取其內容,把其中的大寫字母修改為小寫字母,再寫入檔案覆蓋原內容。 """ new_list = [] with open('demo.txt', 'r') as f: temp_list = f.readlines() print(f'從demo.txt讀取出來的內容:{temp_list}') for item in temp_list: new_list.append(item.lower()) print(f'把大寫轉化成小寫後:{new_list}
') with open('demo.txt', 'w') as file: file.writelines(new_list) print('\n================= 第3題 ======================\n') """ 3、題目:猴子吃桃問題: 猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個,第二天早上又將剩下的桃子吃掉一半,多吃了一個。 以後每天早上都吃了前一天剩下的一半 在加一個。 到第10天早上想再吃時,見只剩下一個桃子了。 請通過一段通過程式碼來計算第一天摘了多少個桃子? 第一天摘桃:x個,吃了(x/2 + 1) ,剩下桃子:x - (x/2 + 1) = x/2 -1 第二天:吃桃:(x/2 -1)/2 +1 ,剩下桃子:(x/2 -1)/2 -1 = x/4 - 1/2 -1 = x/4 - 3/2 第三天:剩下桃子:(x/4 - 3/2)/2 -1 = x/8 - 3/4 -1 = x/8 - 7/4 第四天:剩下桃子:(x/8 - 7/4)/2 -1 = x/16 - 7/8 -1 以上可以看到: 第一天剩桃子:x/2 -1 = x/2 - 1/1 第二天剩桃子:x/4 -1 - 1/2 = x/4 - 3/2 第三天剩桃子:x/8 -1 - 3/4 = x/8 - 7/4 第四天剩桃子:x/16 -1 - 7/8 = x/16 - 15/8 第n天剩桃子: x/2**n - (((2**n)-1)/(2**(n-1))) 第9天剩桃子 1個: 第一天摘桃:x , 1 == (x/2**n) - (((2**n)-1)/(2**(n-1))) (1 + (((2**n)-1)/(2**(n-1))))*(2**n) = x """ n = 9 x = (1 + (((2 ** n) - 1) / (2 ** (n - 1)))) * (2 ** n) print(f'第一天摘了多少個桃子:{x}') # 菜鳥教程上的演算法: print('\n======菜鳥教程上的演算法=======\n') today_num = 1 for i in range(10, 0, -1): print(f'第{i}天桃子個數:{today_num}') yesterday_num = (today_num + 1) * 2 today_num = yesterday_num print('\n================= 第4題 ======================\n') """ 4、給定一個無序的整數陣列,找出其中沒有出現的最小的正整數 示例 1: [1,2,0] -> 3 示例 2: [3,4,-1, 1] -> 2 示例 3: [7,8,9,11,12] -> 1 解題思路提示:陣列長度為n,則沒出現的最小正整數一定在1-n之間 """ list_a = [1, 2, 0] list_b = [3, 4, -1, 1] list_c = [7, 8, 9, 11, 12] list_d = [1, 7, 8, 9, 11, 12] list_e = [1, 2, 3, 4] def find_min_int(l): for i in range(1, len(l)): if i not in l: return i return len(l) print(find_min_int(list_a)) print(find_min_int(list_b)) print(find_min_int(list_c)) print(find_min_int(list_d)) print(find_min_int(list_e))

執行結果如下:

D:\SkyWorkSpace\WorkSpace\Pytest\Temp\day06\venv\Scripts\python.exe D:/SkyWorkSpace/WorkSpace/Pytest/Temp/day06/test_mianshi/test_01.py

================= 第1題 ======================

得到的臨時列表:[(8, 4), (9, 3), (3, 9), (4, 8)]
得到的最終列表:[(8, 4), (9, 3)]

================= 第2題 ======================

從demo.txt讀取出來的內容:['abcd\n', 'efgh']
把大寫轉化成小寫後:['abcd\n', 'efgh']

================= 第3題 ======================

第一天摘了多少個桃子:1534.0

======菜鳥教程上的演算法=======

第10天桃子個數:1
第9天桃子個數:4
第8天桃子個數:10
第7天桃子個數:22
第6天桃子個數:46
第5天桃子個數:94
第4天桃子個數:190
第3天桃子個數:382
第2天桃子個數:766
第1天桃子個數:1534

================= 第4題 ======================

3
2
1
2
4

Process finished with exit code 0

參考答案如下:

"""
1、list1 = 3.4, 5.6, 7, 8, 9, 3
請輸出所有list元素中相加之和為12的兩個數字組含。注: 3、9
和9, 3
為同一組, 需要去重輸出
"""


def test_demo():
    list1 = [3, 4, 5, 6, 7, 8, 9, 3]
    result_list = []
    used_list = []
    for i in range(len(list1)):
        for k in range(i + 1, len(list1)):
            if list1[i] + list1[k] == 12:
                if list1[i] not in used_list:
                    result_list.append((list1[i], list1[k]))
                    used_list.append((list1[i]))
                    used_list.append(list1[k])
    print(result_list)
    return result_list


"""
2、請通過python實現以下需求:
開啟一個文字檔案,讀取其內容,把其中的大寫字母修改為小寫字母,再寫入檔案覆蓋原內容。
"""


def work5(file_path):
    # 以r模式開啟檔案
    with open(file_path, 'r', encoding='utf8') as f:
        # 讀取內容
        content = f.read()
        # 將內容中的大寫字母轉換為小寫
        new_content = content.lower()
    # 以W模式開啟檔案
    with open(file_path, 'w', encoding='utf8') as f:
        # 寫入內容
        f.write(new_content)


"""
3、題目:猴子吃桃問題:
猴子第一天摘下若干個桃子,當即吃了一半,還不過癮,又多吃了一個第二天早上又將剩下的桃子吃掉一半,多吃了一個。
以後每天早上都吃了前一天剩下的一半
在加一個。
到第10天早上想再吃時,見只剩下一個桃子了。

請通過一段通過程式碼來計算第一條摘了多少個桃子?
"""


def monkey_10():
    num = 1
    for i in range(10):
        print('第{}天的桃子數量:{}'.format(10 - i, num))
        num = (num + 1) * 2


monkey_10()

"""
4、  # /*給定一個無序的整數陣列,找出其中沒有出現的最小的正整數
# 示例 1: [1,2,0] -> 3
# 示例 2: [3,4,-1, 1] -> 2
# 示例 3: [7,8,9,11,12] -> 1
# */

解題思路提示:陣列長度為n,則沒出現的最小正整數一定在1 - n之間
"""


def find_smallest(l):
    for i in range(1, len(l)):
        if i not in l:
            return i
    return len(l)


print(find_smallest([1, 2, 0]))
print(find_smallest([3, 4, -1, 1]))
print(find_smallest([7, 8, 9, 11, 12]))