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

 

posted @ 2021-09-08 19:39  空-山-新-雨  阅读(158)  评论(0编辑  收藏  举报