昨晚做了实验,9点半的时候吃了炸串,然后第二天早上看血糖,直接飙到了9.5,到凌晨3点血糖才降到6,天知道这些年我的破嘴有多对不起我的胰腺啊,必须道歉。 然后今天看了剩下的类的内容,发现有一些隐藏的坑 很容易跳进去。笔记如下:
4.导入类
为了遵循Python的整体理念,让文件尽量整洁,在确定了类的大致内容后,应将其单独撰写并存储入模块,之后再导入所需的模块。
- 导入单个类 针对上述Car类,单独存储为模块car.py。后续导入使用,就可以专注于主程序的高级逻辑。
from car import Car
my_new_car = Car('audi','a4',2024)
print(my_new_car.get_descriptive_name())
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
# 》2024 Audi A4
This car has 23 miles on it.
-
导入多个类:用逗号隔开 from car import Car , Battery
-
导入整个模块 import car
-
导入模块中的所有类(不推荐) from module_name import *
-
使用别名 from electric_car import ElectricCar as EC
5.Python 标准库
-
可以利用import 函数调用标准库里的模块
-
randian( ) 返回参数之间的一个随机整数: from random import randiant randint(1,6)
-
choice( )随机返回列表或元组中的一个元素 from random import choice players = ['charles','martina','michael'] first_up = choice(players) first_up 'charles'
练习
骰子
class Die:
"""一个投掷1-6随机数的游戏"""
def __init__(self,sides=6):
"""设置属性sides的默认值"""
self.sides = sides
print(f"骰子有{self.sides} 面")
def roll_die(self):
"""针对不同面数的骰子投掷10次,取随机数"""
from random import randint
i=0
while i < 10:
num = randint(1,self.sides)
print(f"这是第 {i+1} 次投掷,得出的随机数是 {num}")
i += 1
die1 = Die()
die1.roll_die()
print()
die2 = Die(10)
die2.roll_die()
print()
die3 = Die(20)
die3.roll_die()
彩票(写的报错)
class Ticket:
"""彩票中奖游戏"""
def __init__(self,ticket=[]):
self.ticket = ticket
def the_ticket(self):
"""随机选择4个数或字母作为中奖号码"""
from random import choice
ticket_all =[232,458,858,654,555,478,524,157,952,471,'a','d','e','f','g']
while True:
if len(self.ticket) < 4:
self.ticket_now = choice(ticket_all)
if self.ticket_now not in self.ticket:
self.ticket.append(self.ticket_now)
else:
continue
else:
break
print(f"如果打印出的彩票上的信息是{self.ticket},你就中大奖啦!")
yes_or_no = Ticket()
yes_or_no.the_ticket()
# 》如果打印出的彩票上的信息是[654, 'f', 555, 'd'],你就中大奖啦!
class My_ticket(Ticket):
"""验证中奖难度"""
def __init(self,ticket=[]):
"""初始化父类属性"""
super.__init__(ticket=[])
my_ticket = My_ticket()
n=0
while True:
now_ticket = my_ticket.the_ticket()
if now_ticket == yes_or_no.the_ticket():
print("你中大奖了,抽奖次数为n次")
break
else:
n +=1
continue
==修正版==
from random import choice
class Ticket:
"""彩票中奖游戏"""
def __init__(self):
self.ticket_all =[232,458,858,654,555,478,524,157,952,471,'a','d','e','f','g']
self.winning_ticket = []
def generate_winning_ticket(self):
"""随机选择4个数或字母作为中奖号码"""
self.winning_ticket = []
while len(self.winning_ticket) < 4:
self.item= choice(self.ticket_all)
if self.item not in self.winning_ticket:
self.winning_ticket.append(self.item)
else:
continue
return self.winning_ticket
def the_ticket(self):
"""打印中奖号码"""
if not self.winning_ticket:
self.generate_winning_ticket()
print(f"如果打印出的彩票上的信息是{self.winning_ticket},你就中大奖啦!") #方法执行得到的属性值,可以直接引用
yes_or_no = Ticket()
yes_or_no.the_ticket()
# 》如果打印出的彩票上的信息是[654, 'f', 555, 'd'],你就中大奖啦!
class My_ticket(Ticket):
"""获取我的彩票号码"""
def __init__(self,my_ticket_number=None):
"""初始化父类属性"""
super().__init__()
if my_ticket_number is None:
#如果没有提供我的彩票号码,随机生成一个
self.my_ticket=[]
while len(self.my_ticket) < 4:
item = choice(self.ticket_all)
if item not in self.my_ticket:
self.my_ticket.append(item)
else:
self.my_ticket = my_ticket_number
print(f"我的彩票号码:{self.my_ticket}")
def compare_tickets(self, ticket1, ticket2):
"""比较两个彩票是否相同(顺序不重要)"""
# 转换为字符串进行比较,避免数字和字符串的混合类型问题
ticket1_str = [str(item) for item in ticket1]
ticket2_str = [str(item) for item in ticket2]
return sorted(ticket1_str) == sorted(ticket2_str)
def simulate_until_win(self):
"""模拟抽奖直到中奖,返回尝试次数"""
attempts = 0
print(f"目标中奖号码:{self.winning_ticket}")
while True:
attempts += 1
#生成一个新的随机彩票
random_ticket = []
while len(random_ticket) < 4:
item = choice(self.ticket_all)
if item not in random_ticket:
random_ticket.append(item)
#每10000次显示一次进度
if attempts % 10000 ==0:
print(f"已尝试{attempts:,}次...")
#检查是否中奖
if self.compare_tickets(random_ticket, self.winning_ticket):
print(f"\n在第{attempts:}次尝试时中奖了!")
print(f"中奖号码:{random_ticket}")
return attempts
#创建我的彩票(可以指定号码,或随机生成)
my_lottery = My_ticket()
#显示中奖号码
print("正在生成中奖号码...")
my_lottery.generate_winning_ticket()
my_lottery.the_ticket()
#开始模拟
print("\n开始模拟抽奖...")
total_attempts = my_lottery.simulate_until_win()
#计算概率
total_possible = 15*14*13*12
probability = 1 / total_possible
print(f"\n理论概率: 1/{total_possible:,} ≈ {probability:.8f}")
print(f"实际尝试次数: {total_attempts:,}")
==**这里有几个问题,第一号码组合为数字和字母,不能用sorted;类的属性使用后,可以用作变量直接使用。