鱼C论坛

 找回密码
 立即注册
查看: 2970|回复: 22

[见证历程] 暂时还不能写日志就在帖子记录一下自己学习的进度吧

[复制链接]
发表于 2018-8-16 20:54:01 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
今日学习至python第四课视频,未做习题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2018-8-16 22:40:34 | 显示全部楼层
自己第一次改进的多次文字游戏代码,因为发现temp是字符串而直接用int()函数会报错,但是又不能用isinstance(temp,int)函数来辨别输入的是字母还是数字而头痛,于是使用了异常捕捉,不过效果并不好,留待以后改进
  1. # -*- coding: cp936 -*-
  2. import random
  3. try:
  4.     print('-----------小游戏--------------')
  5.     temp = input('猜一个数字:')
  6.     guess = int(temp)   
  7. except:
  8.     temp = input('猜一个数字:')
  9. #此处代码有问题,当输入两次字母时会报错

  10. guess = int(temp)
  11. answer = random.randint(1,100)

  12. while guess != answer:

  13.     if guess < answer:
  14.         print("sorry,the answer is bigger")
  15.         
  16.     else:
  17.         print("sorry,the answer is smaller")

  18.     temp = input('再猜一次吧:')
  19. #此处有与上面同样的风险
  20.     guess = int(temp)
  21.         
  22. print("yes,you\'re very clever")   
  23. print("game over")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-16 22:45:37 | 显示全部楼层
这个是课后练习给出的代码, 使用了print()函数绕过了input()需要在循环内外都写一遍的繁琐,解决了我上面代码的第二个问题,不过在输入第二个数字的时候没有文字显示,于是我改为仍然用input()加文字的形式,这个要注意的是guess变量需要在循环外定义
  1. import random

  2. times = 3
  3. secret = random.randint(1,10)

  4. print('------------------我爱鱼C工作室------------------')
  5. guess = 0
  6. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")

  7. while (guess != secret) and (times > 0):
  8.     temp = input()
  9.    
  10.     if temp.isdigit():
  11.         guess = int(temp)
  12.         if guess == secret:
  13.             print("我草,你是小甲鱼心里的蛔虫吗?!")
  14.             print("哼,猜中了也没有奖励!")
  15.         else:
  16.             if guess > secret:
  17.                 print("哥,大了大了~~~")
  18.             else:
  19.                 print("嘿,小了,小了~~~")
  20.             if times > 1:
  21.                 print("再试一次吧:", end='')
  22.             else:
  23.                 print("机会用光咯T_T")
  24.     else:
  25.         print("抱歉,您的输入有误,请输入一个整数:", end='')

  26.     times = times - 1 # 用户每输入一次,可用机会就-1

  27. print("游戏结束,不玩啦^_^")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-16 22:51:25 | 显示全部楼层
这个是我吸取了课后答案后修改的版本,使用了s.isdigit()函数判断是否是数字,写的时候问题出在对guess的判断上面,会忘记再次赋值一遍,导致一直要输入
但是需要判断guess还有temp   感觉还是比较麻烦,留待以后进行修改


  1. import random
  2. guess = 0
  3. secret = random.randint(1,10)
  4. while guess != secret:
  5.     temp = input('请输入一个1-10之间的数字:')
  6.     while not temp.isdigit():
  7.         temp = input('请输入一个数字:')
  8.     guess = int(temp)
  9.     while not (0<guess<11):
  10.         temp = input('请输入一个1-10之间的数字:')
  11.         guess = int(temp)
  12.     if guess < secret:
  13.         print("sorry,the answer is bigger")
  14.     elif guess > secret:
  15.         print("sorry,the answer is smaller")

  16. print("yes,you\'re very clever")   
  17. print("game over")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-16 22:52:13 | 显示全部楼层
