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.b83D 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 == 0Cards
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)