最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Python入門經(jīng)典題目實(shí)戰(zhàn)應(yīng)用指南

 更新時(shí)間:2025年10月28日 10:00:59   作者:自動化小秋葵  
Python作為一門易學(xué)且功能強(qiáng)大的編程語言,是初學(xué)者入門編程的理想選擇,通過解決實(shí)際問題,我們可以更好地理解和掌握Python的基礎(chǔ)知識,這篇文章主要介紹了Python入門經(jīng)典題目實(shí)戰(zhàn)應(yīng)用的相關(guān)資料,需要的朋友可以參考下

利用python處理一些小問題,主要學(xué)習(xí)此過程中語言如何應(yīng)用,與c/cpp不同的地方。

列表與元組

給定一個(gè)聯(lián)系人列表,每個(gè)聯(lián)系人用一個(gè)元組表示,其中有聯(lián)系人的姓名name和年齡age。

編寫該程序,輸入一個(gè)字符串,在聯(lián)系人列表中搜索該人名,并以示例格式輸出該聯(lián)系人的年齡。

沒找到聯(lián)系人輸出Not Found

contacts = [
    ('James', 42),
    ('Amy', 24),
    ('John', 31),
    ('Amanda', 63),
    ('Bob', 18)
]

name = input()

notfound = True

for x in contacts:
    if(x[0] == name):
        print(f"{name} is {x[1]}")
        notfound = False

if notfound:
    print("Not Found")

1.元組是有序的(1,2,3),集合是無序的{1,2,3}

2.在列表中的元組,for x in contacts,是一個(gè)元組一個(gè)元組遍歷,而元組x[0],x[1]分別表示元組中第幾個(gè)元素(有序的)

3.輸出表示:print(f"{name} is {x[1]}")

面向?qū)ο缶幊填}目

1.石頭剪刀布

#電腦隨機(jī)生成數(shù)字
import random

class Game():
    #我們通過類里面的方法獲得類的屬性值
    def __init__(self):
        self.computer_pick = self.get_computer_pick()
        self.user_pick = self.get_user_pick()
        self.result = self.get_result()
   
    #電腦隨機(jī)生成選項(xiàng)    def get_computer_pick(self):
        random_num = random.randint(1,3)
        options = {1:"paper",2:"scissors",3:"rock"}
        return options[random_num]

    #用戶輸入獲取
    def get_user_pick(self):
        while True:
            user_pick = input('輸入石頭/剪子/布:')
            user_pick = user_pick.lower()
            if user_pick in ("paper","scissors","rock"):
                break
            else:
                print('error input!')
        return user_pick

    #判斷勝負(fù)
    def get_result(self):
        if self.computer_pick == self.user_pick:
            result = '平局'
        elif self.user_pick =='paper' and self.computer_pick == 'rock':
            result = '獲勝'
        elif self.user_pick =='rock' and self.computer_pick == 'scissors':
            result = '獲勝'
        elif self.user_pick =='scissors' and self.computer_pick == 'paper':
            result = '獲勝'
        else:
            result = '失敗'
        return result

    #打印情況
    def print_result(self):
        print(f"Computer's pick: {self.computer_pick}")
        print(f'Your pick: {self.user_pick}')
        print(f'You {self.result}')

# 運(yùn)行
if __name__ == '__main__':
    game = Game()
    game.print_result()

1.我第一次寫的時(shí)候(剛學(xué)完類)將方法前面的self遺漏了,導(dǎo)致報(bào)錯,代碼會找全局函數(shù)get_computer_pick(),所以類里面的方法和屬性需要加self哦!

2.之所以不需要調(diào)用game.get_user_pick(),game.get_computer_pick()和game.get_result()是因?yàn)榘堰@些方法調(diào)用寫入了__init__(),創(chuàng)建對象的時(shí)候自動調(diào)用了,只需要給輸入即可打印情況!

3.其次可以學(xué)習(xí)一下利用隨機(jī)模塊random和字典生成不同選項(xiàng)的用法

#電腦隨機(jī)生成選項(xiàng)    
def get_computer_pick(self):
        random_num = random.randint(1,3)
        options = {1:"paper",2:"scissors",3:"rock"}
        return options[random_num]
-------------------------------------------------------
def get_computer_pick():
    options = ('rock', 'paper', 'scissors')
    return random.choice(options)

4.學(xué)習(xí)一下用戶輸入獲取正確的方法

5.學(xué)一下用類構(gòu)建這類游戲的思維(函數(shù)也能構(gòu)建)

2.井字游戲

在這個(gè)項(xiàng)目中,我們將用Python創(chuàng)建一個(gè)井字形游戲。