看完第五课视频,未做课后练习
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-17 23:28:44 | 显示全部楼层
第五课改进 后能让程序识别数据类型的 答案
  1. import random

  2. times = 3
  3. secret = random.randint(1,10)

  4. print('------------------我爱鱼C工作室------------------')
  5. guess = 0
  6. print("不妨猜一下小甲鱼现在心里想的是哪个数字:", end=" ")

  7. while (guess != secret) and (times > 0):
  8.     temp = input()
  9.    
  10.     if temp.isdigit():
  11.         guess = int(temp)
  12.         if guess == secret:
  13.             print("我草,你是小甲鱼心里的蛔虫吗?!")
  14.             print("哼,猜中了也没有奖励!")
  15.         else:
  16.             if guess > secret:
  17.                 print("哥,大了大了~~~")
  18.             else:
  19.                 print("嘿,小了,小了~~~")
  20.             if times > 1:
  21.                 print("再试一次吧:", end='')
  22.             else:
  23.                 print("机会用光咯T_T")
  24.     else:
  25.         print("抱歉,您的输入有误,请输入一个整数:", end='')

  26.     times = times - 1 # 用户每输入一次,可用机会就-1

  27. print("游戏结束,不玩啦^_^")
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-18 10:28:07 | 显示全部楼层

小游戏 求台阶

  1. print('---------------------')

  2. i=1
  3. while True:
  4.     if i%2 == 1 and i%3 == 2 and i%5 == 4 and i%6 == 5 and i/7 == int(i/7):
  5.         print(i)
  6.         break   
  7.     else:
  8.         i+=1
  9.       
  10. '''
  11. 课后练习给出答案如下
  12. x = 7
  13. i = 1
  14. flag = 0

  15. while i <= 100:
  16.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
  17.         flag = 1
  18.     else:
  19.         x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
  20.     i += 1

  21. if flag == 1:
  22.     print('阶梯数是:', x)
  23. else:
  24.     print('在程序限定的范围内找不到答案!')
  25. '''
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-23 17:40:16 | 显示全部楼层
密码检测  这里我记不得判断字符串长度的函数了,所以没有写出来
  1. # 密码安全性检查代码
  2. #
  3. # 低级密码要求:
  4. #   1. 密码由单纯的数字或字母组成
  5. #   2. 密码长度小于等于8位
  6. #
  7. # 中级密码要求:
  8. #   1. 密码必须由数字、字母或特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)任意两种组合
  9. #   2. 密码长度不能低于8位
  10. #
  11. # 高级密码要求:
  12. #   1. 密码必须由数字、字母及特殊字符(仅限:~!@#$%^&*()_=-/,.?<>;:[]{}|\)三种组合
  13. #   2. 密码只能由字母开头
  14. #   3. 密码长度不能低于16位

  15. symbols = r'''`!@#$%^&*()_+-=/*{}[]\|'";:/?,.<>'''
  16. chars = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
  17. nums = '0123456789'

  18. passwd = input('请输入需要检查的密码组合:')

  19. # 判断长度
  20. length = len(passwd)

  21. while (passwd.isspace() or length == 0) :
  22.     passwd = input("您输入的密码为空(或空格),请重新输入:")
  23.     length = len(passwd)

  24. if length <= 8:
  25.     flag_len = 1
  26. elif 8 < length < 16:
  27.     flag_len = 2
  28. else:
  29.     flag_len = 3

  30. flag_con = 0

  31. # 判断是否包含特殊字符
  32. for each in passwd:
  33.     if each in symbols:
  34.         flag_con += 1
  35.         break
  36.    
  37. # 判断是否包含字母
  38. for each in passwd:
  39.     if each in chars:
  40.         flag_con += 1
  41.         break

  42. # 判断是否包含数字
  43. for each in passwd:
  44.     if each in nums:
  45.         flag_con += 1
  46.         break   

  47. # 打印结果
  48. while 1 :
  49.     print("您的密码安全级别评定为:", end='')
  50.     if flag_len == 1 or flag_con == 1 :
  51.         print("低")
  52.     elif flag_len == 3 and flag_con == 3 and (passwd[0] in chars):
  53.         print("高")
  54.         print("请继续保持")
  55.         break
  56.     else:
  57.         print("中")

  58.     print("请按以下方式提升您的密码安全级别:\n\
  59.     \t1. 密码必须由数字、字母及特殊字符三种组合\n\
  60.     \t2. 密码只能由字母开头\n\
  61.     \t3. 密码长度不能低于16位")
  62.     break
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-25 12:41:00 | 显示全部楼层
第十七讲的动动手
  1. def power(x,y):
  2.     print(x**y)




  3. def gcd (x,y):
  4.     if x<y:
  5.        pass
  6.     if x>y:
  7.         x,y =y,x
  8.         
  9.     z = 1
  10.     while z != 0 :
  11.         z = y
  12.         y = x % y
  13.         x = z
  14.         z = y
  15.     print(x)

  16. def biner (x):
  17.     z=1
  18.     str1 =''
  19.     while z!=0:
  20.         y = x % 2
  21.         z = x //2
  22.         x = z
  23.         str1 = str(y)+str1
  24.     print('('+str1+')B')



