查看: 1870| 回复: 6
跳转到指定楼层
上一主题 下一主题
收起左侧

[学Python/Perl] 小白自学python疑问打卡帖

全局:

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看附件。没有帐号?注册账号

x
  1. #-*- coding:utf-8 -*-
  2. #廖雪峰python,闭包,计数器函数
  3. def Count():
  4.     n=0
  5.     def f():
  6.         nonlocal n
  7.         n=n+1
  8.         return n
  9.     return f
  10.    
  11. count123=Count()
  12. print(count123(),count123(),count123())
  13. count12=Count()
  14. print(count12,count12)

  15. '''
  16. 输出结果:
  17. 1 2 3
  18. <function Count.<locals>.f at 0x03AC94B0 function Count.<locals>.f at 0x03AC94B0>
  19. '''

  20. '''
  21. 在这个函数里输出的是 f 而不是 f(), 这意味着输出的是一个方程而不是一个数值. 从第二个输出
  22. 结果可以看出俩个count12所输出的是一样的方程. /因此我们可以推测出,当我们赋值count123的时候,
  23. 其实是把 f 这个方程赋值给了count123. 所以第一个print是: print(f(),f(),f()), 在这个f的
  24. 运算期间n是不断的调用上一次所产生的n值     (个人愚见,如有错误,请指出让我改正)
  25. '''
复制代码

评分

参与人数 1大米 +1 收起 理由
14417335 + 1 给你点个赞!

查看全部评分


上一篇:请问刷题用什么语言比较好?
下一篇:求救:c++ priority queue give wrong order
🔗
 楼主| DylanJJH 2019-4-12 01:01:44 | 只看该作者
全局:
  1. #-*- coding:utf-8 -*-
  2. #廖雪峰python-filter运用,素数筛选
  3. def _odd_iter():#奇数生成迭代器
  4.     n=1
  5.     while True:
  6.         n=n+2
  7.         yield n

  8. def _not_divisible(n):#素数筛选器
  9.     return lambda x: x%n>0

  10. def primes():
  11.     yield 2
  12.     it=_odd_iter() #初始序列
  13.     while True:
  14.         n=next(it) #放回序列的第一个数
  15.         it=filter(_not_divisible(n),it) #构造新序列
  16.         yield n

  17. for n in primes():#测试100内的素数
  18.     if n<20:
  19.         print(n)
  20.     else:
  21.         break

  22. '''
  23. 输出结果:2 3 5 7 11 13 17 19
  24. '''

  25. '''
  26. 疑问:_not_divisible(n)只有一个输入参数n, 那x是哪里来的.  
  27. BTW,有人能解释一下最后这个while loop发生了什么吗,对于这个流程有一点懵
  28. '''

复制代码
回复

使用道具 举报

🔗
 楼主| DylanJJH 2019-4-21 00:32:05 | 只看该作者
全局:
  1. #-*- coding:utf-8 -*-
  2. #python编程 入门到实践P38
  3. #邀请Amy Annie Allen
  4. guest_list=['Amy','Annie','Allen']
  5. for n in guest_list:
  6.     print('Hi',n+',','would you like to attend my party?')

  7. #Amy来不了,邀请Ava
  8. print('\n')
  9. no_come=guest_list.pop(0)
  10. guest_list=guest_list.insert(0,'Ava')
  11. print(no_come,"won't come, due to her work")
  12. print('Hi',guest_list[0],'we still have one seat left, would like to come?')

  13. '''输出结果: 其他一切正常
  14. 第13行: 'NoneType' object is not subscriptable, 就是中间那个guest_list[0]的原因, 可是不知道到底是为什么'''
复制代码
回复

使用道具 举报

🔗
 楼主| DylanJJH 2019-4-25 21:52:04 | 只看该作者
全局:
  1. #-*- coding:utf-8 -*-
  2. places=['Iceland', 'Maldives', 'Tibet', 'Hokkaido', 'Alaska']
  3. print(places.reverse())

  4. '''输出结果:
  5. None
  6. ['Alaska', 'Hokkaido', 'Tibet', 'Maldives', 'Iceland']
  7. 问:为什么第一个print会是None'''
