2020年9月16日星期三

[課後作業] 第029講:文件:一個任務|課後測試題及答案

[課後作業] 第029講:文件:一個任務|課後測試題及答案




《零基礎入門學習Python》視頻下載地址:傳送門


動動手:

0.編寫一個程序,接受用戶的輸入並保存為新的文件,程序實現如圖:




1. 編寫一個程序,比較用戶輸入的兩個文件,如果不同,顯示出所有不同處的行號與第一個不同字符的位置,程序實現如圖:




2. 編寫一個程序,當用戶輸入文件名和行數(N)後,將該文件的前N行內容打印到屏幕上,程序實現如圖:




3. 呃,不得不說我們的用戶變得越來越刁鑽了。要求在上一題的基礎上擴展,用戶可以隨意輸入需要顯示的行數。(如輸入13:21打印第13行到第21行,輸入:21打印前21行,輸入21:則打印從第21行開始到文件結尾所有內容)




4. 編寫一個程序,實現“全部替換”功能,程序實現如圖:




5.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!


回复您的答案即可查看參考答案!


動動手答案:

本帖隱藏的內容

0.編寫一個程序,接受用戶的輸入並保存為新的文件。

代碼清單:
  1. def file_write(file_name):
  2.     f = open(file_name, 'w')
  3.     print('請輸入內容【單獨輸入\':w\'保存退出】:')

  4.     while True:
  5.         write_some = input()
  6.         if write_some != ':w':
  7.             f.write('%s\n' % write_some)
  8.         else:
  9.             break

  10.     f.close()

  11. file_name = input('請輸入文件名:')
  12. file_write(file_name)
複製代碼

   
1.編寫一個程序,比較用戶輸入的兩個文件,如果不同,顯示出所有不同處的行號與第一個不同字符的位置。

代碼清單:
  1. def file_compare(file1, file2):
  2.     f1 = open(file1)
  3.     f2 = open(file2)
  4.     count = 0 # 統計行數
  5.     differ = [] # 統計不一樣的數量

  6.     for line1 in f1:
  7.         line2 = f2.readline()
  8.         count += 1
  9.         if line1 != line2:
  10.             differ.append(count)

  11.     f1.close()
  12.     f2.close()
  13.     return differ

  14. file1 = input('請輸入需要比較的頭一個文件名:')
  15. file2 = input('請輸入需要比較的另一個文件名:')

  16. differ = file_compare(file1, file2)

  17. if len(differ) == 0:
  18.     print('兩個文件完全一樣!')
  19. else:
  20.     print('兩個文件共有【%d】處不同:' % len(differ))
  21.     for each in differ:
  22.         print('第%d 行不一樣' % each)
複製代碼

        
2.編寫一個程序,當用戶輸入文件名和行數(N)後,將該文件的前N行內容打印到屏幕上。

代碼清單:
  1. def file_view(file_name, line_num):
  2.     print('\n文件%s的前%s的內容如下:\n' % (file_name, line_num))
  3.     f = open(file_name)
  4.     for i in range(int(line_num)):
  5.         print(f.readline(), end= '')

  6.     f.close()

  7. file_name = input(r'請輸入要打開的文件(C:\\test.txt):')
  8. line_num = input('請輸入需要顯示該文件前幾行:')
  9. file_view(file_name, line_num)
複製代碼

         
3.呃,不得不說我們的用戶變得越來越刁鑽了。要求在上一題的基礎上擴展,用戶可以隨意輸入需要顯示的行數。(如輸入13:21打印第13行到第21行,輸入:21打印前21行,輸入21:則打印從第21行開始到文件結尾所有內容)

代碼清單:
  1. def file_view(file_name, line_num):
  2.     if line_num.strip() == ':':
  3.         begin = '1'
  4.         end = '-1'
  5.         
  6.     (begin, end) = line_num.split(':')

  7.     if begin == '':
  8.         begin = '1'
  9.     if end == '':
  10.         end = '-1'

  11.     if begin == '1' and end == '-1':
  12.         prompt = '的全文'
  13.     elif begin == '1':
  14.         prompt = '從開始到%s' % end
  15.     elif end == '-1':
  16.         prompt = '從%s到結束' % begin
  17.     else:
  18.         prompt = '從第%s行到第%s行' % (begin, end)

  19.     print('\n文件%s%s的內容如下:\n' % (file_name, prompt))

  20.     begin = int(begin) - 1
  21.     end = int(end)
  22.     lines = end - begin

  23.     f = open(file_name)  
  24.    
  25.     for i in range(begin): # 用於消耗掉begin之前的內容
  26.         f.readline()

  27.     if lines < 0:
  28.         print(f.read())
  29.     else:
  30.         for j in range(lines):
  31.             print(f.readline(), end='')
  32.    
  33.     f.close()

  34. file_name = input(r'請輸入要打開的文件(C:\\test.txt):')
  35. line_num = input('請輸入需要顯示的行數【格式如13:21 或:21 或21: 或: 】:')
  36. file_view(file_name, line_num)
複製代碼

        
4.編寫一個程序,實現“全部替換”功能。

