习题
习题一
题目要求
需要统计一个源文本文件中每个单词出现的次数,并将结果写入另一个目标文件。
解题过程
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,确实无法找到哪里有错,还望大佬能够指点迷津!