日 期:2022.03.10

时 间:22:00-23:00

主持人:

主题一:编程卡点

请把问题点提前发到群里,方便伙伴们思考准备。 (含书的页码、疑惑点、习题等)

1-德菊
2-鹅总
3-欣燃
4-小熊老师
5-小武老师
6-爱梅
7-老张
8-范青群
9-请自行添加修改姓名

二、习题讨论:欣燃题目

  1. # 查看注释,运行代码。
  2. import random
  3. import time
  4. # 用random函数在列表中随机抽奖,列表中只有3位候选者。
  5. luckylist = ['海绵宝宝','派大星','章鱼哥']
  6. # random模块中有个随机选取一个元素的方法:random.choice()。
  7. a = random.choice(luckylist) # 从3个人中随机选取1个人。
  8. print('开奖倒计时',3)
  9. time.sleep(1) # 调用time模块,控制打印内容出现的时间
  10. print('开奖倒计时',2)
  11. time.sleep(1)
  12. print('开奖倒计时',1)
  13. time.sleep(1)
  14. # 使用三引号打印hellokitty的头像
  15. image = '''
  16. /\_)o<
  17. | \\
  18. | O . O|
  19. \_____/
  20. '''
  21. print(image) # ……
  22. print('恭喜'+a+'中奖!') # 使用print函数打印幸运者名单

以上是已经写好的代码,可以运行的,现在需要各位:封装成一个新的函数。
温馨提示:

  1. 函数分两个部分,需要将第二部分封装起来,并调用函数。
  2. 3个候选者,即函数有3个参数。

解答一

  1. # 查看注释,运行代码。
  2. import random
  3. import time
  4. # 下面这一段属于函数定义部分
  5. ### 根据需求,明确函数的具体功能
  6. # 没有参数
  7. # 只能让别人看到打印结果,没办法跟用户(你自己也是用户)互动
  8. def PrintHelloKitty0():
  9. luckylist = ['海绵宝宝','派大星','章鱼哥']
  10. a = random.choice(luckylist) # 从3个人中随机选取1个人
  11. for i in range(3):
  12. time.sleep(1)
  13. print("开奖倒计时", i+1)
  14. # 使用三引号打印hellokitty的头像
  15. image = '''
  16. /\_)o<
  17. | \\
  18. | O . O|
  19. \_____/
  20. '''
  21. print(image) # ……
  22. print('恭喜'+a+'中奖!') # 使用print函数打印幸运者名单
  23. # 1个参数
  24. # 传入幸运者的名单,意味着我可以在外面增加或者较少幸运者的人数
  25. def PrintHelloKitty1(luckylist):
  26. a = random.choice(luckylist) # 从3个人中随机选取1个人
  27. for i in range(3):
  28. time.sleep(1)
  29. print("开奖倒计时", i+1)
  30. # 使用三引号打印hellokitty的头像
  31. image = '''
  32. /\_)o<
  33. | \\
  34. | O . O|
  35. \_____/
  36. '''
  37. print(image) # ……
  38. print('恭喜'+a+'中奖!') # 使用print函数打印幸运者名单
  39. # 2个参数
  40. # 传入幸运者的名单,意味着我可以在外面增加或者较少幸运者的人数
  41. # 传入image的样式,意味着我还可以不只是打印HelloKitty,我还可以打印冰墩墩的样式
  42. # 名单和image样式都可以由使用函数的人自己定义
  43. def PrintHelloKitty2(luckylist, image):
  44. name = random.choice(luckylist) # 从3个人中随机选取1个人
  45. for i in range(3):
  46. time.sleep(1)
  47. print("开奖倒计时", i+1)
  48. print(image) # ……
  49. print('恭喜'+ name + '中奖!') # 使用print函数打印幸运者名单
  50. # 3个参数
  51. # 传入幸运者的名单,意味着我可以在外面增加或者较少幸运者的人数
  52. # 传入image的样式,意味着我还可以不只是打印HelloKitty,我还可以打印冰墩墩的样式
  53. # 传入停留几秒,意味着我想让用户等几秒就等几秒
  54. # 三个参数放开之后,使用者的灵活的就很高
  55. def PrintHelloKitty3(luckylist, image, seconds):
  56. name = random.choice(luckylist) # 从3个人中随机选取1个人
  57. for i in range(seconds):
  58. time.sleep(1)
  59. print("开奖倒计时", i+1)
  60. print(image) # ……
  61. print('恭喜'+ name + '中奖!') # 使用print函数打印幸运者名单
  62. # 下面这一段属于函数调用(实现)部分
  63. # 将定义与实现分离,是为了提高的可读性
  64. # 混在在一起并不影响实现功能
  65. if __name__ == '__main__':
  66. PrintHelloKitty0()
  67. luckylist = ['海绵宝宝','派大星','章鱼哥']
  68. PrintHelloKitty1(luckylist)
  69. luckylist = ['海绵宝宝','派大星','章鱼哥']
  70. image = '''
  71. /\_)o<
  72. | \\
  73. | O . O|
  74. \_____/
  75. '''
  76. PrintHelloKitty2(luckylist, image)
  77. luckylist = ['海绵宝宝','派大星','章鱼哥']
  78. image = '''
  79. /\_)o<
  80. | \\
  81. | O . O|
  82. \_____/
  83. '''
  84. seconds = 4
  85. PrintHelloKitty3(luckylist, image, seconds)

运行结果(部分):
hellokitty.png

上面的代码,给出了四种封装方式,传入参数从少到多,大家可以体会一下,这之间的区别。

解答二
鹅总hello.png

解答三

欣然hello.png

三、主题讨论

1. 从昨天的讨论来看,大家对函数的封装的理解有困惑,问题在于:到底要不要传参数,传几个参数,以及传哪些参数?

这个回答是:不一定。具体传几个参数其实是根据需求而定的。但是我们需要明白为什么要封装成函数,直接写成一堆不行吗?
封装成函数的目的是为了模块化,例如我要分别在100个文件里面都调用打印hellokitty这个函数,我们不可能这一百个文件都写上这些代码,封装成函数之后,我们只需要在一个.py文件定义这个函数就可以了,然后在其他文件里面直接调用。

  1. if(c=1)的理解

C++语言中,下面这段代码能跑过,也有输出:
C111.png
python语言中,会提示语法错误,编译不通过:
图片.png
其实这段代码想实现的逻辑是:

  • 如果c等于1,打印success
  • 如果不等于1,打印failed
  1. # C++
  2. int c = 3;
  3. if(c=1) # 在C++语言中,c=1一定是返回true的,所以不管c初始化为任何值,都会打印success
  4. {
  5. print("success);
  6. }
  7. # python
  8. if c==1:
  9. print("success")