复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-25 12:43:56 | 显示全部楼层
17讲答案中2的代码
这个代码在循环的时候相对简单多了,可以看出我在这里的逻辑并不是很好
  1. def gcd(x, y):
  2.     while y:
  3.         t = x % y
  4.         x = y
  5.         y = t

  6.     return x
  7.    
  8. print(gcd(4, 6))
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-25 15:54:47 | 显示全部楼层

18课动动手1
  1. def axiba(*p,base=3):
  2.         if p[-1] != 5:
  3.                 print(sum(p)*base)
  4.         else:
  5.                 base = 5
  6.                 print(sum(p[:-1]*base))

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-25 16:28:48 | 显示全部楼层
用函数求水仙花数  循环部分比较麻烦,绕了好半天才算出结果

def flower(x):
        i = 100
        while i<=x:
                sum1 = 0
                temp = i
                while temp:
                        sum1 = sum1 +(temp%10)**3
                        temp //= 10
                if sum1 == i:
                        print(sum1)
                i+=1


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-29 16:43:44 | 显示全部楼层
本帖最后由 RIXO 于 2018-8-29 16:53 编辑

19讲动动手
这一讲的代码2 ,在使用判断字符串的方法时一定要加()不然会返回内存值,导致判断一直通过
代码 1 ,字符串没有reversed方法需要转换为列表再用,或者逐个字符判断
  1. def couplet(temp):
  2.     length = len(temp)
  3.     for i in range(length-1):
  4.         if temp[i] != temp[-(i+1)]:
  5.             print('不是回文联')
  6.             return
  7.     print('是回文联')


  8. # temp = input('请输入一句话:')
  9. # couplet(temp)


  10. def count1(str1):
  11.     alphlet = 0
  12.     space = 0
  13.     num = 0
  14.     other = 0
  15.     for i in str1:
  16.         if i in 'QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm':
  17.             alphlet +=1
  18.         elif i.isdigit():
  19.             num +=1
  20.         elif i.isspace():
  21.             space +=1
  22.         else :
  23.             other +=1
  24.     return alphlet,num,space,other

  25. def count(*str1):
  26.     length = len(str1)
  27.     i =1
  28.     for each in str1:
  29.         x,y,z,c = count1(each)
  30.         print('第%d个字符串共有:英文字符%d个,数字%d个,\
  31. 空格%d个,其他字符%d个。'%(i,x,y,z,c))
  32.         i +=1

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-29 22:56:53 | 显示全部楼层

20讲动动手1,这个特别有意思,然后我又修改了好半天


  1. def findstr(str1):
  2.     x = []
  3.     y = ''
  4.     for a in str1:
  5.         if a in y:
  6.             y +=a
  7.         else:
  8.             if not a in x :
  9.                 x.append(a)
  10.                 count = str1.count(a)
  11.                 if count < 10:
  12.                     y += a
  13.                 else:
  14.                     if a =='\n':
  15.                         print(r'\n一共出现了%d次'%count)
  16.                     else:
  17.                         print('%c一共出现了%d次'%(a,count))
  18.     print(y)
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-29 23:22:02 | 显示全部楼层
20动动手2 ,这题的答案代码貌似是错的
先给出我的答案,其中我特意将符合条件的字符 和他的编号以及包含他前后3个字符的字符串都打印了出来
  1. def findPassword(str1):
  2.     length = len(str1)
  3.     for a in range(length):
  4.         if str1[a].islower():
  5.             if a-3 >0 and a+3 <length-1:
  6.                 x = str1[a-3:a]+str1[a+1:a+4]
  7.                 if ( '\n' not in x) and  x.isupper():
  8.                     print(str1[a],a)
  9.                     print(str1[a-3:a+4])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-29 23:23:00 | 显示全部楼层
