面向对象编程练习
题目1
编写类Book,定义方法update_price,实现更改某本书的价格,具体:如果价格大于150,则更改为150,如果价格大于100,则更改为100,否则不变。
分析如下:
类名:Book
属性:name、price
构造器:__init__(self, name, price)
方法:update_price 完成功能:如果价格大于150,则更改为150,如果价格大于100,则更改为100,否则不变。
info 完成功能:打印书的信息,包括书的price以及书的name
代码如下:
class Book:
def __init__(self, name, price):
self.name = name
self.price = price
def update_price(self):
if self.price > 150:
self.price = 150
elif self.price > 100:
self.price = 100
else:
pass
def info(self):
print(f"书的信息为:{self.name},{self.price}")
book = Book("骆驼祥子", 300)
book.info()
book.update_price()
book.info()
输出结果:
书的信息为:骆驼祥子,300
书的信息为:骆驼祥子,150
题目2
定义一个圆类Circle,定义属性:半径,提供显示圆周长功能的方法,提供显示圆面积的方法
分析如下:
类名:Circle
属性:r
构造器:__init__(self, r)
方法:circumference(self) 功能:显示圆周长;circle_area(self) 功能:显示圆面积
代码如下:
import math
class Circle:
def __init__(self, r):
self.r = r
def circumference(self):
c = 2 * math.pi * self.r
print(f"圆的周长为:{c}")
def circle_area(self):
s = math.pi * self.r * self.r
print(f"圆的面积为:{s}")
circle1 = Circle(1)
circle1.circumference()
circle1.circle_area()
输出结果:
圆的周长为:6.283185307179586
圆的面积为:3.141592653589793
题目3
编程创建一个Cal计算类,在其中定义2个成员变量表示两个操作数,定义四个方法实现求和、差、乘、商(要求除数为0的话,要提示)并创建对象,分别测试 。
分析如下:
类名:Cal
属性:两个成员变量,a,b
构造器:__init__(self, a, b)
方法:def sum_ab(self)、def sub_ab(self)、def mul_ab(self)、def div_ab(self)
class Cal:
def __init__(self, a, b):
self.a = a
self.b = b
def sum_ab(self):
sum_ = self.a + self.b
print(f"{self.a} + {self.b} = {sum_}")
def sub_ab(self):
sub_ = self.a - self.b
print(f"{self.a} - {self.b} = {sub_}")
def mul_ab(self):
mul_ = self.a * self.b
print(f"{self.a} * {self.b} = {mul_}")
def div_ab(self):
if self.b == 0:
print("除数为0,请重新确定除数!\n")
else:
div_ = self.a / self.b
print(f"{self.a} / {self.b} = {div_}")
cal = Cal(5, 6)
cal.sum_ab()
cal.sub_ab()
cal.mul_ab()
cal.div_ab()
输出结果:
5 + 6 = 11
5 - 6 = -1
5 * 6 = 30
5 / 6 = 0.8333333333333334
题目4
定义Music类,里面有音乐名name、音乐时长times属性,并有播放play功能,和返回本身属性信息的方法get_info。
分析如下:
类名:Music
属性:name、times
构造器: __init__(self, name, times)
方法:play、get_info
代码如下:
class Music:
def __init__(self, name, times):
self.name = name
self.times = times
def play(self):
print(f"音乐{self.name}正在播放!")
def get_info(self):
print(f"音乐名: {self.name},音乐时长: {self.times}min")
music = Music("小苹果", 5)
music.play()
music.get_info()
输出结果:
音乐小苹果正在播放!
音乐名: 小苹果,音乐时长: 5min
题目5
分析以下代码的输出结果
class Demo:
i = 100
def m(self):
self.i += 1
j = self.i
print("i=", self.i)
print("j=", j)
d1 = Demo()
d2 = d1
d2.m()
print(d1.i)
print(d2.i)
输出结果:
i= 101
j= 101
101
101
题目6
石头剪刀布游戏
设计一个人Tom,设计他的成员变量、成员方法,可以进行电脑猜拳,电脑每次都会随机生成0(石头)、1(剪刀)、2(布)。
并要求可以显示Tom的输赢次数(清单)
代码如下:
import random
class Tom:
def __init__(self):
self.win_count = 0
self.lose_count = 0
def guess(self):
choices = ["石头", "剪刀", "布"]
computer_choice = random.randint(0, 2)
user_choice = input("请出拳(石头/剪刀/布):")
if user_choice not in choices:
print("请输入有效的选择:石头、剪刀或布")
return
print(f"Tom选择了:{user_choice}")
print(f"电脑选择了:{choices[computer_choice]}")
result = (computer_choice - choices.index(user_choice)) % 3
if result == 0:
print("平局!")
elif result == 1:
print("Tom赢了!")
self.win_count += 1
else:
print("Tom输了!")
self.lose_count += 1
def show_score(self):
print(f"Tom的输赢次数:赢 {self.win_count} 次,输 {self.lose_count} 次。")
# 创建Tom对象
tom = Tom()
# 进行猜拳游戏
while True:
tom.guess()
tom.show_score()
play_again = input("是否继续游戏?(y/n):")
if play_again.lower() != 'y':
break
上述代码中,我们设计了一个名为Tom的类,其中包含了初始化方法 __init__
、猜拳方法 guess
和显示得分方法 show_score
。通过调用这些方法,Tom可以与电脑进行猜拳游戏,并记录输赢次数。