python创建类的基本方法有哪些_python 基础 12 初识类,类方法,类属性

# 面向过程 : 想要一个结果 写代码 实现计算结果

# 面向对象开发 : 有哪些角色 角色的属性和技能 两个角色之间是如何交互的

# 复杂的 拥有开放式结局的程序 比较适合使用面向对象开发

# 游戏

# 购物

# 类和对象之间的关系?

# 类 是一个大范围 是一个模子 它约束了事物有哪些属性 但是不能约束具体的值

# 对象 是一个具体的内容 是模子的产物 它遵循了类的约束 同时给属性赋上具体的值

# 定义一个 ‘人’ 类

# class Person:

# """人"""

# #__init__ 函数创建了人的一些个属性,名字啥的,这个叫动态属性变量

# def __init__(self, name,sex,job,hp,weapon,ad):

# super(Person, self).__init__()

# self.name = name

# self.sex = sex

# self.job = job

# self.hp = hp

# self.weapon = weapon

# self.ad = ad

#人可以执行很多功能,比如打狗,

# def cuo(self,dog):

# dog.hp -= self.ad

# print(f'{self.name}给{dog.name}搓了澡,{dog.name}掉了{self.ad}点血,{dog.name}的当前血量为{dog.hp}')

# 定义一个 狗 类

# class Dog:

# def __init__(self, name,hp,ad,style):

# super(Dog, self).__init__()

# self.name = name

# self.hp = hp

# self.ad = ad

# self.style = style

# def 舔(self,person):

# person.hp -= self.ad

# print('{}舔了{}一口,{}掉了{}血,{}当前血量为{}.'.format(self.name,person.name,person.name,self.ad,person.name,person.hp))

# alex = Person('alex','male','搓澡工',260,'搓澡巾',1)

# print('alex : ',alex) #alex : <__main__.person object at> 一个类对象

# 小白 = Dog('小白',5000,249,'柴狗')

# print('小白: ',小白)

# alex.cuo(小白)

# 小白.舔(alex)

# print(小白.__dict__) #{'name': '小白', 'hp': 4999, 'ad': 249, 'style': '柴狗'} 打印出全部属性

# print(alex.__dict__) #{'name': 'alex', 'sex': 'male', 'job': '搓澡工', 'hp': 11, 'weapon': '搓澡巾', 'ad': 1}

# # 定义一个圆形类,半径是这个圆形的属性,实例化一个半径为5的圆形,一个半径为10的圆形

# # 完成方法

# # 计算圆形面积

# # 计算圆形周长

# import math

# class Circle(object):

# """docstring for Circle"""

# def __init__(self, r):

# super(Circle, self).__init__()

# self.r = r

# def circumferrence(self):

# print('圆的周长为{}'.format(2*self.r*math.pi))

# def measure(self):

# print('圆的面积为{}'.format(self.r*self.r*math.pi))

# c1 = Circle(5)

# c1.circumferrence()

# c1.measure()

# # 定义一个用户类,用户名和密码是这个类的属性,实例化两个用户,分别有不同的用户名和密码

# # 设计一个方法 修改密码

# # 你得先登录才能修改密码

import time

import os

def auth(f):

def inner(*args,**kwargs):

if login():

ret = f(*args,**kwargs)

return ret

return inner

def login():

username = input("username:").strip()

password = input("password:").strip()

with open('userinfo',encoding='utf-8') as f1:

for i in f1:

uid,pwd = i.strip().split('|')

if username==uid and password==pwd:

print('login successfully')

return True

else:

print('login failed')

return False

class User(object):

"""docstring for user"""

def __init__(self, username,password):

super(User, self).__init__()

self.username = username

self.password = password

@auth

def fix_pass(self):

oldpwd = input('please input your old password:')

if oldpwd == self.password:

newpwd = input('please input your new password:')

with open('userinfo',encoding='utf-8',mode='r') as f2,open('userinfo.bak',encoding='utf-8',mode='w') as f3:

for line in f2:

uid,pwd = line.strip().split('|')

if uid == self.username:

self.password = newpwd.strip()

pwd = newpwd.strip()

f3.write("{}|{}\n".format(uid,pwd))

else:

f3.write('{}\n'.format(line))

os.remove('userinfo')

os.rename('userinfo.bak','userinfo')

return True

else:

return False

fallen = User('fallen','123456')

#print(fallen.__dict__)

fallen.fix_pass()

# 算法

# 二分查找 [1,2,3,4,5,6,7,8,9,10,27,36,46,58,69] - 有序列表

# 不用in index 从列表中找到一个值的位置

# 实现上面的功能 - 用代码

lst1 = [1,2,3,4,5,6,7,8,9,10,27,36,46,58,69]

## 这个不对,两头相加除以2求中间的值的方法不对

#def search(num,lst,left ,right):

# if right>left:

# mid = int((left+right)/2)

# if lst[mid]==num:

# return mid

# elif lst[mid] > num:

# right=mid

# search(num,lst,left,right)

# elif lst[mid] < num:

# left=mid

# search(num,lst,left,right)

# else:

# return -1

print(lst1.index(58))

print('index',search(58,lst1,0,len(lst1)-1))

## 菜鸟教程答案

# 返回 x 在 arr 中的索引,如果不存在返回 -1

def binarySearch (arr, l, r, x):

# 基本判断

if r >= l:

mid = int(l + (r - l)/2)

# 元素整好的中间位置

if arr[mid] == x:

return mid

# 元素小于中间位置的元素,只需要再比较左边的元素

elif arr[mid] > x:

return binarySearch(arr, l, mid-1, x)

# 元素大于中间位置的元素,只需要再比较右边的元素

else:

return binarySearch(arr, mid+1, r, x)

else:

# 不存在

return -1

# 测试数组

arr = [ 2, 3, 4, 10, 40 ]

x = 10

print('index',search(10,arr,0,len(lst1)-1))

# 函数调用

result = binarySearch(arr, 0, len(arr)-1, x)

if result != -1:

print ("元素在数组中的索引为%d" % result )

else:

print ("元素不在数组中")

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值