中文Python教程
https://yiyibooks.cn/xx/python_352/tutorial/index.html
@所有人
每日一題-Day1
=======
Python有哪些基本的數(shù)據(jù)類型?和你所熟悉的編程語言有哪些區(qū)別?
答案:內(nèi)置的數(shù)據(jù)類型有int float complex str bool None,dict tuple list set
前面是元素類型后面是集合類型,元素類型都是immutable的,集合類型中tuple類型是immutable的,其他的都是mutable的.
@所有人
每日一題
=======
什么叫可變對象?什么叫不可變對象?Python中哪些對象是可變的?哪些是不可變的?
答案:
- 不可變對象,該對象所指向的內(nèi)存中的值不能被改變。當改變某個變量時候,由于其所指的值不能被改變,相當于把原來的值復(fù)制一份后再改變,這會開辟一個新的地址,變量再指向這個新的地址。
- 可變對象,該對象所指向的內(nèi)存中的值可以被改變。變量(準確的說是引用)改變后,實際上是其所指的值直接發(fā)生改變,并沒有發(fā)生復(fù)制行為,也沒有開辟新的出地址,通俗點說就是原地改變。
Python中,數(shù)值類型(int和float)、字符串str、元組tuple都是不可變類型。而列表list、字典dict、集合set是可變類型。
@所有人
每日一題
=======
如果一個女生說,她集齊了十二個星座的前男友,我們應(yīng)該如何估計她前男友的數(shù)量?
Hint:
1.可以先用自己順手的語言解決,再重構(gòu)為Python代碼
2.可以通過概率統(tǒng)計的公式解決,也可以通過蒙特卡洛算法處理
3.可以適當假定某些限制條件,簡化問題,抽象出問題模型
@所有人
每日一題
=======
a = [1,2,3] b = [2,3] c = list(zip(a,b)) 簡單解釋下c
@所有人
每日一題
=======
打印九九乘法表
@所有人
每日一題
=======
一個整數(shù),它加上100后是一個完全平方數(shù),再加上168又是一個完全平方數(shù),請問該數(shù)是多少?(10000內(nèi)查找該數(shù))
@所有人
每日一題
=======
有4張紅色的牌和4張藍色的牌,主持人先拿任意兩張,再分別在A、B、C三人額頭上貼任意兩張牌,
A、B、C三人都可以看見其余兩人額頭上的牌,看完后讓他們猜自己額頭上是什么顏色的牌,
A說不知道,B說不知道,C說不知道,然后A說知道了。
請教如何推理,A是怎么知道的。
如果用程序,又怎么實現(xiàn)呢?
color_combination = [['red','blue'],['red','red'],['blue','blue']]
for teacher in color_combination:
for A in color_combination:
for B in color_combination:
for C in color_combination:
if not (A[0]==A[1]==B[1]==B[0]) \
and not (A[0]==A[1]==C[1]==C[0])\
and not (B[0]==B[1]==C[1]==C[0])\
and [teacher[0],teacher[1],A[0],A[1],B[0],B[1],C[0],C[1]].count('blue')==4\
and [teacher[0],teacher[1],A[0],A[1],B[0],B[1],C[0],C[1]].count('red')==4\
and A[0]!=A[1]:
print(teacher,A,B,C)
每日一題
Fizz Buzz
輸出一個列表,從1記錄到n,總長度為n,但是里面的元素有以下特征
全部都是string格式
如果元素是3的倍數(shù),輸出“Fizz”;
如果元素是5的倍數(shù),輸出“Buzz”;
如果元素同時是3和5的倍數(shù),輸出 “FizzBuzz”。
示例:
input: 8
output:
["1","2","Fizz","4", "Buzz","Fizz","7","8"]
每日一題
寫一個函數(shù),計算斐波那契數(shù)列
每日一題
寫一個閉包的例子,并說說閉包的兩個特點。
特點:1. 閉包由函數(shù)內(nèi)的函數(shù)構(gòu)造 2. 閉包函數(shù)的變量跟隨函數(shù)的環(huán)境存在(跟隨實例)
每日一題
Question:
有a,b,c,d四名犯罪嫌疑人,其中有一人是小偷,審訊中:
a說我不是小偷;
b說c是小偷;
c說小偷肯定是d;
d說c胡說!
其中有三個人說的是實話,一個人說的是假話,請推斷誰是小偷
for thief in ('a', 'b', 'c', 'd'):
sum = ('a' != thief) + (thief == 'c') + (thief == 'd') + (thief != 'd')
if sum == 3:
print("thief is %s"%thief)
2019.2.16
老師,Python中類屬性的3P定義,似乎是以屬性變量名前綴所帶的下劃線個數(shù)決定的嗎?
比如 self.var 是 public,self._var 是 protect, self.__var 是 private ? -- 是的, 用來決定類外對變量訪問的權(quán)限
foo: 定義的是特殊方法,一般是系統(tǒng)定義名字 ,類似 init() 之類的。
_foo: 以單下劃線開頭的表示的是 protected 類型的變量,即保護類型只能允許其本身與子類進行訪問,不能用于 from module import *
__foo: 雙下劃線的表示的是私有類型(private)的變量, 只能是允許這個類本身進行訪問了。
foo:就是public方法
有關(guān)變量作用域:
函數(shù)體內(nèi)可以引用全局變量。全局變量,如果是可變的話,是傳引用,如果是不可變的,是傳值。函數(shù)可以沒有參數(shù)
變量作用域遵循LEGB法則,也就是說在函數(shù)定義域內(nèi),不能重新再定義這個變量,不管它是可變的,還是不可變的,如果你重新定義的話,它就會用局部作用域當中這個變量,如果你不重新定義它,直接引用函數(shù)體外面的那個變量。
LEGB Local Encloser Global Builtins
手機練習(xí)Python:
如果希望用手機隨時隨地編寫練習(xí)Python語法, 使用PyDroid見文件:pydroid.apk
網(wǎng)頁版運行Python代碼的網(wǎng)站
https://tool.lu/coderunner/
Code編輯器:
Plain Text Editor:記事本
Command Line Editor:vim、emacs、nano
Editor:Sublime Text、Notepad++、Atom、VS Code、Eclipse
IDE:Anaconda、PyCharm
解釋器+編輯器:解釋器是用來解釋python代碼的,也就是運行代碼的;其他的都是編輯器,都是用來寫代碼的,現(xiàn)在說到的都是編輯器,就跟用txt和用word或者用pages寫文章一樣
一篇關(guān)于sublime詳細的配置文章,如何裝插件。
有學(xué)習(xí)成本的https://zhuanlan.zhihu.com/p/52524895
新手建議安裝Anaconda,用Jupyter notebook做項目,Spyder和Jupyter notebook也可以配置黑色背景
spyder里:
用快捷鍵Alt +Shift+PageDown切換下一個布局
有關(guān)twisted
安裝命令:
conda install twisted
為什么需要: twisted
- Twisted是用Python實現(xiàn)的基于事件驅(qū)動的網(wǎng)絡(luò)引擎框架
- 單線程異步
補充例子2:Python3中的C3算法:多繼承查找規(guī)則
mro公式:
mro(Child(Base1,Base2)) = [Child] + merge(mro(Base1), mro(Base2), [Base1, Base2])
(其中Child繼承自Base1, Base2)
merge函數(shù)的規(guī)則是表頭的元素如果只出現(xiàn)在其他父類的繼承順序的表頭或者不出現(xiàn)在其他父類中則取出來放順延加在繼承順序表里,其他情況則跳過此父類,向搜索!
mro(A(B, C)) = [A] + merge(mro(B(D, E)) + mro(C(E, F)) + [B, C])
= [A] + merge([B] + merge(mro(D) + mro(E) + [D, E]) + [C] + merge(mro(E) + mro(F) + [E, F]) + [B, C])
= [A] + merge([B] + merge([D] + [E] + [D, E]) + [C] + merge([E] + [F] + [E, F]) + [B, C])
= [A] + merge([B] + [D, E]) + [C] + [E, F] + [B, C])
= [A] + merge([B, D, E] + [C, E, F] + [B, C])
= [A] + [B] + [D] + merge([E] + [C, E, F] + [C])
= [A, B, D] + [C] + merge([E] + [E, F])
= [A, B, D, C, E, F, O] # 最后添加上O
最后給大家出一個趣味題用做知識點的復(fù)習(xí)和回顧:
這個題目最開始出的時候大家覺得困難,現(xiàn)在重新思考一下:
“如果一個女生說,她集齊了十二個星座的前男友,我們應(yīng)該如何估計她前男友的數(shù)量?”
Hint:
蒙特卡洛算法處理
可以適當假定某些限制條件,簡化問題,抽象出問題模型
杭州 互聯(lián)網(wǎng): 應(yīng)該假設(shè) 女孩沒有星座偏好 男孩出生的時間在一年內(nèi)均勻分布 」
棒!上道了~
假設(shè)這個女生交往的男性星座符合均勻分布,就是說每個星座的人數(shù)一致
2、假設(shè)女生對男生的星座沒有特殊偏好,比如不存在天生就特別不喜歡處女座;且上一任的星座不會影響下一任的星座,比如不會存在交往了天蝎座就不敢再和天蝎座交往
3、假設(shè)被研究對象每次分手后的下一次交往,星座仍符合均勻分布;假如一個女生周圍的12星座男生各四個,那么它交往了某個星座,這個星座就少了一個,下次選擇的時候概率不均勻,假設(shè)魅力值無限,周圍所有星座的男生數(shù)量無限;
「 zy: 要考慮先后嗎 能不能當做女孩要同時交往多少男生則比較容易集齊12星座
不考慮先后,可以