我們將使用面向?qū)ο蟮木幊虂韯?chuàng)建這個(gè)游戲。我們的游戲?qū)⒂?strong>三個(gè)類:

  • 棋盤:處理井字棋盤并處理獲勝/抽簽邏輯
  • 玩家:處理玩家的名字和他們所使用的符號
  • 游戲:處理游戲邏輯

棋盤類

Board類的對象有一個(gè)名為board的屬性,它是一個(gè)包含9個(gè)項(xiàng)目的列表。 開始的時(shí)候,每個(gè)項(xiàng)目的值是一個(gè)空格。 一旦玩家開始選擇位置的符號,我們將用XO更新這個(gè)列表的項(xiàng)目。 print_board()方法會以一種視覺上的直觀方式打印棋盤。

class Board:
    def __init__(self):
        #用列表建立棋盤,每個(gè)格都有序號
        self.board = [' ',' ',' ',
                      ' ',' ',' ',
                      ' ',' ',' ']
    #打印棋盤
    def print_board(self):
        print('\n')
        print(' ' + self.board[0] + ' | ' + self.board[1] + ' | ' + self.board[2])
        print('-------')
        print(' ' + self.board[3] + ' | ' + self.board[4] + ' | ' + self.board[5])
        print('-------')
        print(' ' + self.board[6] + ' | ' + self.board[7] + ' | ' + self.board[8])

board = Board()

玩家類

添加Player類。這個(gè)類的對象有兩個(gè)屬性。

  • type: 用于符號 "X" 或 "O"。
  • name:用于存儲玩家的名字。

假設(shè)第一個(gè)球員總是采取 "X" 符號,第二個(gè)球員總是采取 "O" 符號。

get_name()方法用來獲取球員的名字。

class Player:
    def __init__(self,type):
        self.type = type
        self.name = self.get_player_name()
        self.print_player()

    def get_player_name(self):
        if self.type == 'X':
            name = input('選擇X的玩家輸入姓名:')
        else:
            name = input('選擇O的玩家輸入姓名:')
        return name
    def print_player(self):
        print(f'玩家{self.name}選擇{self.type}')

# 創(chuàng)建用于測試的玩家對象
player1 = Player('X')
player2 = Player('O')

1.注意__init__()函數(shù)中初始化順序,self.type必須在self.get_player_name()前面,因?yàn)間et_player_name()中用到了self.type,此時(shí)需要被定義才行。

2.代碼專業(yè)性角度分析寫法:把 self.name 的賦值封裝在 get_name() 里是否更高效可行?

可行,但不高效。

class Player:
    def __init__(self, type):
        self.type = type
        self.ask_name()

    def ask_name(self):
        if self.type == 'X':
            self.name = input('選擇 X 的玩家,請輸入你的名字:')
        else:
            self.name = input('選擇 O 的玩家,請輸入你的名字:')

注意看此時(shí)與上面的區(qū)別。

不好在:跑單元測試時(shí)必須人肉輸入,或打補(bǔ)丁 input() || 類永遠(yuǎn)綁定了“控制臺交互”這一上下文,想以后改成 GUI、網(wǎng)頁、API 都得改類。直接賦值給self.name可讀性差,點(diǎn)開ask_name()才知道self.name在此賦值。

優(yōu)化:在__init__()里加入name

class Player:
    def __init__(self, type, name=None):
        self.type = type
        self.name = name or self.ask_name()   # 外部沒給就自己去問

    def ask_name(self):
        return input(f'選擇 {self.type} 的玩家,請輸入名字:')

這樣既能在生產(chǎn)環(huán)境自動提問,也能在測試時(shí)直接 Player('X', 'Alice') 秒建對象

游戲類

先完成簡單的棋盤更新邏輯

update_board()方法

這個(gè)方法需要三個(gè)參數(shù):

  • self:調(diào)用此方法的對象
  • position:用戶選擇的位置(一個(gè)整數(shù))
  • type- 如果當(dāng)前玩家是player1',它將是'X',否則它將是'O'`。

方法首先檢查position 是否已經(jīng)被填充。 如果它沒有被填滿,我們將更新棋盤并返回True。 如果該位置已經(jīng)被填滿,將顯示一條信息,并返回 False。

class Board:
    def __init__(self):
        #用列表建立棋盤,每個(gè)格都有序號
        self.board = [' ', ' ',' ',
                      ' ',' ',' ',
                      ' ',' ',' ']
    #打印棋盤
    def print_board(self):
        print('\n')
        print(' ' + self.board[0] + ' | ' + self.board[1] + ' | ' + self.board[2])
        print('-------')
        print(' ' + self.board[3] + ' | ' + self.board[4] + ' | ' + self.board[5])
        print('-------')
        print(' ' + self.board[6] + ' | ' + self.board[7] + ' | ' + self.board[8])
   
    def update_board(self,position,type):
        if self.board[position] == ' ':
            self.board[position] = type
            return True
        else:
            print('位置已經(jīng)被選了,請選擇其他位置。')
            return False

