002、for迴圈,陣列,操作檔案 ( 猴子第一天摘桃數量 、等 )
阿新 • • 發佈:2021-09-08
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]))