Python学习日记(day03)-----习题记录

99 阅读2分钟

习题

习题一

题目要求

需要统计一个源文本文件中每个单词出现的次数,并将结果写入另一个目标文件。

解题过程

with open('input.txt', 'r') as f1:
    list1 = f1.read()
words = list1.split(' ')	# 切割空格
dict1 = dict()
with open('output.txt', 'w') as f2:
    for word in words:
        if word in dict1:
            dict1[word] += 1
        else:
            dict1[word] = 1
        f2.write(f'{word}:{dict1[word]}\n')

心路历程

	一开始的想法是用2个列表来解决,list1用于获取前面的单词,list2用于获取后面单词出现的频率。
结果感觉不好做,涉及到较多的类型转换。于是想到了字典天然的‘key’:'value'。思路有了具体逻辑的
实现便比较轻松啦~

习题二

题目要求

写一个 lambda 表达式,用于将字符串列表中的字符串都转换为大写

解题过程

s1 = 'abc'

to_string = lambda s: s.upper()
up_string = [to_string(s) for s in s1]

print(up_string)

心路历程

这道题一开始做的时候,想法仍然是利用ACSII码来解决。结果没有想到python本身就有天然的string.upper()函数!
没关系,下次就会了!

习题三(最疑惑的一道题)

题目要求

请编写一个程序,实现从文本文件中读取数据,并进行简单的处理和输出。
首先,程序需要从文本文件中读取一串数字,每个数字占据一行。
文本文件的名称为 numbers.txt。
然后,程序需要将读取到的数字进行累加求和,并输出求和结果。

注意:

文本文件中的每行只包含一个整数。
文件中的数字可能有正数、负数或零。

解题过程(一开始就是这样写的)

f = open('numbers.txt', 'r', encoding='utf-8')
sum = 0
while True:
    try:
        sum += eval(f.readline())
    except Exception as e:
        break
    else:
        continue
print(f'总和为:{sum}')

用以上的代码的话,程序可以正常运行且结果一致。但是我发现没有写关闭文件,于是自然的在捕获异常的后面加上了finally: f.close() 如下代码所示:

f = open('numbers.txt', 'r', encoding='utf-8')
sum = 0
while True:
    try:
        sum += eval(f.readline())
    except Exception as e:
        break
    else:
        continue
    finally:
        f.close()
print(f'总和为:{sum}')

惊人的事情发生了,我的结果变成了只会显示第一行的数据了,并不是题目要求的累加和! 奈何本人刚学python,确实无法找到哪里有错,还望大佬能够指点迷津!