20动动手2
答案如下,看起来还挺麻烦的,不过有点困了,明天再研究它为什么会出错

  1. countA = 0  # 统计前边的大写字母
  2. countB = 0  # 统计小写字母
  3. countC = 0  # 统计后边的大写字母
  4. length = len(str1)

  5. for i in range(length):
  6.     if str1[i] == '\n':
  7.         continue

  8.     """
  9.     |如果str1[i]是大写字母:
  10.     |-- 如果已经出现小写字母:
  11.     |-- -- 统计后边的大写字母
  12.     |-- 如果未出现小写字母:
  13.     |-- -- 清空后边大写字母的统计
  14.     |-- -- 统计前边的大写字母
  15.     """
  16.     if str1[i].isupper():
  17.         if countB:
  18.             countC += 1
  19.         else:
  20.             countC = 0
  21.             countA += 1

  22.     """
  23.     |如果str1[i]是小写字母:
  24.     |-- 如果小写字母前边不是三个大写字母(不符合条件):
  25.     |-- -- 清空所有记录,重新统计
  26.     |-- 如果小写字母前边是三个大写字母(符合条件):
  27.     |-- -- 如果已经存在小写字母:
  28.     |-- -- -- 清空所有记录,重新统计(出现两个小写字母)
  29.     |-- -- 如果该小写字母是唯一的:
  30.     |-- -- -- countB记录出现小写字母,准备开始统计countC
  31.     """
  32.     if str1[i].islower():
  33.         if countA != 3:
  34.             countA = 0
  35.             countB = 0
  36.             countC = 0
  37.         else:
  38.             if countB:
  39.                 countA = 0
  40.                 countB = 0
  41.                 countC = 0
  42.             else:
  43.                 countB = 1
  44.                 countC = 0
  45.                 target = i

  46.     """
  47.     |如果前边和后边都是三个大写字母:
  48.     |-- 如果后边第四个字母也是大写字母(不符合条件):
  49.     |-- -- 清空记录B和C,重新统计
  50.     |-- 如果后边仅有三个大写字母(符合所有条件):
  51.     |-- -- 打印结果,并清空所有记录,进入下一轮统计
  52.     """
  53.     if countA == 3 and countC == 3:
  54.         if i+1 != length and str1[i+1].isupper():
  55.             countB = 0
  56.             countC = 0
  57.         else:
  58.             print(str1[target], end='')
  59.             countA = 3
  60.             countB = 0
  61.             countC = 0
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-8-31 10:41:19 | 显示全部楼层
找到了错误,题目需要小写字母旁边有且只有3个大写字母,而我的函数没有考虑大写字母多于三个的情况
看来是我的函数出了错误,这里放上修改后的函数


  1. def findPassword(str1):
  2.     length = len(str1)
  3.     for a in range(length):
  4.         if str1[a].islower():
  5.             if a-3 >0 and a+3 <length-1:
  6.                 x = str1[a-3:a]+str1[a+1:a+4]
  7.                 z1 = str1[a-4:a]
  8.                 z2 = str1[a+1:a+5]
  9.                 if ( '\n' not in x) and  x.isupper():
  10.                     if not (z1.isupper() or z2.isupper()) :
  11.                         print(str1[a],end='')

