首页 > 编程语言 > 详细

python基础2

时间:2021-03-17 00:19:36      阅读:47      评论:0      收藏:0      [点我收藏+]
  1. 函数应用

  1. 语法

 

 

def 函数名(参数列表):

"函数_文档"

执行的语句

 

如果没有执行语句可以使用pass

 

  1. 参数

  • 赋值:

    • 按顺序

    • 关键字:允许赋值的顺序和定义的顺序不一致

  • 默认值:定义函数可以给参数默认值

  • 不定长参数 *

    • 在参数前放置*

    • 通常放在参数的最后

  1. 全局变量和局部变量

定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域

  1. 练习

 

 

  1. 计算指定整数的阶乘: 5!=5*4*3*2*1

要求:

  1. 用户输入整数

  2. 使用函数

 

 

2。 猜数游戏

游戏规则: 随机产生四位数字   ABCD

然后让用户输入:四位的数字

根据位置进行判断: 如果位置对,数也对   1A,如果数字对1B

例如:随机产生的数字是: 1234

用户输入的数字是  1924       2A1B

用户输入的数字是  5678       0A0B

用户输入的数字是  4123       0A4B

用户输入的数字是 1234        恭喜答对了

要求用户只能猜10次,同时要求产生的随机数每个位置的数字不能相同,例如  1123 不合法的随机数

考虑使用函数开发

 

 

# def factorial(num):
# result=1
# if num<=2:
# return num
# for i in range(2,num+1):
# result*=i
# return result

def factorial(num):
if num==1:
return 1
else:
return num*factorial(num-1)#递归适用于数不多的

def main():
temp=int(input("输入:"))
rs=factorial(temp)
print("%d的阶乘结果是%d"%(temp,rs))

main()

import random
def randomList():
arr1=[1,2,3,4,5,6,7,8,9]
return random.sample(arr1,4)#随机不重复取4个

def compare(num,arr):
rs={}
rs["A"]=0
rs["B"]=0
for i in range(len(arr)):
temp=int(num[i])
if(temp==arr[i]):
rs["A"]+=1
elif temp in arr:
rs["B"]+=1
return rs

def main():
arr=randomList()#生成随机数
# num=input("请输入4位整数: ")
# rs=compare(num,arr)
i=0
rs={"A":0}
while i<10 and rs["A"]<4:
i+=1
num = input("请输入4位整数: ")
rs = compare(num, arr)
if (rs["A"] == 4):
print("恭喜!")
else:
print("%s:%dA%dB" % (num, rs["A"], rs["B"]))

