/ │ /?。?/div>
│ Z _,<?。 ?/`ヽ
│ ヽ / 〉
Y ` / /
?● ? ● ??〈 /
() へ |?。堋?/div>
>? ?_ ?!?│ //
/ へ / ?<| \\
ヽ_? (_/ │//
7 |/
?。鲸Dr ̄ ̄`?―_
''')
練習(xí)2-聽見無臉男的聲音-參考
題目要求:
在千尋進(jìn)入魔法世界的期間,有一位“無臉男”一直跟在她的身邊。一開始,千尋對(duì)無臉男的跟蹤感到害怕,直到她第一次聽見了無臉男對(duì)她說的話后,才理解了他,并和他成為了朋友。
【講解】
下面是無臉男對(duì)千尋說的話,請(qǐng)你把這段話打印出來,并且使用**轉(zhuǎn)義字符**,把無臉男說的話按照正確格式打印:
千尋你好,人們叫我'無臉男'
這個(gè)世界的人都選擇無視我
只有你看到了我并和我打招呼
我感到很孤單,很孤單
你愿意和我成為朋友嗎?
題目講解
1.復(fù)制下面這段無臉男對(duì)千尋說的話:
千尋你好,人們叫我'無臉男' 這個(gè)世界的人都選擇無視我 只有你看到了我并和我打招呼 我感到很孤單,很孤單 你愿意和我成為朋友嗎?
2.提示:文本中有引號(hào)的地方需要用到轉(zhuǎn)義字符 \' ;需要換行的地方用 \n
【參考】
print('千尋你好,人們叫我'無臉男'\n這個(gè)世界的人都選擇無視我\n只有你看到了我并和我打招呼\n我感到很孤單,很孤單\n你愿意和我成為朋友嗎?')
第1關(guān)
練習(xí)1-程序員的一人飲酒醉-參考
題目要求
在Python的魔法世界,最常用的數(shù)據(jù)類型有三種:字符串(str)、整數(shù)(int)和浮點(diǎn)數(shù)(float)。
在**數(shù)據(jù)拼接**中,為了將不同的信息進(jìn)行整合,可以使用**拼接符號(hào)**。但是,如果數(shù)據(jù)非字符串類型,則無法進(jìn)行拼接。
此時(shí),我們可以使用數(shù)據(jù)轉(zhuǎn)換函數(shù)**str()**,將數(shù)據(jù)轉(zhuǎn)換為字符串類型后,再進(jìn)行拼接。
【講解】
請(qǐng)運(yùn)用下方變量,使用str()函數(shù)打印兩句話。
第一句話:1人我編程累碎掉的節(jié)操滿地堆
第二句話:2眼是bug相隨我只求今日能早歸
可使用變量:
number1 = 1,number2 = 2
unit1 = '人',unit2 = '眼'
line1 = '我編程累',line2 = '是bug相隨'
sentence1 = '碎掉的節(jié)操滿地堆',sentence2 = '我只求今日能早歸'
題目講解
1.將非字符串型變量轉(zhuǎn)換為字符串類型
2.將字符串類變量拼接在一起
【講解】
1.使用str()函數(shù)
2.使用拼接符號(hào)** **
3.使用print()函數(shù)
【參考】
number1 = 1
number2 = 2
unit1 = '人'
unit2 = '眼'
line1 = '我編程累'
line2 = '是bug相隨'
sentence1 = '碎掉的節(jié)操滿地堆'
sentence2 = '我只求今日能早歸'
first = str(number1) unit1 line1 sentence1
second = str(number2) unit2 line2 sentence2
print(first)
print(second)
練習(xí)2-非酋的吐槽-參考
題目要求
在**數(shù)據(jù)拼接**中,為了將不同的信息進(jìn)行整合,可以使用**拼接符號(hào)**。但是,如果數(shù)據(jù)非字符串類型,則無法進(jìn)行拼接。此時(shí),我們可以使用數(shù)據(jù)轉(zhuǎn)換函數(shù)**str()**,將數(shù)據(jù)轉(zhuǎn)換為字符串類型后,再進(jìn)行拼接。但是有的時(shí)候,針對(duì)不同類型的數(shù)據(jù),我們需要經(jīng)歷多次轉(zhuǎn)換,最后才能轉(zhuǎn)為字符串類型。
【講解】
請(qǐng)使用**轉(zhuǎn)換函數(shù)**str()、int()、float(),運(yùn)用下方變量,使用數(shù)據(jù)轉(zhuǎn)換及數(shù)據(jù)拼接,輸出結(jié)果: 臉黑怪我咯7張藍(lán)票一個(gè)SSR都沒有
可使用變量:
slogan = '臉黑怪我咯',number = '7.8',unit = '張',sentence = '藍(lán)票一個(gè)SSR都沒有'
題目講解
1.由于變量中與小數(shù)形式的字符串,所以需要使用轉(zhuǎn)換函數(shù)將此變量轉(zhuǎn)換為浮點(diǎn)型
2.轉(zhuǎn)換后使用int()函數(shù)取整
3.由于數(shù)據(jù)拼接需要變量為字符串形式,所以需要將變量轉(zhuǎn)化為字符串類型
4.最后數(shù)據(jù)拼接,得出結(jié)果
【講解】
- 使用float()函數(shù)將小數(shù)形式的字符串變量轉(zhuǎn)換
- 使用int()函數(shù)取整
- 使用str()函數(shù)將數(shù)據(jù)轉(zhuǎn)換為字符串形式
- 使用** **進(jìn)行數(shù)據(jù)拼接
【參考】
slogan = '臉黑怪我咯'
number = '7.8'
unit = '張'
sentence = '藍(lán)票一個(gè)SSR都沒有'
word = slogan str(int(float(number))) sentence
print(word)
第2關(guān)
練習(xí)1-偷回寶石-參考
題目要求
在滅霸打了一個(gè)響指,宇宙一半生物都灰飛煙滅后,剩下的復(fù)仇者聯(lián)盟成員們?cè)诰薮蟮膭?chuàng)傷之中,依舊沒有放棄反擊滅霸的機(jī)會(huì),他們決定利用最后一次行動(dòng)機(jī)會(huì),去把滅霸手里的寶石偷回來。最終,他們因?yàn)閷?shí)力相差太大,1顆寶石都沒有偷回來。
【講解】
請(qǐng)你寫出一段代碼:
如果偷回的寶石數(shù)是4顆及以上,輸出結(jié)果“獲得了打敗滅霸的力量,反殺穩(wěn)了”
如果偷回的寶石數(shù)是1-3顆,輸出結(jié)果“可以全員出動(dòng),殊死一搏”
如果偷回的寶石數(shù)是0顆,輸出結(jié)果“沒辦法了,只能嘗試呼叫驚奇隊(duì)長”
注意:標(biāo)點(diǎn)符號(hào)都為英文格式
題目講解
1.為變量【賦值】,寫出“一個(gè)寶石都沒偷回來”的情況
2.用【if】寫第一個(gè)條件:如果偷回的寶石數(shù)是4顆及以上,輸出結(jié)果:獲得了打敗滅霸的力量,反殺穩(wěn)了
3.用【elif】寫第二個(gè)條件:如果偷回的寶石數(shù)是1-3顆,輸出結(jié)果:可以全員出動(dòng),殊死一搏
4.用【else】寫第三個(gè)條件:如果偷回的寶石數(shù)是0顆,輸出結(jié)果:沒辦法了,只能嘗試呼叫驚奇隊(duì)長
【參考】
#以下為答案示例(stonenumber=0/1/2/3/4/5/6都是對(duì)的)
stonenumber=5
#偷回寶石數(shù)量賦值
if stonenumber >= 4:
#條件:如果你擁有的寶石數(shù)量大于等于4個(gè)
print('獲取打敗滅霸的力量')
#結(jié)果:顯示‘獲取打敗滅霸的力量’的結(jié)果
elif 1 < stonenumber <= 3:
#條件:如果想讓寶石數(shù)量停留在4至5個(gè)
print('可以全員出動(dòng),殊死一搏')
#結(jié)果:顯示‘可以全員出動(dòng),殊死一搏’的結(jié)果
else:
#條件:當(dāng)賦值不滿足if和elif條件時(shí),執(zhí)行else下的命令,寶石數(shù)量在3個(gè)以下
print('沒辦法了,只能嘗試呼叫驚奇隊(duì)長')
#結(jié)果:顯示‘沒辦法了,只能嘗試呼叫驚奇隊(duì)長’的結(jié)果
練習(xí)2-美國隊(duì)長的工資-參考
題目要求
復(fù)仇者聯(lián)盟的成員也是有工資的,然而,由于美國隊(duì)長一直被冰封在北極,錯(cuò)過了多次調(diào)薪機(jī)會(huì),所以美國隊(duì)長的工資一直是每月80美元。光榮挺進(jìn)史塔克窮人榜前三名,并獲封“美元隊(duì)長”稱號(hào)。
【講解】
請(qǐng)你寫出一段代碼,判斷美國隊(duì)長的工資水平,代碼需要滿足如下條件:
如果月工資小于等于500美元,顯示“歡迎進(jìn)入史塔克窮人幫前三名”
如果月工資在100-500美元之間,顯示“請(qǐng)找弗瑞隊(duì)長加薪”
如果月工資小于等于100美元,顯示“恭喜您榮獲“美元隊(duì)長”稱號(hào)!”
如果月工資在500-1000美元之間(含1000美元),打印“祝賀您至少可以溫飽了?!?/p>
其他情況下,如果工資大于1000美元,打印“經(jīng)濟(jì)危機(jī)都難不倒您!”
如果工資在1000-20000美元(含20000美元)之間,打印“您快比鋼鐵俠有錢了!”
如果月工資大于20000美元,打印“您是不是來自于瓦坎達(dá)國?”
不管賦值改變后輸出結(jié)果如何,都需固定打印“程序結(jié)束”
題目講解
1.根據(jù)題目,我們知道這里涉及嵌套條件,所以可以用扒洋蔥法梳理代碼邏輯
2.根據(jù)要求,先寫最外層的**if……elif……else……**條件
3.根據(jù)題目的從屬關(guān)系分析,最外層的**if**條件和**else**條件都有額外條件
4.依次在外層基礎(chǔ)條件下添加額外條件
【講解】
1.使用if條件嵌套
2.嵌套條件需要縮進(jìn)
3.注意單雙引號(hào)同時(shí)存在時(shí)的互相轉(zhuǎn)換
4.通過錢數(shù)輸出對(duì)應(yīng)的結(jié)果
【參考】
#以下為答案示例(salary為多少都是對(duì)的)
salary = 200
#對(duì)美國隊(duì)長的工資賦值
if salary <= 500:
#條件:如果工資小于等于500
print('歡迎進(jìn)入史塔克窮人幫前三名')
#結(jié)果:顯示‘歡迎進(jìn)入史塔克窮人幫前三名’的結(jié)果
if salary <= 100:
#條件:如果工資小于等于100
print('恭喜您榮獲“美元隊(duì)長”稱號(hào)!')
#結(jié)果:顯示‘恭喜您榮獲“美元隊(duì)長”稱號(hào)!’的結(jié)果
else:
#條件:當(dāng)條件滿足第4行if,不滿足第8行if,執(zhí)行這個(gè)命令
print('請(qǐng)找弗瑞隊(duì)長加薪')
#結(jié)果:顯示‘請(qǐng)找弗瑞隊(duì)長加薪’的結(jié)果
elif 500 < salary <= 1000:
#條件:如果工資大于500,小于等于1000
print('祝賀您至少可以溫飽了。')
#結(jié)果:顯示‘祝賀您至少可以溫飽了。’的結(jié)果
elif salary > 1000:
#條件:如果工資大于1000
print('經(jīng)濟(jì)危機(jī)都難不倒您!')
#結(jié)果:顯示‘經(jīng)濟(jì)危機(jī)都難不倒您!’的結(jié)果
if 1000 < salary <= 20000:
#條件:如果工資大于1000,小于等于20000
print('您快比鋼鐵俠有錢了!')
#結(jié)果:顯示‘您快比鋼鐵俠有錢了!’的結(jié)果
else:
#條件:滿足第20行elif條件,不滿足第24行if條件,則執(zhí)行這個(gè)命令
print('您是不是來自于瓦坎達(dá)國?')
#結(jié)果:顯示‘您是不是來自于瓦坎達(dá)國?’的結(jié)果
print('程序結(jié)束')
第3關(guān)
練習(xí)1-哈利波特的寵物-參考
題目要求
哈利·波特在對(duì)角巷購買寵物時(shí)犯難了,他不知道該給自己的貓頭鷹起什么名字?,F(xiàn)在請(qǐng)你幫助哈利·波特,為他的貓頭鷹起一個(gè)名字。
【講解】
請(qǐng)你寫一段代碼:
為哈利·波特的貓頭鷹起個(gè)名字,并打印出結(jié)果【哈利·波特的貓頭鷹叫做XX】(XX是你起的名字)。
題目講解
1.搜集貓頭鷹的名字(知識(shí)點(diǎn):input(),賦值)
2.打印結(jié)果【哈利·波特的貓頭鷹叫做XX】(XX是你取的名字)(知識(shí)點(diǎn):數(shù)據(jù)拼接)
【參考】
name = input('為哈利·波特的貓頭鷹起個(gè)名字:')
print('哈利·波特的貓頭鷹叫做' name)
練習(xí)2-羅恩的減肥計(jì)劃-參考
題目要求
為了三強(qiáng)爭(zhēng)霸賽的舞會(huì),羅恩想要減肥,所以他決定控制自己的飲食,少吃一點(diǎn)巧克力蛙。
哈利為了幫助好朋友羅恩,和他一起制定了一個(gè)飲食游戲。
游戲規(guī)則如下:
如果羅恩一天吃超過10個(gè)巧克力蛙,羅恩要給哈利100塊;
如果羅恩一天吃小于等于10個(gè)的巧克力蛙,哈利就給羅恩100塊。
【講解】
請(qǐng)你寫出一段代碼:
當(dāng)隨機(jī)輸入羅恩一天吃的巧克力蛙數(shù)量時(shí),可以判斷出這天,是羅恩給哈利錢,還是哈利給羅恩錢,并打印出來。
題目講解
1.搜集羅恩吃的巧克力數(shù)量(知識(shí)點(diǎn):input()、數(shù)據(jù)轉(zhuǎn)換)
2.寫第一個(gè)條件:如果羅恩一天吃超過10個(gè)巧克力蛙,羅恩要給哈利100塊;
3.寫第二個(gè)條件:如果羅恩一天吃小于等于10個(gè)的巧克力蛙,哈利就給羅恩100塊。
(知識(shí)點(diǎn):if...else...)
【參考】
number = int(input('請(qǐng)輸入羅恩吃的巧克力數(shù)量:'))
#int將其轉(zhuǎn)換為整數(shù),之后好進(jìn)行大小的比較
if number > 10:
print('羅恩要給哈利100塊')
else:
print('哈利就給羅恩100塊')
練習(xí)3-古靈閣金幣兌換-參考
題目要求
接受了霍格沃茨來信的你,帶著欣喜與好奇,跟著魔咒學(xué)老師吳楓教授,來到了巫師世界的對(duì)角巷。在這個(gè)相當(dāng)于人類集市的對(duì)角巷,你立刻被魔法世界稀奇古怪的東西吸引,想掏手機(jī)刷花唄買買買。但是吳楓教授說,麻瓜(沒有魔法的人)貨幣在魔法世界不流通,但是你可以去巫師世界的銀行——古靈閣兌換貨幣。你立刻跟著吳楓老師跑到了古靈閣。當(dāng)你進(jìn)到巫師世界的銀行時(shí),就有銀行的小精靈職員問好:
**注意:以下背景與題目要求相關(guān)**
小精靈:您好,歡迎古靈閣,請(qǐng)問您需要幫助嗎?需要or不需要?
你:需要
小精靈:請(qǐng)問您需要什么幫助呢?1 存取款;2 貨幣兌換;3 咨詢
你:2
小精靈:金加隆和人民幣的兌換率為1:51.3,即一金加隆=51.3人民幣
小精靈:請(qǐng)問您需要兌換多少金加隆呢?
(你說了一個(gè)數(shù)字)
小精靈:好的,我知道了,您需要兌換(你剛說的數(shù)字)金加隆。
小精靈:那么,您需要付給我(將你剛說的數(shù)字轉(zhuǎn)換為金加隆的數(shù)字)人民幣。
注1:如果選擇不需要幫助,小精靈會(huì)禮貌地說'好的,再見。'
注2: 如果選擇幫助【1 存取款】,小精靈會(huì)推薦你去存取款窗口;如果選擇幫助【3 咨詢】,小精靈會(huì)推薦你去咨詢窗口。
題目講解
和小精靈的對(duì)話可以被這么拆分:
1.最基礎(chǔ)的條件判斷:需要幫助;不需要幫助(if...else...)
2.在需要幫助的情況下,又分為1存取款;2貨幣兌換;3咨詢;三種情況。(if...elif...else...)
3.在2-貨幣兌換的情況下,需要再提一個(gè)問題,收集答案,打印出小精靈回答的結(jié)果(input()、數(shù)據(jù)拼接、數(shù)據(jù)轉(zhuǎn)換)。
【參考】
chioce = input('您好,歡迎古靈閣,請(qǐng)問需要幫助嗎?需要or不需要?')
if chioce == '需要':
number = input('請(qǐng)問您需要什么幫助呢?1 存取款;2 貨幣兌換;3 咨詢')
if number == '2':
print('金加隆和人民幣的兌換率為1:51.3,即一金加隆=51.3人民幣')
print('請(qǐng)問您需要兌換多少金加隆呢?')
money = input('請(qǐng)輸入你需要兌換的金加隆')
print('好的,我知道了,您需要兌換' money '金加隆。')
print('那么,您需要付給我' str(int(money)*51.3) '人民幣。')
elif number == '1':
print('請(qǐng)到存取款窗口辦理')
elif number == '3':
print('請(qǐng)到咨詢窗口咨詢')
else:
print('輸入錯(cuò)誤,沒有你需要的服務(wù)')
elif chioce == '不需要':
print('好的,再見')
else:
print('輸入錯(cuò)誤')
第4關(guān)
練習(xí)1-君子愛‘?dāng)?shù)’取之有道-參考
題目講解
第一步:取出列表中的第三個(gè)元素(list1[2]),字典{'愛':'love'}
第二步:取出list1[2]中鍵'愛'所對(duì)應(yīng)的值,即'love’(list1[2]['愛'])
【參考】
list1 = [{'嫉妒':'envy'},{'恨':'hatred'},{'愛':'love'}]
print(list1[2]['愛'])
題目講解
第一步:取出字典中鍵為3對(duì)應(yīng)的值(dict1[3]),即['love','hatred','envy']
第二步:再取出列表['love','hatred','envy']中的第一個(gè)元素(dict1[3][0])
【參考】
dict1 = {1:['cake','scone','puff'],2:['London','Bristol','Bath'],3:['love','hatred','envy']}
print(dict1[3][0])
題目講解
第一步:元組和列表都是序列,提取的方式也是偏移量,如 tuple1[1]、tuple1[1:]。
第二步:先取出列表中的第二個(gè)元素中的(list2[1])
第三步:然后在第二個(gè)元素的基礎(chǔ)上在去取值,即list2[1][1]
注:(元組和列表的取值方式是相同的)
【參考】
tuple1 = ('A','B')
list2 = [('A','B'),('C','D'),('E','F')]
print(tuple1[0])
print(list2[1][1])
第5關(guān)
練習(xí)1-數(shù)數(shù)字-參考
題目講解
小美想知道你是怎么用 for循環(huán) 的,在下方寫下你的代碼吧~
小美還想知道你是怎么用 while循環(huán) 的,在下方寫下你的代碼吧~
【參考】
# while 循環(huán)
n = 0
while n < 7:
n = n 1
if n != 4: # 當(dāng)num != 4,執(zhí)行打印語句;等于4時(shí)不打印。
print(n)
# for 循環(huán)
for num in range(1,8): # 為同時(shí)能運(yùn)行兩個(gè)循環(huán),新取參數(shù) num。
if num != 4: # 當(dāng)num != 4,執(zhí)行打印語句;等于4時(shí)不打印。
print(num)
、
第6關(guān)
練習(xí)1-囚徒困境-參考
【講解】
1.開啟循環(huán),兩人分別選擇
首先,我們需要知道兩個(gè)囚徒各自的選擇(input*2)。
2.循環(huán)當(dāng)中,有判斷和跳出
兩個(gè)囚徒的選擇,會(huì)有四種不同的結(jié)果。所以,可以用'if...elif...else'。
判決提示:
若兩人都認(rèn)罪,則兩人各判10年;
若一個(gè)認(rèn)罪一個(gè)抵賴,則認(rèn)罪的人判1年,抵賴的人判20年;
若兩人都抵賴,則各判3年——這種情況下跳出循環(huán)。
【參考】
while True:
a = input('A,你認(rèn)罪嗎?請(qǐng)回答認(rèn)罪或者不認(rèn)')
b = input('B,你認(rèn)罪嗎?請(qǐng)回答認(rèn)罪或者不認(rèn)')
while True:
a = input('A,你認(rèn)罪嗎?請(qǐng)回答認(rèn)罪或者不認(rèn)')
b = input('B,你認(rèn)罪嗎?請(qǐng)回答認(rèn)罪或者不認(rèn)')
if a == '認(rèn)罪' and b == '認(rèn)罪':
print('兩人都得判10年,唉')
elif a == '不認(rèn)' and b == '認(rèn)罪':
print('A判20年,B判1年,唉')
elif a == '認(rèn)罪' and b == '不認(rèn)':
print('A判1年,B判20年')
else:
print('都判3年,太棒了')
break # 當(dāng)滿足開頭提到的條件時(shí),跳出循環(huán)。
第7關(guān)
練習(xí)1-再來一盤-參考
【講解】
要達(dá)成目標(biāo),有兩種方案:
1.while True break:
開啟一個(gè)無限循環(huán),設(shè)定跳出條件。
當(dāng)?shù)玫娇隙ɑ貜?fù)時(shí),繼續(xù)運(yùn)行;當(dāng)?shù)玫椒穸ɑ貜?fù)時(shí),運(yùn)行break,停止循環(huán),退出游戲。
2.while 變量名 變量名的布爾值判斷:
在開頭設(shè)某變量的布爾值為True,input后開啟判斷變量的布爾值是否改變。
當(dāng)?shù)玫娇隙ɑ貜?fù)時(shí),while True,繼續(xù)運(yùn)行;當(dāng)?shù)玫椒穸ɑ貜?fù)時(shí),while False,停止循環(huán),退出游戲。下面,我們先用較簡單的代碼來體會(huì)一下這兩種方案。
方案1:while True break
開啟一個(gè)無限循環(huán),設(shè)定跳出條件。
當(dāng)?shù)玫娇隙ɑ貜?fù)時(shí),繼續(xù)運(yùn)行;當(dāng)?shù)玫椒穸ɑ貜?fù)時(shí),運(yùn)行break,停止循環(huán),退出游戲。
方案2:while 變量名 變量名的布爾值判斷
在開頭設(shè)某變量的布爾值為True,input后開啟判斷變量的布爾值是否改變。
當(dāng)?shù)玫娇隙ɑ貜?fù)時(shí),while True,繼續(xù)運(yùn)行;當(dāng)?shù)玫椒穸ɑ貜?fù)時(shí),while False,停止循環(huán),退出游戲。
# 方案1
while True:
a1 = input('要繼續(xù)游戲嗎,請(qǐng)輸入n退出,輸入其他繼續(xù):')
if a1 == 'n':
break
# 方案2
again = True
while again:
a2 = input('要繼續(xù)游戲嗎,請(qǐng)輸入y繼續(xù),輸入其他退出:')
if a2 == 'y':
again = True
else:
again = False
【參考】
#for循環(huán)
import time
import random
player_victory = 0
enemy_victory = 0
for i in range(1,4):
time.sleep(1.5)
print(' \n——————現(xiàn)在是第 %s 局——————' % i)
player_life = random.randint(100,150)
player_attack = random.randint(30,50)
enemy_life = random.randint(100,150)
enemy_attack = random.randint(30,50)
print('【玩家】\n血量:%s\n攻擊:%s' % (player_life,player_attack))
print('------------------------')
time.sleep(1)
print('【敵人】\n血量:%s\n攻擊:%s' % (enemy_life,enemy_attack))
print('-----------------------')
time.sleep(1)
while player_life > 0 and enemy_life > 0:
player_life = player_life - enemy_attack
enemy_life = enemy_life - player_attack
print('你發(fā)起了攻擊,【玩家】剩余血量%s' % player_life)
print('敵人向你發(fā)起了攻擊,【敵人】的血量剩余%s' % enemy_life)
print('-----------------------')
time.sleep(1.2)
if player_life > 0 and enemy_life <= 0:
player_victory = 1
print('敵人死翹翹了,你贏了!')
elif player_life <= 0 and enemy_life > 0:
enemy_victory = 1
print('悲催,敵人把你干掉了!')
else:
print('哎呀,你和敵人同歸于盡了!')
if player_victory > enemy_victory :
time.sleep(1)
print('\n【最終結(jié)果:你贏了!】')
elif enemy_victory > player_victory:
print('\n【最終結(jié)果:你輸了!】')
else:
print('\n【最終結(jié)果:平局!】')
#while 循環(huán)
import time
import random
player_victory = 0
enemy_victory = 0
while True:
for i in range(1,4):
time.sleep(1.5)
print(' \n——————現(xiàn)在是第 %s 局——————' % i)
player_life = random.randint(100,150)
player_attack = random.randint(30,50)
enemy_life = random.randint(100,150)
enemy_attack = random.randint(30,50)
print('【玩家】\n血量:%s\n攻擊:%s' % (player_life,player_attack))
print('------------------------')
time.sleep(1)
print('【敵人】\n血量:%s\n攻擊:%s' % (enemy_life,enemy_attack))
print('-----------------------')
time.sleep(1)
while player_life > 0 and enemy_life > 0:
player_life = player_life - enemy_attack
enemy_life = enemy_life - player_attack
print('你發(fā)起了攻擊,【玩家】剩余血量%s' % player_life)
print('敵人向你發(fā)起了攻擊,【敵人】的血量剩余%s' % enemy_life)
print('-----------------------')
time.sleep(1.2)
if player_life > 0 and enemy_life <= 0:
player_victory = 1
print('敵人死翹翹了,你贏了!')
elif player_life <= 0 and enemy_life > 0:
enemy_victory = 1
print('悲催,敵人把你干掉了!')
else:
print('哎呀,你和敵人同歸于盡了!')
if player_victory > enemy_victory :
time.sleep(1)
print('\n【最終結(jié)果:你贏了!】')
elif enemy_victory > player_victory:
print('\n【最終結(jié)果:你輸了!】')
else:
print('\n【最終結(jié)果:平局!】')
a1 = input('要繼續(xù)游戲嗎,請(qǐng)輸入n退出,輸入其他繼續(xù):')
if a1 == 'n':
break
第8關(guān)
練習(xí)1-老師我?guī)湍?參考
1. 合并列表-1
分析問題,明確結(jié)果
我們的問題是:將兩個(gè)列表合并起來,并按照從低到高的順序排序,要得到問題的結(jié)果,我們還需要借助打印函數(shù)看看我們合并的是否正確。
思考要用到的知識(shí)&思考切入點(diǎn)
增加列表的內(nèi)容與合并列表的含義相同,所以我們可以使用append作為解題的切入點(diǎn),請(qǐng)你試試!
提示:假設(shè)要用已學(xué)過的知識(shí)來完成這道作業(yè),需要用到列表的新增函數(shù)和循環(huán)。
list1 = [91, 95, 97, 99]
list2 = [92, 93, 96, 98]
for i in list2:
list1.append(i)
print(list1)
2.合并列表-2
上網(wǎng)搜索新知識(shí)&找到新的切入點(diǎn)
好了。你已經(jīng)完成了第一個(gè)需求:合并列表。不過,有沒有發(fā)現(xiàn),這個(gè)代碼還是比較冗余的。有沒有更簡單的方法呢?請(qǐng)你自己上網(wǎng)搜索一下
`python 合并兩個(gè)列表`,看看是否有更簡單的方法(提示:以字母e開頭),學(xué)會(huì)后再回來繼續(xù)做作業(yè)吧。
請(qǐng)你根據(jù)新學(xué)到的知識(shí),簡化代碼。
注(如果你直接將 list2 合并到 list1 上,那就無法做到只看A組的成績,所以,最好再建一個(gè)列表來合并兩組的成績)
list1 = [91, 95, 97, 99]
list2 = [92, 93, 96, 98]
# 把 A 組成績賦值給一個(gè)新列表,用來存合并的成績——這個(gè)細(xì)節(jié)要注意!
list3 =list1
list3.extend(list2)
print(list3)
3.列表排序
主動(dòng)搜索,掌握新知
老師鼓勵(lì)你自己去探尋解決問題的方法,上網(wǎng)搜索一下列表的排序方法吧,是不是發(fā)現(xiàn)了一個(gè)以字母s開頭的方法?
list3= [91, 95, 97, 99, 92, 93, 96, 98]
list3.sort()
print(list3)
第9關(guān)
練習(xí)1-Hellokitty抽獎(jiǎng)器-參考
練習(xí)目標(biāo):
我們會(huì)通過今天的項(xiàng)目練習(xí),學(xué)習(xí)函數(shù)的封裝和調(diào)用。
練習(xí)要求:
我們已經(jīng)有一個(gè)hellokitty抽獎(jiǎng)器,現(xiàn)在,請(qǐng)你把這個(gè)程序封裝成一個(gè)新的函數(shù)。
運(yùn)行抽獎(jiǎng)器的代碼參考
import random
import time
# 用random函數(shù)在列表中隨機(jī)抽獎(jiǎng),列表中只有3位候選者。
luckylist = ['海綿寶寶','派大星','章魚哥']
# random模塊中有個(gè)隨機(jī)選取一個(gè)元素的方法:random.choice()。
a = random.choice(luckylist) # 從3個(gè)人中隨機(jī)選取1個(gè)人。
print('開獎(jiǎng)倒計(jì)時(shí)',3)
time.sleep(1) # 調(diào)用time模塊,控制打印內(nèi)容出現(xiàn)的時(shí)間
print('開獎(jiǎng)倒計(jì)時(shí)',2)
time.sleep(1)
print('開獎(jiǎng)倒計(jì)時(shí)',1)
time.sleep(1)
# 使用三引號(hào)打印hellokitty的頭像
image = '''
/\_)o<
| \\
| O . O|
\_____/
'''
print(image) # ……
print('恭喜' a '中獎(jiǎng)!') # 使用print函數(shù)打印幸運(yùn)者名單
import random
import time
運(yùn)行代碼,熟悉了解抽獎(jiǎng)器抽獎(jiǎng)的原理,請(qǐng)仔細(xì)查看注釋講解。
分析代碼結(jié)構(gòu),完成函數(shù)封裝
# 提示:將以下部分封裝進(jìn)函數(shù)
luckylist = ['海綿寶寶','派大星','章魚哥']
a = random.choice(luckylist)
print('開獎(jiǎng)倒計(jì)時(shí)',3)
time.sleep(1)
print('開獎(jiǎng)倒計(jì)時(shí)',2)
time.sleep(1)
print('開獎(jiǎng)倒計(jì)時(shí)',1)
time.sleep(1)
image = '''
/\_)o<
| \\
| O . O|
\_____/
'''
print(image)
print('恭喜' a '中獎(jiǎng)!')
# 查看注釋,運(yùn)行代碼。
import random
import time
抽獎(jiǎng)程序分為兩部分:
我們需要將第二部分用函數(shù)封裝起來,并調(diào)用函數(shù)。提示:3個(gè)參與者即函數(shù)有3個(gè)參數(shù)。
import random
import time
# 將抽獎(jiǎng)程序封裝成函數(shù)
def choujiang(q,w,e): # 定義一個(gè)抽獎(jiǎng)函數(shù),帶有3個(gè)參數(shù),也就是3位候選人
luckylist = [q,w,e] # 定義一個(gè)中獎(jiǎng)名單的列表
a = random.choice(luckylist) # 在中獎(jiǎng)名單里面隨機(jī)選擇
print('開獎(jiǎng)倒計(jì)時(shí)',3)
time.sleep(1)
print('開獎(jiǎng)倒計(jì)時(shí)',2)
time.sleep(1)
print('開獎(jiǎng)倒計(jì)時(shí)',1)
time.sleep(1)
image = '''
/\_)o<
| \\
| O . O|
\_____/
'''
print(image)
print('恭喜' a '中獎(jiǎng)!')
choujiang('虛竹','蕭峰','段譽(yù)') # 調(diào)用函數(shù)
第10關(guān)
練習(xí)1-剪刀石頭布-參考
練習(xí)要求:
和電腦玩一個(gè)剪刀石頭布的游戲:電腦隨機(jī)出拳,我們可選擇出什么。
練習(xí)目標(biāo):
我們會(huì)通過今天的作業(yè),做出和電腦進(jìn)行“石頭剪刀布”的游戲。
練習(xí)要求:
和電腦玩一個(gè)剪刀石頭布的游戲:電腦隨機(jī)出拳,我們可選擇出什么。
1.雙方出拳
首先,我們要讓雙方選擇出拳,才能判斷勝負(fù)。
我們可以設(shè)置變量computer_choice代表電腦的出拳選擇,設(shè)置變量user_choice代表你的出拳選擇。
電腦的出拳,我們可以使用random.choice()來隨機(jī)選擇;我們的出拳,可以手動(dòng)輸入我們出拳的類型。
另外,判斷下輸入:當(dāng)輸入的內(nèi)容不是石頭剪刀布時(shí),電腦會(huì)提醒'輸入有誤,請(qǐng)重新出拳',并重新出拳。
import random
# 出拳
punches = ['石頭','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
user_choice = input('請(qǐng)出拳:(石頭、剪刀、布)') # 請(qǐng)用戶輸入選擇
while user_choice not in punches: # 當(dāng)用戶輸入錯(cuò)誤,提示錯(cuò)誤,重新輸入
print('輸入有誤,請(qǐng)重新出拳')
user_choice = input()
2.雙方亮拳
你和電腦已經(jīng)對(duì)自己要出的拳進(jìn)行了選擇,接下來,我們需要知道雙方的出拳類型。
請(qǐng)使用print()函數(shù)補(bǔ)充亮拳的結(jié)果。
import random
# 出拳
punches = ['石頭','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
user_choice = input('請(qǐng)出拳:(石頭、剪刀、布)') # 請(qǐng)用戶輸入選擇
while user_choice not in punches: # 當(dāng)用戶輸入錯(cuò)誤,提示錯(cuò)誤,重新輸入
print('輸入有誤,請(qǐng)重新出拳')
user_choice = input()
# 亮拳
print('————戰(zhàn)斗過程————')
print('電腦出了:%s' %(computer_choice))
print('你出了:%s' %(user_choice))
3.判斷勝負(fù)
在前面兩步,電腦和你已經(jīng)選擇完出拳的類型并亮拳后,只差最后一步:根據(jù)結(jié)果判斷勝負(fù)。
勝負(fù)分為三種情況:
兩方出拳一致:平局;
你出石頭,電腦出剪刀;你出剪刀,電腦出布;你出布,電腦出石頭:你獲勝;
其他情況:你輸了。
根據(jù)上面的邏輯將代碼補(bǔ)充完整,判斷勝負(fù),試試能否運(yùn)行。
import random
# 出拳
punches = ['石頭','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
user_choice = input('請(qǐng)出拳:(石頭、剪刀、布)') # 請(qǐng)用戶輸入選擇
while user_choice not in punches: # 當(dāng)用戶輸入錯(cuò)誤,提示錯(cuò)誤,重新輸入
print('輸入有誤,請(qǐng)重新出拳')
user_choice = input()
# 亮拳
print('————戰(zhàn)斗過程————')
print('電腦出了:%s' %(computer_choice))
print('你出了:%s' %(user_choice))
# 勝負(fù)
print('—————結(jié)果—————')
參考答案
punches = ['石頭','剪刀','布']
computer_choice = random.choice(punches)
user_choice = ''
user_choice = input('請(qǐng)出拳:(石頭、剪刀、布)') # 請(qǐng)用戶輸入選擇
while user_choice not in punches: # 當(dāng)用戶輸入錯(cuò)誤,提示錯(cuò)誤,重新輸入
print('輸入有誤,請(qǐng)重新出拳')
user_choice = input()
# 亮拳
print('————戰(zhàn)斗過程————')
print('電腦出了:%s' %(computer_choice))
print('你出了:%s' %(user_choice))
# 勝負(fù)
print('—————結(jié)果—————')
if user_choice == computer_choice: # 使用if進(jìn)行條件判斷
print('平局!')
elif (user_choice == '石頭' and computer_choice == '剪刀') or (user_choice == '剪刀' and computer_choice == '布') or (user_choice == '布' and computer_choice == '石頭'):
print('你贏了!')
else:
print('你輸了!')
第11關(guān)
練習(xí)1-一起來捉蟲-參考
1.知識(shí)點(diǎn)debug
【參考】
scores = {'語文':89, '數(shù)學(xué)':95, '英語':80}
def get_average(scores):
sum_score = 0
for subject, score in scores.items():
sum_score = score
print('現(xiàn)在的總分是%d'%sum_score)
ave_score = sum_score/len(scores)
print('平均分是%d'%ave_score)
get_average(scores)
2.思維不清debug
【參考】
not_bad_word = True
while not_bad_word:
x = input('請(qǐng)給旺財(cái)取個(gè)外號(hào):')
if x == '小狗' or x =='汪汪': # 只要外號(hào)是兩個(gè)中的一個(gè),就會(huì)生氣。
not_bad_word = False
print('我生氣了,不想理你了!')
print('對(duì)不起,以后我不會(huì)這么叫你了')
3.被動(dòng)掉坑debug
【參考】
deposit = [100,300,900,2000,5000,0,2000,4500]
for i in range(1, len(deposit)):
if deposit[i-1] == 0: # 判斷被除數(shù)等于0時(shí),特殊處理。
print('你上次存款為 0 哦!')
else:
times = deposit[i]/deposit[i-1]
print('你的存款漲了%f倍'%times)
第12關(guān)
練習(xí)1-員工管理系統(tǒng)-參考
1.新增業(yè)績的類方法
【參考】
# 創(chuàng)建一個(gè)人事系統(tǒng)類
class hrSystem:
# 創(chuàng)建存儲(chǔ)員工名字的變量 name
name = ''
# 創(chuàng)建存儲(chǔ)員工工資的變量 salary
salary = 0
# 創(chuàng)建存儲(chǔ)員工績效的變量 kpi
kpi = 0
# 定義錄入員工信息的類方法
@classmethod
def record(cls, name, salary, kpi):
cls.name = name
cls.salary = salary
cls.kpi = kpi
# 定義打印員工信息的類方法
@classmethod
def print_record(cls):
print(cls.name '的工作信息如下:')
print('本月工資:' str(cls.salary))
print('本年績效:' str(cls.kpi))
# 定義根據(jù) kpi 評(píng)獎(jiǎng)的類方法
@classmethod
def kpi_reward(cls):
if cls.kpi > 95:
print('恭喜' cls.name '拿到明星員工獎(jiǎng)杯!')
elif cls.kpi <= 95 and cls.kpi >= 80:
print('恭喜' cls.name '拿到優(yōu)秀員工獎(jiǎng)杯!')
else:
print('很遺憾' cls.name '這次沒有評(píng)上獎(jiǎng)杯,希望來年努力工作,勇創(chuàng)佳績!')
# 驗(yàn)證結(jié)果的代碼
hrSystem.record('bob', 13000, 98)
hrSystem.kpi_reward()
hrSystem.record('candy', 8000, 89)
hrSystem.kpi_reward()
hrSystem.record('jony', 8000, 75)
hrSystem.kpi_reward()
2.新增檢測(cè)名字的類方法
【參考】
# 創(chuàng)建一個(gè)人事系統(tǒng)類
class hrSystem:
# 創(chuàng)建存儲(chǔ)員工名字的變量 name
name = ''
# 創(chuàng)建存儲(chǔ)員工工資的變量 salary
salary = 0
# 創(chuàng)建存儲(chǔ)員工績效的變量 kpi
kpi = 0
# 定義錄入員工信息的類方法
@classmethod
def record(cls, name, salary, kpi):
cls.name = name
cls.salary = salary
cls.kpi = kpi
# 定義打印員工信息的類方法
@classmethod
def print_record(cls):
print(cls.name '的工作信息如下:')
print('本月工資:' str(cls.salary))
print('本年績效:' str(cls.kpi))
# 定義根據(jù) kpi 評(píng)獎(jiǎng)的類方法
@classmethod
def kpi_reward(cls):
if cls.kpi > 95:
print('恭喜' cls.name '拿到明星員工獎(jiǎng)杯!')
elif cls.kpi <= 95 and cls.kpi >= 80:
print('恭喜' cls.name '拿到優(yōu)秀員工獎(jiǎng)杯!')
else:
print('很遺憾' cls.name '這次沒有評(píng)上獎(jiǎng)杯,希望來年努力工作,勇創(chuàng)佳績!')
# 檢查錄入名稱是否正確的類方法
@classmethod
def check_name(cls):
if cls.name not in ['bob', 'candy', 'jony', 'kelly']:
print('錄入錯(cuò)誤!' cls.name '不是本公司員工!')
else:
print('錄入正確~')
# 驗(yàn)證結(jié)果的代碼
hrSystem.record('bob', 13000, 98)
hrSystem.check_name()
hrSystem.record('spy', 3000, 60)
hrSystem.check_name()
3.優(yōu)化代碼
【參考】
# 創(chuàng)建一個(gè)人事系統(tǒng)類
class hrSystem:
# 創(chuàng)建存儲(chǔ)員工名字的變量 name
name = ''
# 創(chuàng)建存儲(chǔ)員工工資的變量 salary
salary = 0
# 創(chuàng)建存儲(chǔ)員工績效的變量 kpi
kpi = 0
# 定義錄入員工信息的類方法
@classmethod
def record(cls, name, salary, kpi):
cls.name = name
cls.salary = salary
cls.kpi = kpi
# 定義打印員工信息的類方法
@classmethod
def print_record(cls):
if cls.check_name(): # 以 cls.check_name() 的返回值(0或1)作為判斷條件。
print(cls.name '的工作信息如下:')
print('本月工資:' str(cls.salary))
print('本年績效:' str(cls.kpi))
# 定義根據(jù) kpi 評(píng)獎(jiǎng)的類方法
@classmethod
def kpi_reward(cls):
if cls.kpi > 95:
print('恭喜' cls.name '拿到明星員工獎(jiǎng)杯!')
elif cls.kpi <= 95 and cls.kpi >= 80:
print('恭喜' cls.name '拿到優(yōu)秀員工獎(jiǎng)杯!')
else:
print('很遺憾' cls.name '這次沒有評(píng)上獎(jiǎng)杯,希望來年努力工作,勇創(chuàng)佳績!')
# 檢查錄入名稱是否正確的類方法
@classmethod
def check_name(cls):
if cls.name not in ['bob', 'candy', 'jony', 'kelly']:
print('錄入錯(cuò)誤!' cls.name '不是本公司員工!')
return 0 # 設(shè)置返回值為0
else:
print('錄入正確~')
return 1 # 設(shè)置返回值為1
# 驗(yàn)證結(jié)果的代碼
hrSystem.record('spy', 3000, 60)
hrSystem.print_record()
第13關(guān)
練習(xí)1-問卷搜集器-參考
1.問卷答案的儲(chǔ)存
【參考】
# 不用運(yùn)行,讀懂即可。
class Survey():
# 收集調(diào)查問卷的答案
def __init__(self, question):
self.question = question
# 定義收集問卷問題答案的列表
self.response = []
# 顯示調(diào)查問卷的題目
def show_question(self):
print(self.question)
# 存儲(chǔ)問卷搜集的答案
def store_response(self, new_response):
self.response.append(new_response)
# 將答案添加到列表self.response(見第7行
2.搜集問題-最喜歡的美食
【參考】
class Survey():
# 收集調(diào)查問卷的答案
def __init__(self, question):
self.question = question
self.response = []
# 顯示調(diào)查問卷的題目
def show_question(self):
print(self.question)
# 存儲(chǔ)問卷搜集的答案
def store_response(self, new_response):
self.response.append(new_response)
# 請(qǐng)實(shí)例化Survey()類,并且顯示出這次的調(diào)查問卷問題。
food_survey = Survey('你最喜歡的美食是什么?') # 類的實(shí)例化,同時(shí)為參數(shù)question賦值。
food_survey.show_question() # 調(diào)用類方法打印問題
# 存儲(chǔ)問卷調(diào)查的答案
while True:
response = input('請(qǐng)回答問卷問題,按 q 鍵退出:')
if response == 'q':
break
food_survey.store_response(response) # 再次調(diào)用類方法,進(jìn)行問答的收集。
# 輸出測(cè)試
for food in food_survey.response:
print('美食:' food)
3.實(shí)名問卷:搜集名字和籍貫地
【參考】
class Survey():
# 收集調(diào)查問卷的答案
def __init__(self, question):
self.question = question
self.response = []
# 顯示調(diào)查問卷的題目
def show_question(self):
print(self.question)
# 存儲(chǔ)問卷搜集的答案
def store_response(self, new_response):
self.response.append(new_response)
# 請(qǐng)定義實(shí)名調(diào)查問卷的新類 RealNameSurvey,繼承自 Survey 類
class RealNameSurvey(Survey):
def __init__(self, question):
Survey.__init__(self, question)
self.response = {} # 由于籍貫地和名字掛鉤,所以用構(gòu)成為“鍵值對(duì)”的字典來存放。
# 存儲(chǔ)問卷搜集的答案(覆蓋父類的類方法)
def store_response(self, name, new_response): # 除了 self,還需要兩個(gè)參數(shù)。
self.response[name] = new_response # 鍵值對(duì)的新增
survey = RealNameSurvey('你的籍貫地是哪?')
survey.show_question()
while True:
response = input('請(qǐng)回答問卷問題,按 q 鍵退出:')
if response == 'q':
break
name = input('請(qǐng)輸入回答者姓名:')
survey.store_response(name, response) # 調(diào)用類方法,將兩次通過 input 的字符串存入字典。
# 輸出測(cè)試
for name, value in survey.response.items():
print(name ':' value)
第14關(guān)
練習(xí)1-升級(jí)版游戲-參考
1.代碼實(shí)驗(yàn)
【參考】
import random
player_list = ['【圣光騎士】','【暗影刺客】','【精靈弩手】']
players = []
for i in range(3):
player = random.choice(player_list)
players.append(player)
print(players)
# 判斷方式1:比較運(yùn)算符
# 角色類型都一樣
if players[0] == players[1] == players[2]:
print('我們都一樣!——方式1') # 在打印結(jié)果中加上“方式N”,驗(yàn)證不同的判斷方式的有效性。
# 角色類型都不一樣
if players[0] != players[1] and players[0] != players[2] and players[1] != players[2]:
print('我們都不一樣!——方式1')
# 判斷方式2:set()
# 集合(set)是一個(gè)無序的不重復(fù)元素序列,set()可以去重,然后生成一個(gè)集合。
players_set = set(players)
# 角色類型都一樣&角色類型都不一樣
if len(players_set) == 1:
print('我們都一樣!——方式2')
elif len(players_set) == 3:
print('我們都不一樣!——方式2')
# 其他判斷方式
'''
除了上面兩種方式外,還有很多方式可以考慮:
例如:類似判斷方式2,可以新建一個(gè)列表,用 append 添加不重復(fù)的角色類型,然后看這個(gè)列表的長度是多少(類似判斷方式2)。
再如:“角色類型完全不一樣”,可先將players和player_list按相同的排序方式排一下,再判斷兩個(gè)排序后的列表是否相同。
總而言之:只要你愿意思考、嘗試和搜索,就可以得出各種不同的判斷方式。
'''
# 再舉一個(gè)例子:
if sorted(players) == sorted(player_list):
print('我們都不一樣!——方式3')
else:
pass
2.加新功能
【參考】
# 查看新增的代碼和注釋
import random
import time
# 創(chuàng)建一個(gè)類,可實(shí)例化成具體的游戲角色
class Role:
def __init__(self, name):
self.name = name
self.life = random.randint(100,150)
self.attack = random.randint(30,50)
# 創(chuàng)建3個(gè)子類,可實(shí)例化為3個(gè)不同的角色類型
class Knight(Role):
def __init__(self, name = '【圣光騎士】'):
Role.__init__(self,name)
self.life = int(self.life*1.5)
self.attack = int(self.attack*0.8)
def fight_buff(self, opponent,str1,str2):
if opponent.name == '【暗影刺客】':
self.attack = int(self.attack * 1.5)
print('『%s』【圣光騎士】對(duì) 『%s』【暗影刺客】說:“讓無盡光芒制裁你的墮落!”'%(str1, str2))
class Assassin(Role):
def __init__(self, name = '【暗影刺客】'):
Role.__init__(self,name)
self.life = int(self.life*0.8)
self.attack = int(self.attack*1.5)
# 角色類型克制關(guān)系
def fight_buff(self, opponent,str1,str2):
if opponent.name == '【精靈弩手】':
self.attack = int(self.attack * 1.5)
print('『%s』【暗影刺客】對(duì) 『%s』【精靈弩手】說:“主動(dòng)找死,就別怪我心狠手辣?!?%(str1, str2))
class Bowman(Role):
def __init__(self, name = '【精靈弩手】'):
Role.__init__(self,name)
self.life = int(self.life*1.2)
self.attack = int(self.attack*1.2)
def fight_buff(self, opponent,str1,str2):
if opponent.name == '【圣光騎士】':
self.attack = int(self.attack * 1.5)
print('『%s』【精靈弩手】對(duì) 『%s』【圣光騎士】說:“騎著倔驢又如何?你都碰不到我衣服?!?%(str1, str2))
# 創(chuàng)建一個(gè)類,可生成3V3并展示:可分為:歡迎語→隨機(jī)生成→展示角色
class Game:
def __init__(self):
self.players = []
self.enemies = []
self.score = 0
self.i = 0
# 依次執(zhí)行以下函數(shù)
self.game_start() # 歡迎語
self.born_role() # 隨機(jī)生成6個(gè)角色
self.cooperat_role() # 角色類型引起的屬性加成
self.show_role() # 展示角色
self.order_role() # 排序并展示
self.pk_role() # 讓雙方 Pk 并展示結(jié)果
self.show_result() # 展示最終結(jié)局
# 歡迎語
def game_start(self):
print('------------ 歡迎來到“煉獄角斗場(chǎng)” ------------')
print('在昔日的黃昏山脈,奧盧帝國的北境邊界上,有傳說中的“煉獄角斗場(chǎng)”。')
print('鮮血與戰(zhàn)斗是角斗士的歸宿,金錢與榮耀是角斗士的信仰!')
print('今日,只要你【你的隊(duì)伍】能取得勝利,你將獲得一筆夠花500年的財(cái)富。')
time.sleep(2)
print('將隨機(jī)生成【你的隊(duì)伍】和【敵人隊(duì)伍】!')
input('\n狹路相逢勇者勝,請(qǐng)按任意鍵繼續(xù)。\n')
# 隨機(jī)生成6個(gè)角色
def born_role(self):
for i in range(3):
self.players.append(random.choice([Knight(),Assassin(),Bowman()]))
self.enemies.append(random.choice([Knight(),Assassin(),Bowman()]))
# 判斷是否滿足角色類型配合的條件
def cooperat_role(self):
players_list = [self.players[0].name,self.players[1].name,self.players[2].name]
enemies_list = [self.enemies[0].name,self.enemies[1].name,self.enemies[2].name]
players_set = set(players_list)
enemies_set = set(enemies_list)
# print(players_list) # 這幾行是驗(yàn)證代碼,正式代碼里會(huì)刪掉。感興趣的話,可取消注釋后一起運(yùn)行。
# print(players_set)
# print(enemies_list)
# print(enemies_set)
if len(players_set) == 1:
print('我方觸發(fā)了“角色類型一致”的條件,每個(gè)角色的血量增加25%。')
for i in range(3):
self.players[i].life = int(self.players[i].life * 1.25)
if len(players_set) == 3:
print('我方觸發(fā)了“角色類型兼?zhèn)洹钡臈l件,每個(gè)角色的攻擊增加25%。')
for i in range(3):
self.players[i].attack = int(self.players[i].attack * 1.25)
if len(enemies_set) == 1:
print('敵方觸發(fā)了“角色類型一致”的條件,每個(gè)角色的血量增加25%。')
for i in range(3):
self.enemies[i].life = int(self.enemies[i].life * 1.25)
if len(enemies_set) == 3:
print('敵方觸發(fā)了“角色類型兼?zhèn)洹钡臈l件,每個(gè)角色的攻擊增加25%。')
for i in range(3):
self.enemies[i].attack = int(self.enemies[i].attack * 1.25)
input('請(qǐng)按任意鍵,查看【你的隊(duì)伍】和【敵人隊(duì)伍】的角色信息:') # 緩一緩,再展示。
# 展示角色
def show_role(self):
print('----------------- 角色信息 -----------------')
print('你的隊(duì)伍:')
for i in range(3):
print( '『我方』%s 血量:%s 攻擊:%s'%
(self.players[i].name,self.players[i].life,self.players[i].attack))
print('--------------------------------------------')
print('敵人隊(duì)伍:')
for i in range(3):
print('『敵方』%s 血量:%s 攻擊:%s'%
(self.enemies[i].name,self.enemies[i].life,self.enemies[i].attack))
print('--------------------------------------------')
input('請(qǐng)按回車鍵繼續(xù)。\n')
# 排序并展示
def order_role(self):
order_dict = {}
i=0
while i < 3:
order = int(input('你想將 %s 排在第幾個(gè)上場(chǎng)?(輸入數(shù)字1-3)'%(self.players[i].name)))
if order in [1,2,3]:
if order in order_dict:
print('你輸入了重復(fù)的數(shù)字,請(qǐng)重新輸入:')
else:
order_dict[order] = self.players[i]
i = 1
else:
print('輸入有誤,請(qǐng)輸入1或2或3:')
self.players = []
for i in range(1,4):
self.players.append(order_dict[i])
print('\n你的隊(duì)伍出場(chǎng)順序是:%s、%s、%s'
%(self.players[0].name,self.players[1].name,self.players[2].name))
print('敵人隊(duì)伍出場(chǎng)順序是:%s、%s、%s'
%(self.enemies[0].name,self.enemies[1].name,self.enemies[2].name))
# 讓雙方 Pk 并展示結(jié)果
def pk_role(self):
for i in range(3):
print('\n----------------- 【第%s輪】 -----------------' % (i 1))
# 每一局開戰(zhàn)前加buff
self.players[i].fight_buff(self.enemies[i],'我方','敵方')
self.enemies[i].fight_buff(self.players[i],'敵方','我方')
input('\n戰(zhàn)斗雙方準(zhǔn)備完畢,請(qǐng)按回車鍵繼續(xù)。')
print('--------------------------------------------')
while self.players[i].life >0 and self.enemies[i].life>0:
self.enemies[i].life -= self.players[i].attack
self.players[i].life -= self.enemies[i].attack
print('我方%s 發(fā)起了攻擊,敵方%s 剩余血量 %s'%
(self.players[i].name,self.enemies[i].name,self.enemies[i].life))
print('敵方%s 發(fā)起了攻擊,我方%s 剩余血量 %s'%
(self.enemies[i].name,self.players[i].name,self.players[i].life))
print('--------------------------------------------')
time.sleep(1)
if self.players[i].life <= 0 and self.enemies[i].life> 0:
print('\n很遺憾,我方%s 掛掉了!'% (self.players[i].name))
self.score -= 1
elif self.players[i].life >0 and self.enemies[i].life<= 0:
print('\n恭喜,我方%s 活下來了。'% (self.players[i].name))
self.score = 1
else:
print('\n我的天,他們倆都死了啊!')
# 展示最終結(jié)局
def show_result(self):
input('\n請(qǐng)按回車查看最終結(jié)果。\n')
if self.score >0:
print('【最終結(jié)果】\n你贏了,最終的財(cái)寶都?xì)w你了!')
elif self.score == 0:
print('【最終結(jié)果】\n你沒有勝利,但也沒有失敗,在夜色中灰溜溜離開了奧盧帝國。')
else:
print('【最終結(jié)果】\n你輸了。煉獄角斗場(chǎng)又多了幾具枯骨。')
game = Game()
第15關(guān)
練習(xí)1-數(shù)據(jù)轉(zhuǎn)移中的變化-參考
1.編碼和解碼
【參考】
# 1.分別使用gbk和utf-8編碼自己的名字,并將其打印出來。
print('吳楓'.encode('gbk'))
print('吳楓'.encode('utf-8'))
# 2.復(fù)制上一步得到的結(jié)果,進(jìn)行解碼,打印出你的名字(兩次)。
print(b'\xe5\x90\xb4\xe6\x9e\xab'.decode('utf-8'))
# 3.使用gbk解碼b'\xb7\xe7\xb1\xe4\xbf\xc6\xbc\xbc\xd3\xd0\xd2\xe2\xcb\xbc',并打印出來。
print(b'\xb7\xe7\xb1\xe4\xbf\xc6\xbc\xbc\xd3\xd0\xd2\xe2\xcb\xbc'.decode('gbk'))
2.通過文件讀寫,復(fù)制圖片
【參考】
# 先打開圖片
with open('photo1.png','rb') as file: # 以“rb”模式打開圖片
data = file.read()
with open('photo3.png','wb') as newfile: # 以“wb”模式寫入
newfile.write(data)
2.在讀寫之間處理數(shù)據(jù)-2
【參考】
file1 = open('scores.txt','r',encoding='utf-8')
file_lines = file1.readlines()
file1.close()
final_scores = []
for i in file_lines:
data =i.split()
sum = 0 # 先把總成績?cè)O(shè)為0
for score in data[1:]: # 遍歷列表中第1個(gè)數(shù)據(jù)和之后的數(shù)據(jù)
sum = sum int(score) # 然后依次加起來,但分?jǐn)?shù)是字符串,所以要轉(zhuǎn)換
result = data[0] str(sum) '\n' # 結(jié)果就是學(xué)生姓名和總分
print(result)
final_scores.append(result)
print(final_scores)
sum1 = open('winner.txt','w',encoding='utf-8')
sum1.writelines(final_scores)
sum1.close()
2.在讀寫之間處理數(shù)據(jù)-2
【參考】
ile1 = open('winner.txt','r',encoding='utf-8')
file_lines = file1.readlines()
file1.close()
dict_scores = {}
list_scores = []
final_scores = []
# print(file_lines)
# print(len('\n'))
# 打印結(jié)果為:['羅恩102\n', '哈利383\n', '赫敏570\n', '馬爾福275\n']
# 經(jīng)過測(cè)試,發(fā)現(xiàn)'\n'的長度是1。所以,名字是“第0位-倒數(shù)第5位”,分?jǐn)?shù)是“倒數(shù)第4位-倒數(shù)第二位”。
# 再根據(jù)“左取右不取”,可知:name-[:-4],score-[-4:-1]
for i in file_lines: # i是字符串。
print(i)
name = i[:-4] # 取出名字(注:字符串和列表一樣,是通過偏移量來獲取內(nèi)部數(shù)據(jù)。)
score = int(i[-4:-1]) # 取出成績
print(name)
print(score)
dict_scores[score] = name # 將名字和成績對(duì)應(yīng)存為字典的鍵值對(duì)(注意:這里的成績是鍵)
list_scores.append(score)
# print(list_scores)
list_scores.sort(reverse=True) # reverse,逆行,所以這時(shí)列表降序排列,分?jǐn)?shù)從高到低。
# print(list_scores)
for i in list_scores:
result = dict_scores[i] str(i) '\n'
# print(result)
final_scores.append(result)
print(final_scores) # 最終結(jié)果
winner_new = open('winner_new.txt','w',encoding='utf-8')
winner_new.writelines(final_scores)
winner_new.close()
第16關(guān)
練習(xí)1-時(shí)間記錄器-參考
【參考】
import time
input('歡迎使用“時(shí)間管理器”!請(qǐng)按回車?yán)^續(xù)。')
while True:
task_name = input('請(qǐng)輸入任務(wù)名:')
task_time = int(input('你覺得自己至少可以專注這個(gè)任務(wù)多少分鐘?輸入 N 分鐘'))
input('此次任務(wù)信息:\n我要完成的任務(wù):%s\n我至少要專注:%d分鐘\n按回車開始計(jì)時(shí):'%(task_name,task_time))
start = time.time() # 開始計(jì)時(shí)
start_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) # 格式化日期
# for t in range(task_time*60,0,-1): # 實(shí)際代碼:分鐘轉(zhuǎn)成秒要乘60,用-1來倒計(jì)時(shí)。
for t in range(task_time,0,-1):
info = '請(qǐng)專注任務(wù),還要保持專注 ' str(t) ' 秒哦!'
print(info,end='')
print('\b'*(len(info)*2),end='',flush=True)
time.sleep(1)
print('你已經(jīng)專注了 %d 分鐘,很棒~再加把勁,完成任務(wù)!'%task_time) # 倒計(jì)時(shí)后,才繼續(xù)運(yùn)行之后的代碼。
# 詢問任務(wù)是否完成
task_status = input('請(qǐng)?jiān)谌蝿?wù)完成后按輸入y:')
if task_status == 'y':
end = time.time() # 一定用戶按了 y,就記下結(jié)束時(shí)間。
end_time = time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(time.time())) # 日期格式化
actual_time = int((end -start)/60) # 始末時(shí)間相減,從秒換算到分,除以60。
start_end = start_time '——' end_time '\n'
with open('timelog3.txt','a', encoding = 'utf-8') as f:
f.write(task_name ' 的預(yù)計(jì)時(shí)長為:' str(task_time) '分鐘\n')
f.write(task_name ' 的實(shí)際時(shí)長為:' str(actual_time) '分鐘,具體時(shí)間為:' start_end)
again = input('建立一個(gè)新任務(wù)請(qǐng)按 y, 退出時(shí)間日志記錄器請(qǐng)按 q:')
if again == 'q':
break
else:
print('抱歉,你的輸入有誤。請(qǐng)重啟時(shí)間記錄器。')
print('愿被你善待的時(shí)光,予你美好的回贈(zèng)。')
第17關(guān)
練習(xí)1-自制動(dòng)態(tài)二維碼-參考
【參考】
# 先導(dǎo)入模塊
from MyQR import myqr
myqr.run(
words='http://weixin.qq.com/r/kzlje9TEE4lsrZAY92yB',
# 掃描二維碼后,顯示的內(nèi)容,或是跳轉(zhuǎn)的鏈接
version=5, # 設(shè)置容錯(cuò)率
level='H', # 控制糾錯(cuò)水平,范圍是L、M、Q、H,從左到右依次升高
picture='she-3.gif', # 圖片所在目錄,可以是動(dòng)圖
colorized=True, # 黑白(False)還是彩色(True)
contrast=1.0, # 用以調(diào)節(jié)圖片的對(duì)比度,1.0 表示原始圖片。默認(rèn)為1.0。
brightness=1.0, # 用來調(diào)節(jié)圖片的亮度,用法同上。
save_name='Python.gif', # 控制輸出文件名,格式可以是 .jpg, .png ,.bmp ,.gif
)
第17關(guān)
練習(xí)1-拯救選擇困難癥-參考
【參考】
# 幫你做選擇之我要吃什么
import random
# 將需要用到的表格和變量放在開頭
list_food = ['KFC', '蒸菜館', '樓下快餐店', '桂林米粉', '東北餃子', '金牌豬腳飯', '三及第湯飯'] # 備選菜單,可自定義。
list_choice = []
# 由于兩個(gè)原因都包含判斷過程,所以,為了讓代碼更簡潔,可將其封裝成函數(shù)。
def choose(list):
while True:
food = random.choice(list)
judgement = input('去吃【%s】好不好???同意的話輸入y,不想吃直接回車即可。'%(food))
if judgement == 'y':
print('去吃【%s】!就這么愉快地決定啦!'%(food))
break
# 判斷環(huán)節(jié)
reason = int(input('你不知道吃什么的原因是:1.完全不知道吃什么;2.在幾家店之間徘徊(請(qǐng)輸入1或2):'))
if reason == 1:
choose(list_food)
elif reason == 2:
add = True
while add:
choice = input('請(qǐng)輸入讓你猶豫的店名(注:一家一家輸,完成后輸入y):')
if choice != 'y': # 這個(gè)判斷語句,是為了不將 y 也添加到菜單里。
list_choice.append(choice)
if choice == 'y':
add = False
choose(list_choice)
else:
print('抱歉,目前還不支持第三種情況——不過,你可以加代碼哦。')