Skip to content

PW_16

Ip Adresses

Note

They are plenty of ways to implement IP adresses (with lists, tuples, as you want). This correction is not the only answer.

python
class Ipv4:
    def __init__(self, byte1, byte2, byte3, byte4):
        self.byte1 = byte1
        self.byte2 = byte2
        self.byte3 = byte3
        self.byte4 = byte4

    def __repr__(self):
        return self.byte1 + "." + self.byte2 + "." + self.byte3 + "." + self.byte4

    def bytes_List(self):
        return [self.byte1, self.byte2, self.byte3, self.byte4]

    def is_reserved(self):
        if self.byte1 == 192 and slef.byte2 == 168 and self.byte3 == 0:
            return self.byte4 == 0 or self.byte4 == 255

    def next_adress():
        if self.byte4 < 255:
            return Ipv4(self.byte1, self.byte2, self.byte3, self.byte4 + 1)
        if self.byte3 < 255:
            return Ipv4(self.byte1, self.byte2, self.byte3 + 1, self.byte4)
        if self.byte2 < 255:
            return Ipv4(self.byte1, self.byte2 + 1, self.byte3, self.byte4)
        if self.byte1 < 255:
            return Ipv4(self.byte1 + 1, self.byte2, self.byte3, self.byte4)
        raise OverflowError

class Ipv6:
    def __init__(self, b1, b2, b3, b4, b5, b6, b7, b8):
        self.b1 = b1
        self.b2 = b2
        self.b3 = b3
        self.b4 = b4
        self.b5 = b5
        self.b6 = b6
        self.b7 = b7
        self.b8 = b8

    def __repr__(self):
        return self.b1 + ":" + self.b2 + ":" + self.b3 + ":" + self.b4 \
       + ":" + self.b5 + ":" + self.b6 + ":" + self.b7 + ":" + self.b8

3D Game

python
class Player:
    def __init__(self, x, y, z):
        self.x = x
        self.y = y
        self.z = z

    def coord(self): return (self.x, self.y, self.z)

    def front(self): self.x += 1 
    def back(self):  self.x -= 1 
    def left(self):  self.y += 1
    def right(self): self.y -= 1
    def up(self):    self.z += 1
    def down(self):  self.z -= 1

# Test in same file bc why not

P = Player(0, 0, 0)
assert P.coord() == (0, 0 )
P.front()
assert P.x == 1
P.back()
assert P.x == 0
P.left()
assert P.y == 1
P.right()
assert P.y == 0
P.up()
assert P.z == 1
P.down()
assert P.z == 0

Cards

Hint

This exercice was a bonus exercice and so not guided.

I may haven't finished this one. I decided to use Enums as the code looks cleaner and i'm maybe too corrupted with java. You could have done it with int/normal classes just fine.

python
from enum import Enum
from random import randint

class Face(Enum):
    ACE   = 1
    TWO   = 2
    THREE = 3
    FOUR  = 4
    FIVE  = 5
    SIX   = 6
    SEVEN = 7
    EIGHT = 8
    NINE  = 9
    TEN   = 10
    JACK  = 11
    QUEEN = 12
    KING  = 13

class Color(Enum):
    CLUB    = 1
    SPADE   = 2
    DIAMOND = 3
    HEART   = 4

class Card:
    def __init__(self, face: Face, color: Color):
        self.face = face
        self.color = color

    def __repr__(self):
        face_map = {
            Face.ACE: 'A',
            Face.TWO: '2',
            Face.THREE: '3',
            Face.FOUR: '4',
            Face.FIVE: '5',
            Face.SIX: '6',
            Face.SEVEN: '7',
            Face.EIGHT: '8',
            Face.NINE: '9',
            Face.TEN: '10',
            Face.JACK: 'J',
            Face.QUEEN: 'Q',
            Face.KING: 'K',
        }
        suit_map = {
            Color.SPADE: '♠',
            Color.HEART: '♥',
            Color.DIAMOND: '♦',
            Color.CLUB: '♣',
        }
        face_str = face_map.get(self.face, str(self.face.value))
        suit = suit_map.get(self.color, '?')
        return f"|{face_str}{suit} |"

class Game:
    def __init__(self):
        self.score = 0
        self.stack = []
        self.dead  = []
        for col in Color:
            for f in Face:
                c = Card(f, col)
                self.stack.append(c)

        r = randint(0, len(self.stack) - 1)
        self.played = self.stack[r]
        self.stack.pop(r)
        self.dead.append(self.top)
    
    def turn(self):
        r = randint(0, len(self.stack) - 1)
        played = self.stack[r]
        if played.color == played.face:
            self.score += 1
        self.stack.pop(r)
        self.dead.append(self.played)
        
 
game = Game()
print(game.played)

Released under the GPL-3.0 License.