-
定义一个狗类和一个人类:
狗拥有属性:姓名、性别和品种 拥有方法:叫唤
人类拥有属性:姓名、年龄、狗 拥有方法:遛狗
class Dog: def __init__(self, dog_name, gender, breed): self.dog_name = dog_name self.gender = gender self.breed = breed @classmethod def shout(cls): return print('汪汪汪!') dog1 = Dog('小黑', '公', '哈士奇') print(dog1.dog_name, dog1.gender, dog1.breed) dog1.shout() class Person: def __init__(self, name, age, dog): self.name = name self.age = age self.dog = dog @classmethod def walkies(cls): return print('遛狗!') p1 = Person('张三', '21', dog1.dog_name) print(p1.dog) p1.walkies()
-
定义一个矩形类,拥有属性:长、宽 拥有方法:求周长、求面积
class Rectangle:
def __init__(self, long, wide):
self.long = long
self.wide = wide
def girth(self):
return (self.long + self.wide) * 2
def area(self):
return self.long * self.wide
r1 = Rectangle(10, 5)
print(r1.long, r1.wide)
print(f'周长为:{r1.girth()}')
print(f'面积为:{r1.area()}')
- 定义一个二维点类,拥有属性:x坐标、y坐标 拥有方法:求当前点到另外一个点的距离
class Point:
def __init__(self, x, y):
self.x = x
self.y = y
def distance(self):
return (self.x ** 2 + self.y ** 2) ** 0.5
p1 = Point(3, 4)
print(p1.x, p1.y)
print(f'{p1.distance():.2f}')
- 定义一个圆类,拥有属性:半径、圆心 拥有方法:求圆的周长和面积、判断当前圆和另一个圆是否外切
class Circle:
pi = 3.14
def __init__(self, radius, x, y):
self.radius = radius
self.x = x
self.y = y
self.center = (self.x, self.y) # 圆心
def girth(self):
return self.radius * 2 * Circle.pi
def area(self):
return self.radius ** 2 * Circle.pi
@staticmethod
def circumscribe(circle1, circle2):
d_circle1 = circle1.center
d_circle2 = circle2.center
d = (d_circle1[0] - d_circle2[0]) ** 2 + (d_circle1[1] - d_circle2[1]) ** 2
last_d = f'{d ** 0.5:.2f}'
if last_d == f'{float(circle1.radius + circle2.radius):.2f}':
return print('两圆外切')
else:
return print('两圆不外切')
c1 = Circle(10, 0, 3)
c2 = Circle(10, 0, 23)
print(f'{c1.girth():.2f}')
print(f'{c1.area():.2f}')
print(c1.center)
Circle.circumscribe(c1, c2)
- 定义一个线段类,拥有属性:起点和终点, 拥有方法:获取线段的长度
class Segment:
def __init__(self, x1, y1, x2, y2):
self.x1 = x1
self.y1 = y1
self.x2 = x2
self.y2 = y2
self.start = (x1, y1) # 起点
self.end = (x2, y2) # 终点
@staticmethod
def length(segment):
start = segment.start
end = segment.end
length = (start[0] - end[0]) ** 2 + (start[1] - end[1]) **2
last_length = f'{length ** 0.5:.2f}'
return last_length
s1 = Segment(0, 0, 3, 4)
print(s1.start)
print(s1.end)
print(f'线段长度为:{Segment.length(s1)}')
- 写一个斗地主游戏类(根据生活经验添加类的内容)
from random import shuffle
class PokerGame:
def __init__(self):
# 生成一副牌
self.poker = []
colors = ['♣', '♥', '♠', '♦']
nums = list(range(2, 11)) + ['J', 'Q', 'K', 'A']
for num in nums:
for c in colors:
self.poker.append(f'{c}{num}')
self.poker.extend(['joker', 'JOKER'])
# 洗牌
shuffle(self.poker)
def deal_poker(self):
# 发牌
player1 = []
player2 = []
player3 = []
pokers = iter(self.poker)
for _ in range(17):
player1.append(next(pokers))
player2.append(next(pokers))
player3.append(next(pokers))
table = {'J': 11, 'Q': 12, 'K': 13, 'A': 14, '2': 15, 'oker': 16, 'OKER': 17}
table.update({str(x): x for x in range(3, 11)})
player1.sort(key=lambda item: table[item[1:]], reverse=True)
player2.sort(key=lambda item: table[item[1:]], reverse=True)
player3.sort(key=lambda item: table[item[1:]], reverse=True)
return player1, player2, player3, list(pokers)
user = PokerGame()
print(user.poker)
p1, p2, p3, last_poker = user.deal_poker()
print(p1)
print(p2)
print(p3)
print(last_poker)