if i>10 and rs["A"]<4:
print("很遗憾",arr)
main()
  1. 类和对象

  1. 面向对象技术简介

  • 类 用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。

  • 对象 对象是类的实例。通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

  • 类变量 变量在整个实例化的对象中是公用的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

  • 数据成员 类变量或者实例变量, 用于处理类及其实例对象的相关的数据。

  • 方法重写 如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

  • 局部变量 定义在方法中的变量,只作用于当前实例的类。

  • 实例变量 在类的声明中,属性是用变量来表示的。这种变量就称为实例变量,是在类声明的内部但是在类的其他成员方法之外声明的。

  • 继承 即一个派生类(derived class)继承基类(base class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。例如,有这样一个设计:一个Dog类型的对象派生自Animal类,这是模拟"是一个(is-a)"关系(例,Dog是一个Animal)。

  • 实例化 创建一个类的实例,类的具体对象。

  • 方法 类中定义的函数。

  1. 创建类

使用 class 语句来创建一个新类,class 之后为类的名称并以冒号结尾:

 

 

class 类名 :

‘类的帮助信息‘ #类文档字符串

class_suite #类体

 

  1. 实例化

 

 

变量=类名()

变量=类名(参数)

 

class Bases:

 

#构造方法

def __init__(self,name):

self.name=name

self.hp=100

self.power=10

def show(self):

print("hello")

 

 

t1=Bases("张三")

print(t1)

print(t1.name)

print(t1.hp)

print(t1.power)

t1.show()

 

三。 方法和属性

  1. 访问属性

  • 通过 . 访问

  • 通过函数访问

 

 

getatter(对象名,属性名) 访问对象属性

setatter(对象名,属性名,值)设置一个属性的值,如果属性不存在,则会创建一个新的属性

hasatter(对象名,属性名)检查一个属性是否存在

delatter(对象名,属性名)删除属性

 

  1. 类属性

类属性不属于任意一个对象

  • 自定义类变量

 

 

 

class Student:

number=0

def __init__(self,name):

self.name=name

Student.number+=1

 

stu1=Student("aa")

stu2=Student("cc")

stu3=Student("cc")

print(Student.number)

 

  • 内置类变量

  • _ _dict_ _ 类属性 (包含一个字典,由类的数据属性组成)

  • _ _doc_ _ 类的文档字符串

  • _ _name_ _ 类名

  • _ _module_ _ 类定义所在的模块

  • _ _bases_ _:类的所有父类构成的元素

 

  1. 方法

使用 def进行定义,第一个参数必须是self,在使用方法无需给self赋值

  1. 类方法

使用def进行定义,参数为cls, 使用@classmethod进行注解,使用类名进行调用

 

 

class Student:

number=0

def __init__(self,name):

self.name=name

Student.number+=1

@classmethod

def showNumber(self):

print(Student.number)

 

Student.showNumber()

 

  1. 私有方法和私有属性

以双_ _开头,私有属性或方法不能在类的外部被使用或直接访问

@property的用法与神奇之处 (装饰器),一旦给函数加上一个装饰器@property,调用函数的时候不用加括号就可以直接调用函数了

 

 

class Student:

def __init__(self,name,score):

self.name=name

self.__score=score

def show(self):

print(self.name,self.__score)

self.__hello()

@property

def score(self):

print(self.__score)

 

def setScore(self,score):

self.__score=score

 

def __hello(self):

print("hello")

 

stu1=Student("小明",59)

print(stu1.name)

# print(stu1.__score)

stu1.show()

#stu1.score()

stu1.score

 

 

四。 继承

  1. 语法

 

 

class 类名(父类名):

 

 

  1. 注意事项

  • 在创建子类的过程中,你需要手动调用父类的构造函数__init__来完成子类的构造。

  • 在子类中调用父类的方法时,需要加上父类的类名前缀,且需要带上self参数变量。比如SchoolMember.tell(self), 这个可以通过使用super关键词简化代码。

  • 如果子类调用了某个方法(如tell())或属性,Python会先在子类中找,如果找到了会直接调用。如果找不到才会去父类找。这为方法重写带来了便利。

五。重写

  1. 写法的重写

如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法:

 

 

class Bases:

def __init__(self,name):

self.name=name

def show(self):

print("bases show",self.name)

 

class Student(Bases):

def __init__(self,name,score):

Bases.__init__(self,name)

self.score=score

def say(self):

super().show()

 

def show(self):

print("student shwo ",self.name,self.score)

 

  1. 基础方法重写

  2. 技术分享图片

     

     

  1. 运算符重写

  2. # def show():
    # pass#占位

    # show()

    # def show(name,age,score=0):
    # print("%s,%d,%f"%(name,age,score))
    # show("xiaoming",20,66.6)
    #
    # show(age=28,name="zhangsan",score=89)
    # show(age=18,name="lisi")
    #
    # def conn(url,databasename,post=3306,user=‘root‘,pwd=‘root‘):
    # pass
    #不定长参数
    # def show(name,*score):
    # print("xingming",name)
    # for sc in score:
    # print("chengji",sc)#+两边必须都是字符串
    # # show(60,70,80,90,name="xiaoming")
    # show("lisi",90,60)
    # arr=int(input("输入一个整数"))
    # def jisuan(arr):
    # if arr==0 or arr==1:
    # return 1
    # else:
    # return (jisuan(arr-2)+jisuan(arr-1))
    #
    # print (jisuan(arr))

    # n=int(input("输入一个整数"))
    # def fib(n):
    # if n == 1:
    # return [1]
    # if n == 2:
    # return [1, 1]
    # fibs = [1, 1]
    # for i in range(2, n):
    # fibs.append(fibs[-1] + fibs[-2])
    # return fibs
    # print(fib(n))
    #创建类
    # class Bases:
    # def __init__(self,name):
    # self.name=name
    # self.power=100
    # def show(self):
    # print("hello")
    # #构造方法
    #
    # t1=Bases("zhangsan")
    # print(t1)
    # print(t1.name)
    # print(t1.power)
    # t1.show()
    #
    # delattr(t1,"name")
    # rs=hasattr(t1,"name")#boolean
    # print(rs)
    # setattr(t1,"name","lisi")#不存在添加
    # t1.a=10
    # print(t1)#也可以加属性
    # print(getattr(t1,"name"))

    #类属性
    class Student:
    number=0

    def __init__(self,name):
    self.name=name
    Student.number+=1
    @classmethod #类方法
    def showNumber(self):
    print(Student.number)
    def __del__(self):
    Student.number-=1

    #
    # stu1=Student("a")
    # stu2=Student("c")
    # print(Student.number)
    # Student.showNumber()
    # #内置类变量
    # print(Student.__bases__)
    # print(Student.__module__)

    class Student:
    def __init__(self,name,score): #构造方法
    self.name=name
    self.__score=score
    def show(self):
    print(self.name,self.__score)
    self.__hello()
    @property #装饰器 属性
    def score(self):
    print(self.__score)

    def __hello(self):
    print("hello")

    def setScore(self,score):
    self.__score=score
    stu1=Student("a",59)
    print(stu1.name)
    print(stu1.__score)#报错,私有属性
    stu1.show()
    stu1.score
    # class Bases:
    # def __init__(self,name):
    # self.name=name
    # def show(self):
    # print("bases show",self.name)
    #
    # class Student(Bases):
    # def __init__(self,name,score):
    # Bases.__init__(self,name)#必须有self
    # self.score=score
    #
    # def say(self):
    # super().show()#super()父类对象
    #
    # def show(self):
    # print("student",self.name,self.score)
    # b=Bases("a")
    # b.show()
    # s=Student("a",100)
    # s.show()
    # s.say()


    #运算符重写
    # class Student:
    # def __init__(self,name,score):
    # self.name=name
    # self.score=score
    # def __str__(self):
    # return "%s的成绩是%f"%(self.name,self.score)
    # def __add__(self, other):
    # return Student("%s+%s"%(self.name+other.name),self.score+other.score)
    # s1=Student("a",90)
    # s2=Student("b",90)
    # print(s1+s2)
    # print(s1)

六. 多继承

语法:

 

 

class 类名(父类名1,父类名2,。。。。):

 

你可以使用issubclass()或者isinstance()方法来检测。issubclass() - 布尔函数判断一个类是另一个类的子类或者子孙类,

语法:issubclass(sub,sup) isinstance(obj, Class) 布尔函数如果obj是Class类的实例对象或者是一个Class子类的实例对象则返回true。

 

 

python基础2

原文:https://www.cnblogs.com/yangyujia/p/14546215.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!