代碼清單:

  1. def file_replace(file_name, rep_word, new_word):
  2.     f_read = open(file_name)

  3.     content = []
  4.     count = 0

  5.     for eachline in f_read:
  6.         if rep_word in eachline:
  7.             count = eachline.count(rep_word) #count感覺應該用這個
  8.             eachline = eachline.replace(rep_word, new_word)
  9.         content.append(eachline)   

  10.     decide = input('\n文件%s 中共有%s個【%s】\n您確定要把所有的【%s】替換為【%s】嗎?\n【YES/NO】:' \
  11.                    % (file_name, count, rep_word, rep_word, new_word))

  12.     if decide in ['YES', 'Yes', 'yes']:
  13.         f_write = open(file_name, 'w')
  14.         f_write.writelines(content)
  15.         f_write.close()

  16.     f_read.close()


  17. file_name = input('請輸入文件名:')
  18. rep_word = input('請輸入需要替換的單詞或字符:')
  19. new_word = input('請輸入新的單詞或字符:')
  20. file_replace(file_name, rep_word, new_word)
複製代碼



5.請寫下這一節課你學習到的內容:格式不限,回憶並複述是加強記憶的好方式!

小甲魚希望你認真對待作業就像你希望小甲魚推出高質量視頻一樣渴望^_^

• 任務:將文件(record.txt )中的數據進行分割並按照以下規律保存起來:
– 小甲魚的對話單獨保存為boy_*.txt 的文件(去掉“小甲魚”)
– 小客服的對話單獨保存為girl_*.txt 的文件(去掉“小客服”)
– 文件中總共有三段對話,分別保存為boy_1.txt, girl_1.txt boy_2.txt, girl_2.txt, boy_3.txt, gril_3.txt 個文件(提示:文件中不同的對話間已經使用“ ========== ” 分割
  1. 小客服:小甲鱼,今天有客户问你有没有女朋友?
  2. 小甲鱼:咦??
  3. 小客服:我跟她说你有女朋友了!
  4. 小甲鱼:。。。。。。
  5. 小客服:她让你分手后考虑下她!然后我说:"您要买个优盘,我就帮您留意下~"
  6. 小甲鱼:然后呢?
  7. 小客服:她买了两个,说发一个货就好~
  8. 小甲鱼:呃。。。。。。你真牛!
  9. 小客服:那是,谁让我是鱼C最可爱小客服嘛~
  10. 小甲鱼:下次有人想调戏你我不阻止~
  11. 小客服:滚!!!
  12. ================================================================================
  13. 小客服:小甲鱼,有个好评很好笑哈。
  14. 小甲鱼:哦?
  15. 小客服:"有了小甲鱼,以后妈妈再也不用担心我的学习了~"
  16. 小甲鱼:哈哈哈,我看到丫,我还发微博了呢~
  17. 小客服:嗯嗯,我看了你的微博丫~
  18. 小甲鱼:哟西~
  19. 小客服:那个有条回复“左手拿著小甲魚,右手拿著打火機,哪裡不會點哪裡,so easy ^_^”
  20. 小甲鱼:T_T
  21. ================================================================================
  22. 小客服:小甲鱼,今天一个会员想找你
  23. 小甲鱼:哦?什么事?
  24. 小客服:他说你一个学生月薪已经超过12k了!!
  25. 小甲鱼:哪里的?
  26. 小客服:上海的
  27. 小甲鱼:那正常,哪家公司?
  28. 小客服:他没说呀。
  29. 小甲鱼:哦
  30. 小客服:老大,为什么我工资那么低啊??是时候涨涨工资了!!
  31. 小甲鱼:啊,你说什么?我在外边呢,这里好吵吖。。。。。。
  32. 小客服:滚!!!
  1. f = open('record.txt')
  2. boy = []
  3. girl = []
  4. count = 1
  5. for each_line in f:
  6. if each_line[:6] != '======':
  7. (role, line_spoken) = each_line.split(':', 1)
  8. if role == '小甲鱼':
  9. boy.append(line_spoken)
  10. if role == '小客服':
  11. girl.append(line_spoken)
  12. else:
  13. file_name_boy = 'boy_' + str(count) + '.txt'
  14. file_name_girl = 'girl_' + str(count) + '.txt'
  15. boy_file = open(file_name_boy, 'w')
  16. girl_file = open(file_name_girl, 'w')
  17. boy_file.writelines(boy)
  18. girl_file.writelines(girl)
  19. boy_file.close()
  20. girl_file.close()
  21. boy = []
  22. girl = []
  23. count += 1
  24. file_name_boy = 'boy_' + str(count) + '.txt'
  25. file_name_girl = 'girl_' + str(count) + '.txt'
  26. boy_file = open(file_name_boy, 'w')
  27. girl_file = open(file_name_girl, 'w')
  28. boy_file.writelines(boy)
  29. girl_file.writelines(girl)
  30. boy_file.close()
  31. girl_file.close()
  32. f.close()
利用函數優化後的程序:
  1. def save_file(boy, girl, count):
  2. file_name_boy = 'boy_' + str(count) + '.txt'
  3. file_name_girl = 'girl_' + str(count) + '.txt'
  4. boy_file = open(file_name_boy, 'w')
  5. girl_file = open(file_name_girl, 'w')
  6. boy_file.writelines(boy)
  7. girl_file.writelines(girl)
  8. boy_file.close()
  9. girl_file.close()
  10. def split_file(file_name):
  11. f = open(file_name)
  12. boy = []
  13. girl = []
  14. count = 1
  15. for each_line in f:
  16. if each_line[:6] != '======':
  17. (role, line_spoken) = each_line.split(':', 1)
  18. if role == '小甲鱼':
  19. boy.append(line_spoken)
  20. if role == '小客服':
  21. girl.append(line_spoken)
  22. else:
  23. save_file(boy, girl, count)
  24. boy = []
  25. girl = []
  26. count += 1
  27. save_file(boy, girl, count)
  28. f.close()
  29. split_file('record.txt')

0 留言:

發佈留言