給python小白的幾個小練習(附答案詳解哦)

控制流

1.CRAPS又稱花旗骰,是美國拉斯維加斯非常受歡迎的一種的桌上賭博遊戲。該遊戲使用兩粒骰子,玩家通過搖兩粒骰子獲得點數進行遊戲。簡單的規則是:玩家第一次搖骰子如果搖出了7點或11點,玩家勝;玩家第一次如果搖出2點、3點或12點,莊家勝;其他點數玩家繼續搖骰子,如果玩家搖出了7點,莊家勝;如果玩家搖出了第一次搖的點數,玩家勝;其他點數,玩家繼續要骰子,直到分出勝負。

"""
Craps賭博遊戲
我們設定玩家開始遊戲時有1000元的賭注
遊戲結束的條件是玩家輸光所有的賭注

Version: 0.1
Author: 駱昊
"""
from random import randint

money = 1000
while money > 0:
    print('你的總資產爲:', money)
    needs_go_on = False#先設爲假
    while True:#只要money不小於0就會執行這個input
        debt = int(input('請下注: '))
        if 0 < debt <= money:
            break
    first = randint(1, 6) + randint(1, 6)#隨機的點數
    print('玩家搖出了%d點' % first)
    if first == 7 or first == 11:
        print('玩家勝!')
        money += debt
    elif first == 2 or first == 3 or first == 12:
        print('莊家勝!')
        money -= debt
    else:
        needs_go_on = True
    while needs_go_on:#就是needgoon=True時執行這個代碼
        needs_go_on = False
        current = randint(1, 6) + randint(1, 6)
        print('玩家搖出了%d點' % current)
        if current == 7:
            print('莊家勝')
            money -= debt
        elif current == first:
            print('玩家勝')
            money += debt
        else:
            needs_go_on = True
print('你破產了, 遊戲結束!')#money=0時跳出循環,打印結束

函數

2.《幸運的基督徒》
有15個基督徒和15個非基督徒在海上遇險,爲了能讓一部分人活下來不得不將其中15個人扔到海里面去,有個人想了個辦法就是大家圍成一個圈,由某個人開始從1報數,報到9的人就扔到海里面,他後面的人接着從1開始報數,報到9的人繼續扔到海里面,直到扔掉15個人。由於上帝的保佑,15個基督徒都倖免於難,問這些人最開始是怎麼站的,哪些位置是基督徒哪些位置是非基督徒。

def main():
    persons = [True] * 30#開始三十個人都活着
    counter, index, number = 0, 0, 0
    while counter < 15:
        if persons[index]:#如果person[index]==True
            number += 1
            if number == 9:
                persons[index] = False#第九個人si
                counter += 1
                number = 0#再次初始化
        index += 1
        index %= 30#越界檢查 限定index,使列表索引不能超出範圍
        
    for person in persons:
        print('基' if person else '非', end='')


if __name__ == '__main__':
    main()

面向對象的編程

定義一個類描述數字時鐘。

from time import sleep


class Clock(object):
    """數字時鐘"""

    def __init__(self, hour=0, minute=0, second=0):
        """初始化方法

        :param hour: 時
        :param minute: 分
        :param second: 秒
        """
        self._hour = hour
        self._minute = minute
        self._second = second

    def run(self):
        """走字"""
        self._second += 1
        if  self._second == 60:
            self._second = 0
            self._minute += 1
            if self._minute == 60:
                self._minute = 0
                self._hour += 1
                if self._hour == 24:
                    self._hour = 0

    def show(self):
        """顯示時間"""
        return '%02d:%02d:%02d' % \
               (self._hour, self._minute, self._second)


def main():
    clock = Clock(23, 59, 58)
    while True:
        print(clock.show())
        sleep(1)#休眠,每隔1秒打印一次
        clock.run()


if __name__ == '__main__':
    main()


23:59:58
23:59:59
00:00:00
00:00:01
00:00:02
00:00:03
00:00:04
00:00:05
00:00:06
00:00:07
…………
…………

定義一個類描述平面上的點並提供移動點和計算到另一個點距離的方法。

from math import sqrt


class Point(object):

    def __init__(self, x=0, y=0):
        """初始化方法
        
        :param x: 橫座標
        :param y: 縱座標
        """
        self.x = x
        self.y = y

    def move_to(self, x, y):
        """移動到指定位置
        
        :param x: 新的橫座標
        "param y: 新的縱座標
        """
        self.x = x
        self.y = y

    def move_by(self, dx, dy):
        """移動指定的增量
        
        :param dx: 橫座標的增量
        "param dy: 縱座標的增量
        """
        self.x += dx
        self.y += dy

    def distance_to(self, other):
        """計算與另一個點的距離
        
        :param other: 另一個點
        """
        dx = self.x - other.x
        dy = self.y - other.y
        return sqrt(dx ** 2 + dy ** 2)

    def __str__(self):#一般返回一個字符串。
        return '(%s, %s)' % (str(self.x), str(self.y))


# def main():
#     p1 = Point(3, 5)
#     p2 = Point()
#     print(p1)#(3,5)
#     print(p2)#(0,0)
#     p2.move_by(-1, 2)
#     print(p2)#(-1,2)
#     print(p1.distance_to(p2))#5.0


def main():
    p1 = Point(3, 5)
    p2 = Point(-1, 2)
    print(p1)#(3, 5)
	print(p2)#(-1, 2)
    print(p1.distance_to(p2))#5.0
    
    
if __name__ == '__main__':
    main()

王大錘正在玩飛行棋.
王大錘正在玩鬥地主.

自動洗牌發牌

import random

class Card(object):
    """一張牌"""

    def __init__(self, suite, face):
        self._suite = suite
        self._face = face

    @property
    def face(self):
        return self._face

    @property
    def suite(self):
        return self._suite

    def __str__(self):
        if self._face == 1:
            face_str = 'A'
        elif self._face == 11:
            face_str = 'J'
        elif self._face == 12:
            face_str = 'Q'
        elif self._face == 13:
            face_str = 'K'
        else:
            face_str = str(self._face)
        return '%s%s' % (self._suite, face_str)
    
    def __repr__(self):
        return self.__str__()


class Poker(object):
    """一副牌"""

    def __init__(self):
        self._cards = [Card(suite, face) 
                       for suite in '♠♥♣♦'
                       for face in range(1, 14)]
        self._current = 0

    @property
    def cards(self):
        return self._cards

    def shuffle(self):
        """洗牌(隨機亂序)"""
        self._current = 0
        random.shuffle(self._cards)

    @property
    def next(self):
        """發牌"""
        card = self._cards[self._current]
        self._current += 1
        return card

    @property
    def has_next(self):
        """還有沒有牌"""
        return self._current < len(self._cards)


class Player(object):
    """玩家"""

    def __init__(self, name):
        self._name = name
        self._cards_on_hand = []

    @property
    def name(self):
        return self._name

    @property
    def cards_on_hand(self):
        return self._cards_on_hand

    def get(self, card):
        """摸牌"""
        self._cards_on_hand.append(card)

    def arrange(self, card_key):
        """玩家整理手上的牌"""
        self._cards_on_hand.sort(key=card_key)


# 排序規則-先根據花色再根據點數排序
def get_key(Card):
    return (Card.suite,Card.face)


def main():
    p = Poker()
    p.shuffle()
    players = [Player('東邪'), Player('西毒'), Player('南帝'), Player('北丐')]
    for _ in range(13):
        for player in players:
            player.get(p.next)
    for player in players:
        print(player.name + ':', end=' ')
        player.arrange(get_key)
        print(player.cards_on_hand)


if __name__ == '__main__':
    main()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章