复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-3 15:38:29 | 显示全部楼层
发一下26讲的动动手,非常有意思,代码很简单但是写起来的时候却觉得异常复杂,可以把重复的地方变简单
后续准备对它进行精简
值得注意的是列表和字典不需要用golobal就可以在函数内部进行添加和修改,这样安全性应该是有问题的,后期学习应该能找到解决方案
还有就是写代码的时候,很多时候需要判断之后重复判断,类似c语言的go语句,可以直接用while循环,比较好用
另外递归相当好用


  1. userData ={}

  2. def  userlanding():
  3.     print('|--- 新建用户:N/n ---|')
  4.     print('|--- 登录帐号:E/e ---|')
  5.     print('|--- 退出程序:Q/q ---|')
  6.     temp = input('|--- 请输入指令代码:')

  7.    
  8.     if temp == 'N' or temp == 'n':
  9.         print('请输入用户名:',end = ' ')
  10.         userId = input()
  11.         while userId in userData:
  12.             userId = input('此用户名已经被使用,请重新输入:')
  13.         print('请输入密码:',end =' ')
  14.         usercode = input()
  15.         userData[userId] = usercode
  16.         print('注册成功,赶紧试试登录吧 ^_^ ')
  17.         print('\n\n\n')
  18.         userlanding()

  19.     if temp == 'E' or temp == 'e':
  20.         userId = input('请输入用户名:')
  21.         while userId not in userData:
  22.             userId = input('您输入的用户名不存在,请重新输入:')
  23.             if userId == 'q':
  24.                 print('\n\n\n')
  25.                 userlanding()
  26.         code = input('请输入密码:')
  27.         while code != userData[userId]:
  28.             code = input('密码输入错误,请重新输入密码:')
  29.         
  30.         print('欢迎进入系统!')
  31.         print('\n\n\n')
  32.         userlanding()

  33.     if temp == 'Q' or temp == 'q':
  34.         pass


  35. userlanding()

复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-4 15:04:24 | 显示全部楼层
29动动手
这一讲是我做习题以来最崩溃的一次

动动手0


  1. #屏幕显示输入文件名
  2. file_name = input('请输入文件名:')


  3. while True:        
  4.     #以xw打开一个可写入文件
  5.         try:
  6.                 f = open(file_name+'.txt','x')
  7.                 break
  8.     #如果报错,则重新输入文件名
  9.         except:
  10.                 file_name = input('文件已存在,请重新输入文件名:')

  11. #屏幕显示输入内容
  12. print('请输入内容【单独输入‘:W’保存退出】:')
  13. temp = input()

  14. #while循环输入,当输入为:w的时候打破循环,然后关闭文件
  15. while temp != ':w' and temp != ':W' and temp!=':w' and temp != ':W':
  16.     f.write(temp+'\n')
  17.     temp  = input()


  18. f.close()
复制代码


动动手1




  1. #获取第一个文件名
  2. file_name1 = input('请输入一个需要比较的文件名:')
  3. #获取第二个文件名
  4. file_name2 = input('请输入另一个需要比较的文件名:')

  5. f1 =open(file_name1,'r')
  6. f2 =open(file_name2,'r')
  7. differences =[]
  8. count_lines = 0

  9. #逐行判断是否有不同
  10. file1 = list(f1)
  11. file2 = list(f2)

  12. for i in range(len(file1)):
  13.     if file1[i] != file2[i]:
  14.         count_lines +=1
  15.         differences.append(i)


  16. #输出有几处不同
  17. print('两个文件一共有【%d】处不同'%count_lines)

  18. #输出第几行不一样
  19. for i in differences:
  20.     print('第%d行不同'%(i+1))
  21.     print(file1[i],file2[i])
复制代码

动动手2



  1. file_name = input('请输入要打开的文件(C:\\test.txt):')

  2. lines = input('请输入需要显示该文件的前几行:')
  3. line =int(lines)

  4. while True:
  5.     if line < 0:
  6.         lines = input('请输入需要显示该文件的前几行:')
  7.         line =int(lines)
  8.     else:
  9.         break

  10. f =open(file_name,'r')

  11. print('文件%s的前%d行内容如下:'%(file_name,line))


  12. while line:
  13.     print(f.readline())
  14.     line -= 1

复制代码


