第1講
- Python 是什么類型的語言鹉勒?
- Python是腳本語言
- 腳本語言(Scripting language)是電腦編程語言脱盲,因此也能讓開發(fā)者藉以編寫出讓電腦聽命行事的程序。
- 腳本語言通常比 C語言改橘、C++語言 或 Java 之類的系統(tǒng)編程語言要簡(jiǎn)單容易渊迁。
- 通常以容易修改程序的“解釋”作為運(yùn)行方式跨新,而不需要“編譯”
-
IDLE 是什么?
IDLE蛆挫,全稱:
Integrated Development and Learning Environment
赃承,集成開發(fā)和學(xué)習(xí)環(huán)境。IDLE是一個(gè)Python Shell悴侵,shell的意思就是“外殼”瞧剖。
基本上來說,就是一個(gè)通過鍵入文本與程序交互的途徑可免!像我們Windows那個(gè)cmd窗口抓于,像Linux那個(gè)黑乎乎的命令窗口,他們都是shell浇借,利用他們毡咏,我們就可以給操作系統(tǒng)下達(dá)命令。
同樣的逮刨,我們可以利用IDLE這個(gè)shell與Python進(jìn)行互動(dòng)呕缭。
-
print() 的作用是什么?
- print() 會(huì)在輸出窗口中顯示一些文本(在這一講中修己,輸出窗口就是IDLE shell窗口)恢总。
如果我需要在一個(gè)字符串中嵌入一個(gè)雙引號(hào),正確的做法是睬愤?
-
可以利用反斜杠(\)對(duì)雙引號(hào)轉(zhuǎn)義:
In [1]: print ('haha\"') haha"
-
或者用單引號(hào)引起這個(gè)字符串片仿。例如:' I l"o"ve fishc.com '。
In [2]: print ('haha"') haha"
-
輸入 >>>5+8 與輸入 >>>print(5+8) 有何不同尤辱?
直接輸入是將結(jié)果及類型打印到屏幕上
-
而print是將結(jié)果打印到屏幕上
In [15]: 'hello world' Out[15]: 'hello world' In [16]: print("hello world") hello world
第2講
- Python中的BIF是什么砂豌?
Python中的BIF就是Built-in Functions,即內(nèi)置函數(shù)的意思
內(nèi)置函數(shù)就是為了方便程序員快速的編寫腳本程序
-
如何查看Python中的BIF?
輸入
dir(__builtins__)
,查看BIF列表光督,太多了阳距,我截取了一部分,其中小寫部分就是BIF了结借。In [17]: dir(__builtins__) Out[17]: ['ZeroDivisionError', '__IPYTHON__', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable',
-
在ipython中輸入help(bin)筐摘,關(guān)于這個(gè)bin的功能介紹就出來了
In [20]: help(bin) Help on built-in function bin in module builtins: bin(number, /) Return the binary representation of an integer. >>> bin(2796202) '0b1010101010101010101010'
Python 提供了非常豐富的內(nèi)置函數(shù),我們只需要直接調(diào)用即可,
-
例如 print() 的功能是“打印到屏幕”咖熟,input() 的作用是接收用戶輸入
(注:Python3 用 input() 取代了 Python2 的 raw_input()
- Python3 提供了多少個(gè) BIF圃酵?
- 68 個(gè),不信你自己數(shù)數(shù)看
第3講
- 以下哪個(gè)變量的命名不正確馍管?為什么郭赐?
? (A) MM_520 (B) MM520 (C) 520_MM (D) _520_MM
- (C), Python命名不能以數(shù)字開頭
-
除了使用飯斜杠(\)進(jìn)行字符轉(zhuǎn)義,還有什么方法可以打尤贩小:Let's go! 這個(gè)字符串堪置?
In [47]: s = "Let's go!" In [48]: print(s) Let's go!
-
如果非要在原始字符串結(jié)尾輸入反斜杠,可以如何靈活處理张惹?
In [54]: s = r'C:\Python''\\' In [55]: s Out[55]: 'C:\\Python\\'
第4講
-
請(qǐng)寫出與 10 < cost < 50 等價(jià)的表達(dá)式
(10 < cost) and (cost < 50)
-
Python3 中,一行可以書寫多個(gè)語句嗎岭洲?
- 可以宛逗,語句之間用分號(hào)隔開即可
In [67]: 3 > 4 and \ ...: 1 < 2 Out[67]: False
- 或者也可以用括號(hào)括起來
In [68]: (3 > 4 and
...: 1 < 2)
Out[68]: False
-
Python3 中,一個(gè)語句可以分成多行書寫嗎
- 可以盾剩,一行過長(zhǎng)的語句可以使用反斜杠或者括號(hào)分解成幾行雷激,不妨試試:
In [64]: 3 > 4 and \ ...: 1 < 4 Out[64]: False In [65]: 3 > 4 and ...: 1 < 4 File "<ipython-input-65-aeded9bb84bc>", line 1 3 > 4 and ^ SyntaxError: invalid syntax
-
Python3 中,一行可以書寫多個(gè)語句嗎
可以告私,語句之間用分號(hào)隔開
In [66]: print('hello '); print('world') hello world
-
Python中的邏輯
and
和or
屎暇,你理解嘛?- a and b:在a為false的時(shí)候,返回a,否則返回b驻粟。
- a or b: 在a為true的時(shí)候,返回a,否則返回b根悼。
In [70]: 0 and 4 Out[70]: 0 In [71]: 1 and 4 Out[71]: 4
-
聽說過“短路邏輯(short-circuit logic)”嗎?
- 邏輯操作符有個(gè)有趣的特性:在不需要求值的時(shí)候不進(jìn)行操作蜀撑。
- 這么說可能比較“高深”挤巡,舉個(gè)例子,表達(dá)式 x and y酷麦,需要 x 和 y 兩個(gè)變量同時(shí)為真(True)的時(shí)候矿卑,結(jié)果才為真。因此沃饶,如果當(dāng) x 變量得知是假(False)的時(shí)候母廷,表達(dá)式就會(huì)立刻返回 False,而不用去管 y 變量的值糊肤。
- 實(shí)際上琴昆,Python 的做法是如果 x 為假,表達(dá)式會(huì)返回 x 的值(0)馆揉,否則它就會(huì)返回 y 的值
第5講
- 在 Python 中椎咧,int 表示整型,那你還記得 bool、float 和 str 分別表示什么嗎勤讽?
- bool:布爾類型
- float:浮點(diǎn)型
- str:字符串
- 你知道為什么布爾類型(bool)的 True 和 False 分別用 1 和 0 來代替嗎蟋座?
- 計(jì)算機(jī)只認(rèn)識(shí)0和1的二進(jìn)制數(shù),用 0 和 1 來表示 False 和 True 脚牍,不用浪費(fèi)資源在轉(zhuǎn)換的過程上向臀!
- 使用 int() 將小數(shù)轉(zhuǎn)換為整數(shù),結(jié)果是向上取整還是向下取整呢诸狭?
- 小數(shù)取整會(huì)采用比較暴力的截?cái)喾绞饺颍聪蛳氯≌#ㄗⅲ?.5向上取整為6驯遇,向下取整為5)芹彬。
In [14]: a = 5.99
In [15]: b = int(a)
In [16]: a
Out[16]: 5.99
In [17]: b
Out[17]: 5
-
我們?nèi)祟愃季S是習(xí)慣于“四舍五入”法,你有什么辦法使得 int() 按照“四舍五入”的方式取整嗎叉庐?
In [22]: int(5.4 + 0.5) Out[22]: 5 In [23]: int(5.6 + 0.5) Out[23]: 6 In [24]: int(5.5 + 0.5) Out[24]: 6
-
取得一個(gè)變量的類型舒帮,視頻中介紹可以使用 type() 和 isinstance(),你更傾向于使用哪個(gè)陡叠?
In [7]: a Out[7]: '11' In [8]: b Out[8]: 9 In [9]: type(a) Out[9]: str In [10]: type(b) Out[10]: int In [11]: isinstance(a, int) Out[11]: False In [12]: isinstance(a, str) Out[12]: True
- 建議使用 isinstance()玩郊,因?yàn)樗姆祷亟Y(jié)果比較直接,另外 type() 其實(shí)并沒有你想象的那么簡(jiǎn)單枉阵,我們后邊會(huì)講到译红。
-
Python3 可以給變量命名中文名,知道為什么嗎兴溜?
- Pyhton3 源碼文件默認(rèn)使用utf-8編碼(支持中文)侦厚,這就使得以下代碼是合法的:
In [31]: 大白菜 = '哈哈' In [32]: print(大白菜) 哈哈
-
判斷input()的輸入是否為數(shù)字:
s為字符串 s.isalnum() 所有字符都是數(shù)字或者字母,為真返回 Ture拙徽,否則返回 False假夺。 s.isalpha() 所有字符都是字母,為真返回 Ture斋攀,否則返回 False已卷。 s.isdigit() 所有字符都是數(shù)字,為真返回 Ture淳蔼,否則返回 False侧蘸。 s.islower() 所有字符都是小寫,為真返回 Ture鹉梨,否則返回 False讳癌。 s.isupper() 所有字符都是大寫,為真返回 Ture存皂,否則返回 False晌坤。 s.istitle() 所有單詞都是首字母大寫逢艘,為真返回 Ture,否則返回 False骤菠。 s.isspace() 所有字符都是空白字符它改,為真返回 Ture,否則返回 False商乎。 例如: >>> s = 'I LOVE H' >>> s.isupper() >>> True
-
寫一個(gè)程序央拖,判斷給定年份是否為閏年。(注意:請(qǐng)使用已學(xué)過的 BIF 進(jìn)行靈活運(yùn)用)
// 閏年定義:能被4整除但不能被100整除,或者能被400整除都是閏年鹉戚。 # encoding:utf-8 year = raw_input("請(qǐng)輸入一個(gè)年份:") while not year.isdigit(): print("你輸入的不是合法數(shù)字") year = raw_input("請(qǐng)重新一個(gè)年份:") year = int(year) if year % 4 == 0: if year % 400 == 0: print(str(year) + "年是閏年") elif year % 100 == 0: print(str(year) + "年不是閏年") else: print(str(year) + "年是閏年") else: print(str(year) + "年不是閏年")
浮點(diǎn)型數(shù)據(jù)用科學(xué)記數(shù)法表示
第6講:常用操作符
- 優(yōu)先級(jí)問題
-
Python 的 floor 除法現(xiàn)在使用 “//” 實(shí)現(xiàn)鲜戒,那 3.0 // 2.0 您目測(cè)會(huì)顯示什么內(nèi)容呢?
- 答:如果回答是 1.5 那么很遺憾抹凳,您受到 C 語言的影響比較大遏餐,Python 這里會(huì)義無反顧地執(zhí)行 floor 除法原則,答案是:1.0
a < b < c 事實(shí)上是等于赢底?
- (a < b) and (b < c)
-
不使用 IDLE失都,你可以輕松說出 5 ** -2 的值嗎?
- 0.04颖系,也就是 1/25
-
請(qǐng)用最快速度說出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
- not or and 的優(yōu)先級(jí)是不同的:not > and > or
- 我們按照優(yōu)先級(jí)給它們加上括號(hào):(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
== 0 or 0 or 4 or 6 or 9
== 4 - 3 and 4 == 4,而 3 or 4 == 3辩越。
-
請(qǐng)寫一個(gè)程序打印出 0~100 所有的奇數(shù)嘁扼。
# encoding:utf-8 for i in range(1, 101): if i % 2 != 0: print(str(i) + ' ')
-
愛因斯坦曾出過這樣一道有趣的數(shù)學(xué)題:有一個(gè)長(zhǎng)階梯,若每步上2階黔攒,最后剩1階趁啸;若每步上3階,最后剩2階督惰;若每步上5階不傅,最后剩4階;若每步上6階赏胚,最后剩5階访娶;只有每步上7階,最后剛好一階也不剩觉阅。
#encoding:utf-8 n = 7 flag = False while not flag: if (n % 2 == 1) and (n % 3 == 2) and (n % 5 == 4) and (n % 6 == 5): print('臺(tái)階數(shù)為' + str(n)) flag = True else: n += 7
運(yùn)算符的優(yōu)先級(jí):冪運(yùn)算 > 正負(fù)號(hào) > 算術(shù)運(yùn)算符 > 比較運(yùn)算符 > 邏輯運(yùn)算符
第七課:了不起的分支和循環(huán)
-
assert 的作用是什么崖疤?
- assert這個(gè)關(guān)鍵字我們稱之為“斷言”,當(dāng)這個(gè)關(guān)鍵字后邊的條件為假的時(shí)候典勇,程序自動(dòng)崩潰并拋出AssertionError的異常劫哼。
- 當(dāng)我們?cè)跍y(cè)試程序的時(shí)候就很好用,因?yàn)榕c其讓錯(cuò)誤的條件導(dǎo)致程序今后莫名其妙地崩潰割笙,不如在錯(cuò)誤條件出現(xiàn)的那一瞬間我們實(shí)現(xiàn)“自爆”权烧。
- 一般來說我們可以用Ta再程序中置入檢查點(diǎn),當(dāng)需要確保程序中的某個(gè)條件一定為真才能讓程序正常工作的話,assert關(guān)鍵字就非常有用了般码。
假設(shè)有 x = 1妻率,y = 2,z = 3侈询,請(qǐng)問如何快速將三個(gè)變量的值互相交換舌涨?
x, y, z = y, z, x
-
你聽說過成員資格運(yùn)算符嗎?
-
Python 有一個(gè)成員資格運(yùn)算符:in扔字,用于檢查一個(gè)值是否在序列中囊嘉,如果在序列中返回 True,否則返回 False革为。
>>> name = '小甲魚' >>> '魚' in name True >>> '肥魚' in name False
-
-
請(qǐng)將以下代碼修改為三元操作符實(shí)現(xiàn)
x, y, z = 6, 5, 4 if x < y: small = x if z < small: small = z elif y < z: small = y else: small = z
實(shí)現(xiàn):
x, y, z = 6, 5, 4 small = x if (x < y and x < z) else (y if y < z else z) print small
第九課:了不起的分支和循環(huán)3
-
下面的循環(huán)會(huì)打印多少次"I Love FishC"扭粱?
for i in 5: print('I Love FishC')
答:會(huì)報(bào)錯(cuò),上節(jié)課的課后習(xí)題我們提到了 in 是“成員資格運(yùn)算符”震檩,而不是像 C 語言那樣去使用 for 語法琢蛤。Python 的 for 更像腳本語言的 foreach。
-
回顧一下 break 和 continue 在循環(huán)中起到的作用抛虏?
- break語句的作用是終止當(dāng)前循環(huán)博其,跳出循環(huán)體。
- continue語句的作用是終止本輪循環(huán)并開始下一輪循環(huán)(這里要注意的是:在開始下一輪循環(huán)之前迂猴,會(huì)先測(cè)試循環(huán)條件)慕淡。
請(qǐng)問 range(10) 生成哪些數(shù)?
- 會(huì)生成 range(0, 10)沸毁,list(range(0, 10)) 轉(zhuǎn)換成列表是:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]峰髓,注意不包含 10 哦。
-
【學(xué)會(huì)提高代碼的效率】你的覺得以下代碼效率方面怎樣息尺?有沒有辦法可以大幅度改進(jìn)(仍然使用while)携兵?
i = 0 string = 'ILoveFishC.com' while i < len(string)): print(i) i += 1
答:這段代碼之所以“效率比較低”是因?yàn)槊看窝h(huán)都需要調(diào)用一次 len() 函數(shù)(我們還沒有學(xué)到函數(shù)的概念,小甲魚這里為零基礎(chǔ)的朋友形象的解釋下:就像你打游戲打得正HIGH的時(shí)候搂誉,老媽讓你去買鹽......你有兩種選擇徐紧,一次買一包,一天去買五次炭懊,或者一次性買五包回來浪汪,老媽要就直接給她。)
修改如下:i = 0 string = 'ILoveFishC.com' length = len(string) while i < length: print(i) i += 1
-
設(shè)計(jì)一個(gè)驗(yàn)證用戶密碼程序凛虽,用戶只有三次機(jī)會(huì)輸入錯(cuò)誤死遭,不過如果用戶輸入的內(nèi)容中包含"*"則不計(jì)算在內(nèi)。
#encoding:utf-8 password = 'fsy' user_in = raw_input("請(qǐng)輸入密碼:") time = 3 while time: if password == user_in: print("輸入正確凯旋,請(qǐng)進(jìn)") break else: if user_in.find('*') == 0: user_in = raw_input("您輸錯(cuò)了呀潭,請(qǐng)重新:") continue user_in = raw_input("您輸錯(cuò)了钉迷,請(qǐng)重新:") time -= 1
count = 3 password = 'FishC.com' while count: passwd = input('請(qǐng)輸入密碼:') if passwd == password: print('密碼正確,進(jìn)入程序......') break elif '*' in passwd: print('密碼中不能含有"*"號(hào)钠署!您還有', count, '次機(jī)會(huì)糠聪!', end=' ') continue else: print('密碼輸入錯(cuò)誤!您還有', count-1, '次機(jī)會(huì)谐鼎!', end=' ') count -= 1
編寫一個(gè)程序舰蟆,求 100~999 之間的所有水仙花數(shù)。
如果一個(gè) 3 位數(shù)等于其各位數(shù)字的立方和狸棍,則稱這個(gè)數(shù)為水仙花數(shù)身害。例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一個(gè)水仙花數(shù)草戈。
for i in range(100, 1000):
sum = 0
temp = i
while temp:
sum = sum + (temp%10) ** 3
temp //= 10 # 注意這里要使用地板除哦~
if sum == i:
print(i)
-
三色球問題
有紅塌鸯、黃、綠三種顏色的求唐片,其中紅球 3 個(gè)丙猬,黃球 3 個(gè),綠球 6 個(gè)费韭。先將這 12 個(gè)球混合放在一個(gè)盒子中茧球,從中任意摸出 8 個(gè)球,編程計(jì)算摸出球的各種顏色搭配星持。
print('red\tyellow\tgreen') for red in range(0, 4): for yellow in range(0, 4): for green in range(2, 7): if red + yellow + green == 8: # 注意抢埋,下邊不是字符串拼接,因此不用“+”哦~ print(red, '\t', yellow, '\t', green)
注釋:range(2, 7)是產(chǎn)生[2, 3, 4, 5, 6]5個(gè)數(shù)钉汗,綠球不能是1個(gè)羹令,因?yàn)槿绻G球是1個(gè)的話鲤屡,紅球 + 黃球需要有7個(gè)才能符合題意损痰,而紅球和黃球每種只有3個(gè),因此是range(2, 7)
第十課:列表:一個(gè)“打了激素”的數(shù)組
-
列表都可以存放一些什么東西酒来?
- 答:我們說 Python 的列表是一個(gè)打了激素的數(shù)組卢未,如果把數(shù)組比喻成集裝箱,那么 Python 的列表就是一個(gè)大倉(cāng)庫(kù)堰汉,Ta 可以存放我們已經(jīng)學(xué)習(xí)過的任何數(shù)據(jù)類型辽社。
-
向列表增加元素有哪些方法?
- 答:這節(jié)課我們教過大家三種方法想列表增加元素翘鸭,分別是:append()滴铅、extend() 和 insert()。
-
append() 方法和 extend() 方法都是向列表的末尾增加元素就乓,請(qǐng)問他們有什么區(qū)別汉匙?
-
答:
append() 方法是將參數(shù)作為一個(gè)元素增加到列表的末尾拱烁。
extend() 方法則是將參數(shù)作為一個(gè)列表去擴(kuò)展列表的末尾。>>> name = ['F', 'i', 's', 'h'] >>> name.append('C') >>> name ['F', 'i', 's', 'h', 'C'] >>> name.extend(['.', 'c']) >>> name ['F', 'i', 's', 'h', 'C', '.', 'c'] >>> name.append(['o', 'm']) >>> name ['F', 'i', 's', 'h', 'C', '.', 'c', ['o', 'm']]
-