复制代码
回复

使用道具 举报

🔗
 楼主| DylanJJH 2019-4-25 22:30:12 | 只看该作者
全局:
  1. #-*- coding:utf-8 -*-
  2. Num1=[1]
  3. num1=Num1
  4. #确认num1
  5. print(num1)
  6. Num1=[1,2]
  7. print(num1,Num1)
  8. '''输出:
  9. [1]
  10. [1] [1,2]
  11. 在这里num1没有跟着Num1的变化而变化
  12. '''

  13. Num2=[1]
  14. num2=Num2
  15. #确认num2
  16. print(num2)
  17. Num2.append(2)
  18. print(num2,Num2)
  19. '''输出:
  20. [1]
  21. [1,2] [1,2]
  22. 在这里num1跟着Num1变成了[1,2]

  23. 问:为什么会这样
  24. '''
复制代码
回复

使用道具 举报

🔗
 楼主| DylanJJH 2019-5-2 22:21:21 | 只看该作者
全局:
  1. #-*- coding:utf-8 -*-
  2. input1=input('user name: ')
  3. input2=input('user name: ')
  4. input3=input('user name: ')
  5. new_users=[input1, input2, input3]
  6. current_users=['admin', 'Bob', 'Cersei', 'Dylan', 'Eric']
  7. if new_users:
  8.     for new_user in new_users:
  9.         if new_user.title() in current_users:
  10.             print('user name ocuupied')
  11.         else:
  12.             print('user name available')
  13.             current_users.append(new_user)
  14. else:
  15.     print('plz enter user name')
  16. print(current_users)

  17. '''输出结果: 在你输入三个不同的名字的时候, 如果输入的名字中有和存在的ID一样的会只出这个ID已经被occupied. 其他可用id会被加进current users里面.

  18. 但是, 如果输入的ID里面有相同的名字且这个名字还未被占用, 这几个相同的ID会一起被加进current users里面. 这个有什么简单的解决办法吗
  19. '''
复制代码
回复

使用道具 举报

🔗
 楼主| DylanJJH 2019-5-2 23:09:45 | 只看该作者
全局:
  1. #-*- coding:utf-8 -*-
  2. number_list=input('number: ')
  3. num_order=[]
  4. if number_list:
  5.     for number in number_list:
  6.         num2str=str(number)
  7.         if num2str[-1] == '1':
  8.             num_order.append(num2str+'st')
  9.         elif num2str[-1] == '2':
  10.             num_order.append(num2str+'nd')
  11.         elif num2str[-1] == '3':
  12.             num_order.append(num2str+'rd')
  13.         else:
  14.             num_order.append(num2str+'th')
  15.     print(num_order)
  16. else:
  17.     print('plz enter ')

  18. '''输出结果:
  19. 当你输入1234的时候, 你会得到:
  20. ['1st', '2nd', '3rd', '4th']
  21. 这是因为在这个式子里, 它默认把你的输入当成了string, 所以它把你的每一个bit都进行了一次for循环.
  22. 这里有什么简单的方式可以解决这个问题吗
  23. '''
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册账号
隐私提醒:
  • ☑ 禁止发布广告,拉群,贴个人联系方式:找人请去🔗同学同事飞友,拉群请去🔗拉群结伴,广告请去🔗跳蚤市场,和 🔗租房广告|找室友
  • ☑ 论坛内容在发帖 30 分钟内可以编辑,过后则不能删帖。为防止被骚扰甚至人肉,不要公开留微信等联系方式,如有需求请以论坛私信方式发送。
  • ☑ 干货版块可免费使用 🔗超级匿名:面经(美国面经、中国面经、数科面经、PM面经),抖包袱(美国、中国)和录取汇报、定位选校版
  • ☑ 查阅全站 🔗各种匿名方法

本版积分规则

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