动动手3


  1. file_name = input('请输入要打开的文件(C:\\test.txt):')

  2. lines = input('请输入需要显示的行数【格式如 13:21 或 :21 或21:】:')

  3. (line1,line2) = lines.split(':',1)

  4. flag = 0

  5. if line1.isdigit():
  6.     line1_int = int(line1)
  7. else:
  8.     line1_int = None
  9.     line1_str = '开始'
  10.     flag += 1


  11. if line2.isdigit():
  12.     line2_int = int(line2)
  13. else:
  14.     line2_int = None
  15.     line2_str = '末尾'
  16.     flag += 2

  17. f =open(file_name,'r')

  18. if flag == 0:
  19.     print('文件%s从第%d行到第%d行内容如下:'%(file_name,line1_int,line2_int),end ='\n\n')
  20. elif flag == 1:
  21.     print('文件%s从开始到第%d行内容如下:'%(file_name,line1_int,line2_int),end ='\n\n')
  22. elif flag == 2:
  23.     print('文件%s从第%d行到末尾内容如下:'%(file_name,line1_int,line2_int),end ='\n\n')
  24. else:
  25.     print('文件%s的全文内容如下:'%(file_name,line1_int,line2_int),end ='\n\n')


  26. for each_line in list(f)[line1_int:line2_int]:
  27.     print(each_line)
  28.    

复制代码

动动手4
这道题最难,难点在于忘记了列表方法里面有replace




  1. file_name = input('请输入文件名(C:\\test.txt):')
  2. f_read = open(file_name,'r')

  3. old_word = input('请输入需要替换的单词或字符:')

  4. new_word = input('请输入新的单词或字符:')

  5. count = 0
  6. content = []


  7. for eachline in f_read:
  8.     if old_word in eachline:
  9.         count += eachline.count(old_word) #count感觉应该用这个
  10.         eachline = eachline.replace(old_word, new_word)
  11.     content.append(eachline)


  12. print('文件 %s 中一共有%d个【%s】'%(file_name,count,old_word))

  13. print('您确定要把所有的【%s】换成【%s】吗?'%(old_word,new_word))

  14. answer = input('【YES/NO】')

  15. if answer in 'YESyesYes':
  16.     f_write = open(file_name,'w')
  17.     f_write.writelines(content)
  18.     a = (line for line in open('动动手4.txt'))
  19.     for i in a:
  20.         print(i)
  21.     f_write.close()

复制代码

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-9-5 19:51:25 | 显示全部楼层
本帖最后由 RIXO 于 2018-9-5 19:57 编辑

记录一下30讲文件系统的搜索文件
自己写的三组代码

  1. import os
  2. import pathlib

  3. name = input('请输入要搜索的文件名:')
  4. route = input('请输入要搜索的路径:')
  5. save = []


  6. def find_file(name,file_list):
  7.     for file in file_list:
  8.         if name in file:#判断是否有要搜索的文件,保存在新的列表中
  9.             dirname = os.path.dirname(os.getcwd())
  10.             save.append(dirname+file)

  11. def loop(name,curdir,pardir=0):
  12.     os.chdir(curdir)
  13.     file_list = os.listdir(os.getcwd())
  14.     find_file(name,file_list)
  15.     dirname = os.getcwd()
  16.     folder =[]
  17.     for file in file_list:
  18.         file_path = dirname+'\\'+file
  19.         path = pathlib.Path(file_path)
  20.         if  path.is_dir():
  21.             folder.append(file)      
  22.         if folder == []:
  23.             if pardir ==0:
  24.                 return None
  25.             else:
  26.                 return os.chdir('..')
  27.         else:
  28.             for subdir in folder:
  29.                 print(subdir,curdir,pardir)
  30.                 loop(name,subdir,curdir)
  31.                

  32. loop(name,route+'\\')
  33.             
  34. for file_maybe in save:
  35.     print(file_maybe)
复制代码

这个是一开始写的代码,特别麻烦,而且当时不知道os.path.isdir()就写的,所以用的是百度上的pathlib.Path更加麻烦,而且这里逻辑有点不清晰,觉得要把文件夹放到一个列表里面然后再递归,这导致了我后面的代码都相当繁琐,递归的时候逻辑不清晰,所以感觉想要回到上层目录又不知道能不能结束递归循环,总而言之是一个相当有意义的自己写的代码吧!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-24 04:15

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表