然后回到play()中完成對update_board參數(shù)的更新即可:

class Game:
    def __init__(self):
        #創(chuàng)建對象
        self.board = Board()
        self.player1 = Player('X')
        self.player2 = Player('O')
        #剛開局是x玩家先走(current_player也是一個(gè)對象)
        self.current_player = self.player1

    def play(self):
        while True:
            message = int(input(f'{self.current_player.name},請輸入位置 (1 - 9): '))
            print(message)
            position = message-1
            flag = self.board.update_board(position,self.current_player.type)
            if flag:
                if self.current_player == self.player1:
                    self.current_player = self.player2
                else:
                    self.current_player = self.player1
                #打印棋盤
                self.board.print_board()
            else:
                continue

play1 = Game()
play1.play()

基本邏輯就有了,接下來就是判斷輸贏和平局了

  • 在 Board 類中增加了 check_winner() 和 check_draw() 方法。
class Board:
    def __init__(self):
        #用列表建立棋盤,每個(gè)格都有序號
        self.board = [' ', ' ',' ',
                      ' ',' ',' ',
                      ' ',' ',' ']
    #打印棋盤
    def print_board(self):
        print('\n')
        print(' ' + self.board[0] + ' | ' + self.board[1] + ' | ' + self.board[2])
        print('-------')
        print(' ' + self.board[3] + ' | ' + self.board[4] + ' | ' + self.board[5])
        print('-------')
        print(' ' + self.board[6] + ' | ' + self.board[7] + ' | ' + self.board[8])
   
    def update_board(self,position,type):
        if self.board[position] == ' ':
            self.board[position] = type
            return True
        else:
            print('位置已經(jīng)被選了,請選擇其他位置。')
            return False
    # 檢查所有的直線上的符號是否相同
    def check_winner(self, type):
        if (self.board[0] == type and self.board[1] == type and self.board[2] == type) or \
           (self.board[3] == type and self.board[4] == type and self.board[5] == type) or \
           (self.board[6] == type and self.board[7] == type and self.board[8] == type) or \
           (self.board[0] == type and self.board[3] == type and self.board[6] == type) or \
           (self.board[1] == type and self.board[4] == type and self.board[7] == type) or \
           (self.board[2] == type and self.board[5] == type and self.board[8] == type) or \
           (self.board[0] == type and self.board[4] == type and self.board[8] == type) or \
           (self.board[2] == type and self.board[4] == type and self.board[6] == type):
            return True
        else:
            return False

    # 所有的格子都被選擇了,并且沒有勝出者。返回平局!
    def check_draw(self):
        if ' ' not in self.board:
            return True
        else:
            return False

check_winner()方法

這個(gè)方法檢查是否有三個(gè)相同的符號(類型)出現(xiàn)在一排。 如果有,則擁有該符號的玩家就贏得了游戲。 在這種情況下,我們返回 "True",否則我們返回 "False"。

我們將從游戲類的play()方法中調(diào)用這個(gè)方法。 順便說一下,類里面的if條件非常大。這就是為什么我們使用了\來在多行中使用我們的布爾表達(dá)式。

check_draw()方法

如果棋盤上的所有字段都被填滿,但仍然沒有贏家,那么就是平局。 為判斷棋盤是否被填滿,我們判斷了' '是否在棋盤上。 如果棋盤列表中沒有' '(棋盤的初始值),這意味著所有的棋盤位置都被填滿。

稍后我們將從游戲類的play()方法中調(diào)用這個(gè)方法,判斷游戲勝負(fù)并退出循環(huán)

class Game:
    def __init__(self):
        #創(chuàng)建對象
        self.board = Board()
        self.player1 = Player('X')
        self.player2 = Player('O')
        #剛開局是x玩家先走(current_player也是一個(gè)對象)
        self.current_player = self.player1

    def play(self):
        while True:
            message = int(input(f'{self.current_player.name},請輸入位置 (1 - 9): '))
            print(message)
            position = message-1
            flag = self.board.update_board(position,self.current_player.type)
            if flag:
                #更新棋盤
                self.board.print_board()
                #判斷游戲勝負(fù)并退出循環(huán)
                if self.board.check_winner(self.current_player.type):
                    print(self.current_player.name,'wins!')
                    #有玩家獲勝退出游戲循環(huán)
                    break
                #平局
                elif self.board.check_draw():
                    print('Game is a draw!')
                    break

                #游戲未結(jié)束,繼續(xù)
                else:
                    if self.current_player == self.player1:
                        self.current_player = self.player2
                    else:
                        self.current_player = self.player1
                
            else:
                continue

自此游戲結(jié)束!

我覺得這個(gè)項(xiàng)目需要消化一下多練幾次才能復(fù)刻,不過不難看懂!

