小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

【Python基礎(chǔ)語(yǔ)法】參考 卡西

 deerwjj 2019-02-20

第0關(guān)

練習(xí)1-打印皮卡丘-參考

請(qǐng)你使用**print()函數(shù)**和**'''**將下面的皮卡丘打印出來(lái)。皮卡丘字符畫可以直接復(fù)制步驟1里的。

```

へ    ?。瘄

  /\7    ∠_/

  / │   /?。?/p>

 │ Z _,< /   /`ヽ

 │     ヽ   /  〉

  Y     `  /  /

 ?● ? ●  ??〈  /

 ()  へ    |?。堋?/p>

  >? ?_  ?!?│ //

  / へ   / ?<| \\

  ヽ_?  (_/  │//

  7       |/

 ?。鲸Dr ̄ ̄`?―_

```

題目講解

1.復(fù)制題目要求打印的“皮卡丘”(直接復(fù)制下一步中的字符畫即可)

2. 用print(''' ''')打印

**注意:標(biāo)點(diǎn)符號(hào)都要用英文**


【參考】

print('''
    へ    ?。瘄
  /\7    ∠_/
  / │   /?。?/div>
 │ Z _,< /   /`ヽ
 │     ヽ   /  〉
  Y     `  /  /
 ?● ? ●  ??〈  /
 ()  へ    |?。堋?/div>
  >? ?_  ?!?│ //
  / へ   / ?<| \\
  ヽ_?  (_/  │//
  7       |/
 ?。鲸Dr ̄ ̄`?―_
''')


練習(xí)2-聽見無(wú)臉男的聲音-參考

題目要求:

在千尋進(jìn)入魔法世界的期間,有一位“無(wú)臉男”一直跟在她的身邊。一開始,千尋對(duì)無(wú)臉男的跟蹤感到害怕,直到她第一次聽見了無(wú)臉男對(duì)她說(shuō)的話后,才理解了他,并和他成為了朋友。


【講解】

下面是無(wú)臉男對(duì)千尋說(shuō)的話,請(qǐng)你把這段話打印出來(lái),并且使用**轉(zhuǎn)義字符**,把無(wú)臉男說(shuō)的話按照正確格式打印:

千尋你好,人們叫我'無(wú)臉男'

這個(gè)世界的人都選擇無(wú)視我

只有你看到了我并和我打招呼

我感到很孤單,很孤單

你愿意和我成為朋友嗎?


題目講解

1.復(fù)制下面這段無(wú)臉男對(duì)千尋說(shuō)的話:

千尋你好,人們叫我'無(wú)臉男' 這個(gè)世界的人都選擇無(wú)視我 只有你看到了我并和我打招呼 我感到很孤單,很孤單 你愿意和我成為朋友嗎?

2.提示:文本中有引號(hào)的地方需要用到轉(zhuǎn)義字符 \' ;需要換行的地方用 \n


【參考】

print('千尋你好,人們叫我'無(wú)臉男'\n這個(gè)世界的人都選擇無(wú)視我\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ù)非字符串類型,則無(wú)法進(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ù)非字符串類型,則無(wú)法進(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都沒(méi)有

可使用變量:

slogan = '臉黑怪我咯',number = '7.8',unit = '張',sentence = '藍(lán)票一個(gè)SSR都沒(méi)有'


題目講解

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都沒(méi)有'
word = slogan str(int(float(number))) sentence
print(word)



第2關(guān)

練習(xí)1-偷回寶石-參考

題目要求

在滅霸打了一個(gè)響指,宇宙一半生物都灰飛煙滅后,剩下的復(fù)仇者聯(lián)盟成員們?cè)诰薮蟮膭?chuàng)傷之中,依舊沒(méi)有放棄反擊滅霸的機(jī)會(huì),他們決定利用最后一次行動(dòng)機(jī)會(huì),去把滅霸手里的寶石偷回來(lái)。最終,他們因?yàn)閷?shí)力相差太大,1顆寶石都沒(méi)有偷回來(lái)。


【講解】

請(qǐng)你寫出一段代碼:

如果偷回的寶石數(shù)是4顆及以上,輸出結(jié)果“獲得了打敗滅霸的力量,反殺穩(wěn)了”

如果偷回的寶石數(shù)是1-3顆,輸出結(jié)果“可以全員出動(dòng),殊死一搏”

如果偷回的寶石數(shù)是0顆,輸出結(jié)果“沒(méi)辦法了,只能嘗試呼叫驚奇隊(duì)長(zhǎng)”

注意:標(biāo)點(diǎn)符號(hào)都為英文格式


題目講解

1.為變量【賦值】,寫出“一個(gè)寶石都沒(méi)偷回來(lái)”的情況

2.用【if】寫第一個(gè)條件:如果偷回的寶石數(shù)是4顆及以上,輸出結(jié)果:獲得了打敗滅霸的力量,反殺穩(wěn)了

3.用【elif】寫第二個(gè)條件:如果偷回的寶石數(shù)是1-3顆,輸出結(jié)果:可以全員出動(dòng),殊死一搏

4.用【else】寫第三個(gè)條件:如果偷回的寶石數(shù)是0顆,輸出結(jié)果:沒(méi)辦法了,只能嘗試呼叫驚奇隊(duì)長(zhǎng)


【參考】

#以下為答案示例(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ù)量停留在45個(gè)
    print('可以全員出動(dòng),殊死一搏')
     #結(jié)果:顯示‘可以全員出動(dòng),殊死一搏’的結(jié)果   
else:
    #條件:當(dāng)賦值不滿足if和elif條件時(shí),執(zhí)行else下的命令,寶石數(shù)量在3個(gè)以下
    print('沒(méi)辦法了,只能嘗試呼叫驚奇隊(duì)長(zhǎng)')
    #結(jié)果:顯示‘沒(méi)辦法了,只能嘗試呼叫驚奇隊(duì)長(zhǎng)’的結(jié)果


練習(xí)2-美國(guó)隊(duì)長(zhǎng)的工資-參考

題目要求

復(fù)仇者聯(lián)盟的成員也是有工資的,然而,由于美國(guó)隊(duì)長(zhǎng)一直被冰封在北極,錯(cuò)過(guò)了多次調(diào)薪機(jī)會(huì),所以美國(guó)隊(duì)長(zhǎng)的工資一直是每月80美元。光榮挺進(jìn)史塔克窮人榜前三名,并獲封“美元隊(duì)長(zhǎng)”稱號(hào)。


【講解】

請(qǐng)你寫出一段代碼,判斷美國(guó)隊(duì)長(zhǎng)的工資水平,代碼需要滿足如下條件:

如果月工資小于等于500美元,顯示“歡迎進(jìn)入史塔克窮人幫前三名”

如果月工資在100-500美元之間,顯示“請(qǐng)找弗瑞隊(duì)長(zhǎng)加薪”

如果月工資小于等于100美元,顯示“恭喜您榮獲“美元隊(duì)長(zhǎng)”稱號(hào)!”

如果月工資在500-1000美元之間(含1000美元),打印“祝賀您至少可以溫飽了?!?/p>

其他情況下,如果工資大于1000美元,打印“經(jīng)濟(jì)危機(jī)都難不倒您!”

如果工資在1000-20000美元(含20000美元)之間,打印“您快比鋼鐵俠有錢了!”

如果月工資大于20000美元,打印“您是不是來(lái)自于瓦坎達(dá)國(guó)?”

不管賦值改變后輸出結(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.通過(guò)錢數(shù)輸出對(duì)應(yīng)的結(jié)果


【參考】

#以下為答案示例(salary為多少都是對(duì)的)
salary = 200
#對(duì)美國(guó)隊(duì)長(zhǎng)的工資賦值
if salary <= 500:
    #條件:如果工資小于等于500
    print('歡迎進(jìn)入史塔克窮人幫前三名')
    #結(jié)果:顯示‘歡迎進(jìn)入史塔克窮人幫前三名’的結(jié)果 
    if salary <= 100:
        #條件:如果工資小于等于100
        print('恭喜您榮獲“美元隊(duì)長(zhǎng)”稱號(hào)!')
        #結(jié)果:顯示‘恭喜您榮獲“美元隊(duì)長(zhǎng)”稱號(hào)!’的結(jié)果 
    else:
        #條件:當(dāng)條件滿足第4if,不滿足第8if,執(zhí)行這個(gè)命令
        print('請(qǐng)找弗瑞隊(duì)長(zhǎng)加薪')
        #結(jié)果:顯示‘請(qǐng)找弗瑞隊(duì)長(zhǎng)加薪’的結(jié)果 
elif 500 < salary <= 1000:
    #條件:如果工資大于500,小于等于1000
    print('祝賀您至少可以溫飽了。')
     #結(jié)果:顯示‘祝賀您至少可以溫飽了?!慕Y(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條件,不滿足第24if條件,則執(zhí)行這個(gè)命令
        print('您是不是來(lái)自于瓦坎達(dá)國(guó)?')
        #結(jié)果:顯示‘您是不是來(lái)自于瓦坎達(dá)國(guó)?’的結(jié)果
print('程序結(jié)束')



第3關(guān)

練習(xí)1-哈利波特的寵物-參考

題目要求

哈利·波特在對(duì)角巷購(gòu)買寵物時(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ī)則如下:

如果羅恩一天吃超過(guò)10個(gè)巧克力蛙,羅恩要給哈利100塊;

如果羅恩一天吃小于等于10個(gè)的巧克力蛙,哈利就給羅恩100塊。


【講解】

請(qǐng)你寫出一段代碼:

當(dāng)隨機(jī)輸入羅恩一天吃的巧克力蛙數(shù)量時(shí),可以判斷出這天,是羅恩給哈利錢,還是哈利給羅恩錢,并打印出來(lái)。


題目講解

1.搜集羅恩吃的巧克力數(shù)量(知識(shí)點(diǎn):input()、數(shù)據(jù)轉(zhuǎn)換)

2.寫第一個(gè)條件:如果羅恩一天吃超過(guò)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-古靈閣金幣兌換-參考

題目要求

接受了霍格沃茨來(lái)信的你,帶著欣喜與好奇,跟著魔咒學(xué)老師吳楓教授,來(lái)到了巫師世界的對(duì)角巷。在這個(gè)相當(dāng)于人類集市的對(duì)角巷,你立刻被魔法世界稀奇古怪的東西吸引,想掏手機(jī)刷花唄買買買。但是吳楓教授說(shuō),麻瓜(沒(méi)有魔法的人)貨幣在魔法世界不流通,但是你可以去巫師世界的銀行——古靈閣兌換貨幣。你立刻跟著吳楓老師跑到了古靈閣。當(dāng)你進(jìn)到巫師世界的銀行時(shí),就有銀行的小精靈職員問(wèn)好:


**注意:以下背景與題目要求相關(guān)**

小精靈:您好,歡迎古靈閣,請(qǐng)問(wèn)您需要幫助嗎?需要or不需要?

你:需要

小精靈:請(qǐng)問(wèn)您需要什么幫助呢?1 存取款;2 貨幣兌換;3 咨詢

你:2

小精靈:金加隆和人民幣的兌換率為1:51.3,即一金加隆=51.3人民幣

小精靈:請(qǐng)問(wèn)您需要兌換多少金加隆呢?

(你說(shuō)了一個(gè)數(shù)字)

小精靈:好的,我知道了,您需要兌換(你剛說(shuō)的數(shù)字)金加隆。

小精靈:那么,您需要付給我(將你剛說(shuō)的數(shù)字轉(zhuǎn)換為金加隆的數(shù)字)人民幣。


注1:如果選擇不需要幫助,小精靈會(huì)禮貌地說(shuō)'好的,再見。'

注2: 如果選擇幫助【1 存取款】,小精靈會(huì)推薦你去存取款窗口;如果選擇幫助【3 咨詢】,小精靈會(huì)推薦你去咨詢窗口。


題目講解

和小精靈的對(duì)話可以被這么拆分:

1.最基礎(chǔ)的條件判斷:需要幫助;不需要幫助(if...else...)

2.在需要幫助的情況下,又分為1存取款;2貨幣兌換;3咨詢;三種情況。(if...elif...else...)

3.在2-貨幣兌換的情況下,需要再提一個(gè)問(wèn)題,收集答案,打印出小精靈回答的結(jié)果(input()、數(shù)據(jù)拼接、數(shù)據(jù)轉(zhuǎn)換)。


【參考】

chioce = input('您好,歡迎古靈閣,請(qǐng)問(wèn)需要幫助嗎?需要or不需要?')
if chioce == '需要':
    number = input('請(qǐng)問(wèn)您需要什么幫助呢?1 存取款;2 貨幣兌換;3 咨詢')
    if number == '2':
        print('金加隆和人民幣的兌換率為1:51.3,即一金加隆=51.3人民幣')
        print('請(qǐng)問(wèn)您需要兌換多少金加隆呢?')
        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ò)誤,沒(méi)有你需要的服務(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í)行打印語(yǔ)句;等于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í)行打印語(yǔ)句;等于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-再來(lái)一盤-參考

【講解】

要達(dá)成目標(biāo),有兩種方案:

1.while True break:

開啟一個(gè)無(wú)限循環(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),退出游戲。下面,我們先用較簡(jiǎn)單的代碼來(lái)體會(huì)一下這兩種方案。


方案1:while True break

開啟一個(gè)無(wú)限循環(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

分析問(wèn)題,明確結(jié)果

我們的問(wèn)題是:將兩個(gè)列表合并起來(lái),并按照從低到高的順序排序,要得到問(wèn)題的結(jié)果,我們還需要借助打印函數(shù)看看我們合并的是否正確。


思考要用到的知識(shí)&思考切入點(diǎn)

增加列表的內(nèi)容與合并列表的含義相同,所以我們可以使用append作為解題的切入點(diǎn),請(qǐng)你試試!

提示:假設(shè)要用已學(xué)過(guò)的知識(shí)來(lái)完成這道作業(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è)需求:合并列表。不過(guò),有沒(méi)有發(fā)現(xiàn),這個(gè)代碼還是比較冗余的。有沒(méi)有更簡(jiǎn)單的方法呢?請(qǐng)你自己上網(wǎng)搜索一下

`python 合并兩個(gè)列表`,看看是否有更簡(jiǎn)單的方法(提示:以字母e開頭),學(xué)會(huì)后再回來(lái)繼續(xù)做作業(yè)吧。

請(qǐng)你根據(jù)新學(xué)到的知識(shí),簡(jiǎn)化代碼。

注(如果你直接將 list2 合并到 list1 上,那就無(wú)法做到只看A組的成績(jī),所以,最好再建一個(gè)列表來(lái)合并兩組的成績(jī))


list1 =  [91, 95, 97, 99]  
list2 =  [92, 93, 96, 98]
# 把 A 組成績(jī)賦值給一個(gè)新列表,用來(lái)存合并的成績(jī)——這個(gè)細(xì)節(jié)要注意!
list3 =list1
list3.extend(list2)
print(list3)


3.列表排序

主動(dòng)搜索,掌握新知

老師鼓勵(lì)你自己去探尋解決問(wèn)題的方法,上網(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ì)通過(guò)今天的項(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ù)封裝起來(lái),并調(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ì)通過(guò)今天的作業(yè),做出和電腦進(jìn)行“石頭剪刀布”的游戲。


練習(xí)要求:

和電腦玩一個(gè)剪刀石頭布的游戲:電腦隨機(jī)出拳,我們可選擇出什么。


1.雙方出拳

首先,我們要讓雙方選擇出拳,才能判斷勝負(fù)。

我們可以設(shè)置變量computer_choice代表電腦的出拳選擇,設(shè)置變量user_choice代表你的出拳選擇。

電腦的出拳,我們可以使用random.choice()來(lái)隨機(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)行了選擇,接下來(lái),我們需要知道雙方的出拳類型。

請(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)斗過(guò)程————')
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)斗過(guò)程————')
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)斗過(guò)程————')
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-一起來(lái)捉蟲-參考

1.知識(shí)點(diǎn)debug

【參考】

scores = {'語(yǔ)文':89, '數(shù)學(xué)':95, '英語(yǔ)':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è)績(jī)的類方法

【參考】

# 創(chuàng)建一個(gè)人事系統(tǒng)類
class hrSystem:
    # 創(chuàng)建存儲(chǔ)員工名字的變量 name
    name = ''
    # 創(chuàng)建存儲(chǔ)員工工資的變量 salary
    salary = 0
    # 創(chuàng)建存儲(chǔ)員工績(jī)效的變量 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('本年績(jī)效:' 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 '這次沒(méi)有評(píng)上獎(jiǎng)杯,希望來(lái)年努力工作,勇創(chuàng)佳績(jī)!')

# 驗(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ǔ)員工績(jī)效的變量 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('本年績(jī)效:' 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 '這次沒(méi)有評(píng)上獎(jiǎng)杯,希望來(lái)年努力工作,勇創(chuàng)佳績(jī)!')

    # 檢查錄入名稱是否正確的類方法   
    @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ǔ)員工績(jī)效的變量 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('本年績(jī)效:' 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 '這次沒(méi)有評(píng)上獎(jiǎng)杯,希望來(lái)年努力工作,勇創(chuàng)佳績(jī)!')
    # 檢查錄入名稱是否正確的類方法
    @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-問(wèn)卷搜集器-參考

1.問(wèn)卷答案的儲(chǔ)存

【參考】

# 不用運(yùn)行,讀懂即可。
class Survey():
    # 收集調(diào)查問(wèn)卷的答案
    def __init__(self, question):
        self.question = question
        # 定義收集問(wèn)卷問(wèn)題答案的列表
        self.response = []
    # 顯示調(diào)查問(wèn)卷的題目
    def show_question(self):
        print(self.question)

    # 存儲(chǔ)問(wèn)卷搜集的答案
    def store_response(self, new_response):
        self.response.append(new_response)  
        # 將答案添加到列表self.response(見第7行


2.搜集問(wèn)題-最喜歡的美食

【參考】

class Survey():
    # 收集調(diào)查問(wèn)卷的答案
    def __init__(self, question):
        self.question = question
        self.response = []
    # 顯示調(diào)查問(wèn)卷的題目
    def show_question(self):
        print(self.question)

    # 存儲(chǔ)問(wèn)卷搜集的答案
    def store_response(self, new_response):
        self.response.append(new_response)

# 請(qǐng)實(shí)例化Survey()類,并且顯示出這次的調(diào)查問(wèn)卷問(wèn)題。
food_survey = Survey('你最喜歡的美食是什么?'# 類的實(shí)例化,同時(shí)為參數(shù)question賦值。
food_survey.show_question()  # 調(diào)用類方法打印問(wèn)題

# 存儲(chǔ)問(wèn)卷調(diào)查的答案
while True:
    response = input('請(qǐng)回答問(wèn)卷問(wèn)題,按 q 鍵退出:')
    if response == 'q':
        break
    food_survey.store_response(response)  # 再次調(diào)用類方法,進(jìn)行問(wèn)答的收集。

# 輸出測(cè)試
for food in food_survey.response:
    print('美食:' food)


3.實(shí)名問(wèn)卷:搜集名字和籍貫地

【參考】

class Survey():
    # 收集調(diào)查問(wèn)卷的答案
    def __init__(self, question):
        self.question = question
        self.response = []
    # 顯示調(diào)查問(wèn)卷的題目
    def show_question(self):
        print(self.question)

    # 存儲(chǔ)問(wèn)卷搜集的答案
    def store_response(self, new_response):
        self.response.append(new_response)

# 請(qǐng)定義實(shí)名調(diào)查問(wèn)卷的新類 RealNameSurvey,繼承自 Survey 類
class RealNameSurvey(Survey):
    def __init__(self, question):
        Survey.__init__(self, question)
        self.response = {}  # 由于籍貫地和名字掛鉤,所以用構(gòu)成為“鍵值對(duì)”的字典來(lái)存放。
    # 存儲(chǔ)問(wèn)卷搜集的答案(覆蓋父類的類方法)
    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)回答問(wèn)卷問(wèn)題,按 q 鍵退出:')
    if response == 'q':
        break
    name = input('請(qǐng)輸入回答者姓名:')
    survey.store_response(name, response)  # 調(diào)用類方法,將兩次通過(guò) 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è)無(wú)序的不重復(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è)列表的長(zhǎng)度是多少(類似判斷方式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』【暗影刺客】說(shuō):“讓無(wú)盡光芒制裁你的墮落!”'%(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』【精靈弩手】說(shuō):“主動(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』【圣光騎士】說(shuō):“騎著倔驢又如何?你都碰不到我衣服?!?%(str1, str2))


# 創(chuàng)建一個(gè)類,可生成3V3并展示:可分為:歡迎語(yǔ)→隨機(jī)生成→展示角色
class Game:
    def __init__(self):
        self.players = []
        self.enemies = []
        self.score = 0
        self.i = 0
        # 依次執(zhí)行以下函數(shù)
        self.game_start()  # 歡迎語(yǔ)
        self.born_role()  # 隨機(jī)生成6個(gè)角色
        self.cooperat_role()  # 角色類型引起的屬性加成
        self.show_role()  # 展示角色
        self.order_role()  # 排序并展示
        self.pk_role()  # 讓雙方 Pk 并展示結(jié)果
        self.show_result()  # 展示最終結(jié)局


    # 歡迎語(yǔ)
    def game_start(self):
        print('------------ 歡迎來(lái)到“煉獄角斗場(chǎng)” ------------')
        print('在昔日的黃昏山脈,奧盧帝國(guó)的北境邊界上,有傳說(shuō)中的“煉獄角斗場(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 活下來(lái)了。'% (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你沒(méi)有勝利,但也沒(méi)有失敗,在夜色中灰溜溜離開了奧盧帝國(guó)。')
        else:
            print('【最終結(jié)果】\n你輸了。煉獄角斗場(chǎng)又多了幾具枯骨。')


game = Game()





第15關(guān)

練習(xí)1-數(shù)據(jù)轉(zhuǎn)移中的變化-參考

1.編碼和解碼

【參考】

# 1.分別使用gbk和utf-8編碼自己的名字,并將其打印出來(lái)。
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',并打印出來(lái)。

print(b'\xb7\xe7\xb1\xe4\xbf\xc6\xbc\xbc\xd3\xd0\xd2\xe2\xcb\xbc'.decode('gbk'))


2.通過(guò)文件讀寫,復(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  # 先把總成績(jī)?cè)O(shè)為0
    for score in data[1:]:  # 遍歷列表中第1個(gè)數(shù)據(jù)和之后的數(shù)據(jù)
        sum = sum int(score)  # 然后依次加起來(lái),但分?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)過(guò)測(cè)試,發(fā)現(xiàn)'\n'的長(zhǎng)度是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] # 取出名字(注:字符串和列表一樣,是通過(guò)偏移量來(lái)獲取內(nèi)部數(shù)據(jù)。)
score = int(i[-4:-1]) # 取出成績(jī)
print(name)
print(score)
dict_scores[score] = name # 將名字和成績(jī)對(duì)應(yīng)存為字典的鍵值對(duì)(注意:這里的成績(jī)是鍵)
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來(lái)倒計(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è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í)長(zhǎng)為:' str(task_time) '分鐘\n')
            f.write(task_name ' 的實(shí)際時(shí)長(zhǎng)為:' 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,  # 用來(lái)調(diào)節(jié)圖片的亮度,用法同上。
    save_name='Python.gif',  # 控制輸出文件名,格式可以是 .jpg, .png ,.bmp ,.gif
    )





第17關(guān)

練習(xí)1-拯救選擇困難癥-參考

【參考】

# 幫你做選擇之我要吃什么
import random


# 將需要用到的表格和變量放在開頭
list_food = ['KFC', '蒸菜館', '樓下快餐店', '桂林米粉', '東北餃子', '金牌豬腳飯', '三及第湯飯'# 備選菜單,可自定義。
list_choice = []


# 由于兩個(gè)原因都包含判斷過(guò)程,所以,為了讓代碼更簡(jiǎn)潔,可將其封裝成函數(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ǔ)句,是為了不將 y 也添加到菜單里。
            list_choice.append(choice)
        if choice == 'y':
            add = False
    choose(list_choice)          
else:
    print('抱歉,目前還不支持第三種情況——不過(guò),你可以加代碼哦。')


    本站是提供個(gè)人知識(shí)管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請(qǐng)注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購(gòu)買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請(qǐng)點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評(píng)論

    發(fā)表

    請(qǐng)遵守用戶 評(píng)論公約

    類似文章 更多