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]))