總結(jié)

到此這篇關(guān)于Python入門經(jīng)典題目實(shí)戰(zhàn)應(yīng)用指南的文章就介紹到這了,更多相關(guān)Python入門經(jīng)典題目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Flask框架web開發(fā)之零基礎(chǔ)入門

    Flask框架web開發(fā)之零基礎(chǔ)入門

    這篇文章主要介紹了Flask框架web開發(fā)之零基礎(chǔ)入門,簡單的介紹了如何使用及其數(shù)據(jù)庫集成,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧
    2018-12-12
  • Python中應(yīng)該使用%還是format來格式化字符串

    Python中應(yīng)該使用%還是format來格式化字符串

    這篇文章主要介紹了Python中應(yīng)該使用%還是format來格式化字符串的相關(guān)知識,非常不錯,具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2018-09-09
  • python使用pandas庫導(dǎo)入并保存excel、csv格式文件數(shù)據(jù)

    python使用pandas庫導(dǎo)入并保存excel、csv格式文件數(shù)據(jù)

    CSV格式文件很方便各種工具之間傳遞數(shù)據(jù),平時(shí)工作過程之中會將數(shù)據(jù)保存為CSV格式,這篇文章主要介紹了python使用pandas庫導(dǎo)入并保存excel、csv格式文件數(shù)據(jù)的相關(guān)資料,需要的朋友可以參考下
    2017-12-12
  • Python中的元組介紹

    Python中的元組介紹

    今天小編就為大家分享一篇關(guān)于Python中的元組介紹,小編覺得內(nèi)容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01
  • Python+Pyecharts實(shí)現(xiàn)散點(diǎn)圖的繪制

    Python+Pyecharts實(shí)現(xiàn)散點(diǎn)圖的繪制

    散點(diǎn)圖是指在回歸分析中,數(shù)據(jù)點(diǎn)在直角坐標(biāo)系平面上的分布圖,散點(diǎn)圖表示因變量隨自變量而變化的大致趨勢,據(jù)此可以選擇合適的函數(shù)對數(shù)據(jù)點(diǎn)進(jìn)行擬合。本文將利用Python Pyecharts實(shí)現(xiàn)散點(diǎn)圖的繪制,需要的可以參考一下
    2022-06-06
  • 分析Python字符串拼接+=和join()哪個(gè)速度更快

    分析Python字符串拼接+=和join()哪個(gè)速度更快

    這篇文章主要分析了Python中字符串拼接+=和join()哪個(gè)速度更快,具有很好的參考價(jià)值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-02-02
  • Python數(shù)據(jù)可視化探索實(shí)例分享

    Python數(shù)據(jù)可視化探索實(shí)例分享

    這篇文章主要介紹了Python數(shù)據(jù)可視化探索實(shí)例分享,數(shù)據(jù)可視化是指用圖形或表格的方式來呈現(xiàn)數(shù)據(jù),關(guān)于更多相關(guān)介紹需要的小伙伴可以參考下面文章的具體內(nèi)容
    2022-05-05
  • 詳解Python的多線程定時(shí)器threading.Timer

    詳解Python的多線程定時(shí)器threading.Timer

    這篇文章主要為大家介紹了Python的多線程定時(shí)器,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-01-01
  • python實(shí)現(xiàn)獲取單向鏈表倒數(shù)第k個(gè)結(jié)點(diǎn)的值示例

    python實(shí)現(xiàn)獲取單向鏈表倒數(shù)第k個(gè)結(jié)點(diǎn)的值示例

    這篇文章主要介紹了python實(shí)現(xiàn)獲取單向鏈表倒數(shù)第k個(gè)結(jié)點(diǎn)的值,結(jié)合實(shí)例形式分析了Python針對單向鏈表的定義、遍歷、傳值、判斷等相關(guān)操作技巧,需要的朋友可以參考下
    2019-10-10
  • 基于Python pip用國內(nèi)鏡像下載的方法

    基于Python pip用國內(nèi)鏡像下載的方法

    今天小編就為大家分享一篇基于Python pip用國內(nèi)鏡像下載的方法。具有很好的參考價(jià)值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-06-06

最新評論

原阳县| 大邑县| 礼泉县| 武汉市| 阿瓦提县| 安阳市| 富锦市| 阿巴嘎旗| 鄂托克前旗| 西盟| 日土县| 沾化县| 开封县| 呼伦贝尔市| 青海省| 红安县| 阳原县| 庆阳市| 望奎县| 北辰区| 时尚| 葫芦岛市| 海林市| 静乐县| 铁力市| 开远市| 缙云县| 原平市| 万源市| 改则县| 朝阳市| 临城县| 武义县| 台中市| 泽普县| 玉树县| 化州市| 吴江市| 黔西县| 郯城县| 南投市|