zoukankan      html  css  js  c++  java
  • [Python日记-3] input-while循环-函数-类

      今天学的就没有昨天痛苦,上升了一个高度,重新了解了面向对象编程。刚接触的时候正好是面向对象这个概念刚兴起的时候,当时觉得也不过如此,没想到站这么快。世界之快,不过白驹过隙。抓住发展的尾巴,upup。


    1. 用户输入

      input(“String”),作用是向显示器输出String,并获取用户输入,保存为字符串。  #(Python2.7中:raw_input())

      int(),用以将数字的字符串表示转换为数值表示,便于计算与比较。

      %,求模运算符,将两个数相除并返回余数。常用来计算奇偶数,也用来控制循环。


    2. while循环

      for循环用于针对集合中的每一个元素的代码块,而while循环不断地运行,直到指定条件不满足为止。

      while语句中只需检查标志的当前值是否为True,并将所有测试(包括将标志设置为False的事件)都放在其他地方,从而让程序变得更为简洁。

      

      2.1. 循环中的控制语句

        break:立刻退出任何循环,不再运行循环中余下的代码。

        continue:返回循环开头,并根据条件测试结果决定是否继续执行。

      2.2. while循环的功能

        2.2.1 在列表之间移动元素

        2.2.2 删除包含特定值的所有列表元素

        2.2.3 使用用户输入来填充字典

    #验证每个用户,并将经过验证的列表移到已验证列表中,直到没有未验证用户为止。
    while unconfirmed_users:
        current_user = unconfirmed_users.pop()
        print("Verifying user:"+current_user.title())
        confirmed_users.append(current_user)
    
    #删除列表中的特定元素
    while "cat" in pets:
        pets.remove("cat")
    
    #设置一个标志,指出用户输入是否继续
    responses = {}
    polling_active = True
    while polling_active:
        name = input("your name?")
        response = input("your response?")
        responses[name] = response
    #询问是否继续
        repeat = imput("continue?(y/n)")
        if repeat == 'n':
            polling_active = False
    #skip

    3. 函数

    def func(val):
        """函数注解"""
        run_code
        return n

      其中的函数注解被称为文档字符串(docstring)的部分,描述函数是做什么的。文档字符串用三引号括起,Python使用它们来生成有关程序中函数的文档。

      上述代码中的定义的函数func包括形参val,和返回值n,这些都是可选的,并非必要。

      

      鉴于函数定义时可能包括多个形参,因此函数调用中也可能包含多个实参,向函数传递实参的方式有很多。

        1. 位置实参:要求实参与形参顺序相同。

        2. 关键字实参:其中每个实参都有变量名和值组成,还可以使用列表和字典。

        3. 同时可以在函数定义语句中,给形参设定默认值,这样没有获得实参传递的形参会使用默认值进行运算。

    #关键词实参传递
    #与顺序无关,且等号两边无空格
    describe_pet(animal_type='hamster', pet='harry')
    
    #给形参设定默认值
    def describe_pet(pet_name, animal_type='dog'):

      其中函数接收实参的类型有很多,可以是数字,字符,列表,元组,字典等等复合形式。

      在传递列表时,如要禁止函数所做的任何修改影响列表本身,可以将列表的副本传递给函数,如下:

    #切片表示法[:]创建列表副本
    function_name(list_name[:])

      函数可返回任何类型的值,包括列表和字典等较复杂的数据结构。

    def build_person(first_name, last_name, age=''):
        """"返回一个字典,其中包含有关一个人的信息"""
        person = {'first': first_name, 'last': last_name}
        if age:
            person['age'] = age
        return person

      传递任意数量的实参

    • *val_name让Python创建一个名为val_name的空数组,并将所有收到的值都封装到这个元组中。
    • **user_info是的Python创建一个空字典,并将收到的所有“键-值对”都封装到这个字典中。在这个函数中,可以像访问其他字典那样访问user_info中的键-值对。

      注意:

      如果要让函数接收不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。Python先匹配位置实参和关键字实参,再将剩下的实参收集到最户一个形参中。

      将函数储存在模块中

      通过将函数存储在独立的文件中(.py),可隐藏程序代码的细节,将重点放在程序的高层逻辑上。还可以提高函数的重用。同时,将函数存储在独立文件中后,可与其他程序员共享这些文件而不是整个程序。

      要让函数是可导入的,得首先创建模块。模块式扩展名为.py的文件,包含要导入到程序中的代码。即将def函数定义保存到外部独立的py文件。

      

      函数导入方法:

      

    from module import *
    from module import funcotion
    from module import function as func
    
    import module as mod
    from module import func0, func1, func2
    
    #将函数和数据整洁的封装起来,让你能灵活高效地使用它们

    4. 类

      面向对象编程,类定义了一大类对象都有的通用行为。基于类创建对象被称为实例化,面向对象,面向现实世界。有点A/D转换的意思。

      建立个Dog类

    class Dog():
        """一次模拟小狗的简单demo"""
        def __init__(self, name, age):
            """初始化属性name和age"""
            self.name = name
            self.age = age
        def sit(self):
            """模拟小狗被命令时蹲下"""
            print(self.name.title()+" is now sitting.")
        def roll_over(self):
            """模拟小狗被命令时打滚"""
            print(self.name.title()+" rolled pver!")

      __init__()定义中包含三个形参:self、name、age。形参self必不可少,还必须位于其他形参的前面。因为Python调用__init__()这个方法来创建Dog实例时,将自动传入实参self。每个与类相关联的方法调用都自动传递实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。

      我们创建Dog实例时,Python会调用Dog类的方法__init__()。我们将通过实参向Dog()传递名字和年龄,self会自动传递,因此我们不需要传递它。每当我们根据Dog类创建实例时,都只需给最后两个形参(name,age)提供值。

      可以给属性指定默认值,来提高对象的丰富度。

      同时创建实例后,尽量不要直接显式修改某属性的值,通过方法来实现对值的修改和递增操作。

    class Car():
        --skip--
        def update_odometer(self, mileage):
            """
            将里程表读数设置为指定的值
            禁止将里程表读数往回调
            """
            if mileage >= self.odometer_reading:   
                self.odometer_reading = mileage
            else:
                print("You can't roll back an odometer!")

    继承

      一个类继承另一个类时,它将自动获得另一个类的所有属性和方法;原有的类称为父类。新类称为子类。子类继承了其父类的所有属性和方法,同时可以定义自己的属性和方法。

    class Car():
        --skip--
    class ElectricCar(Car):
        """电动汽车的独特之处"""
        def __init__(self, make, model, year):
            """初始化父类的属性"""
            super().__init__(make, model, year)

      super()是一个特殊的函数,帮助Python将父类和子类关联起来。这行代让Python调用ElectricCar的父类的方法__init__(),让ElectricCar实例包含父类的所有属性。父类也称为超类(superclass)。

    重写父类方法:

      在子类中定义与父类方法同名的方法,这样Python就不会考虑这个父类方法,而只关注于你在子类中定义的相应方法。

    实例用作属性:

      即将一些属性和方法放到一个新的类中,包含在原始的类下,并且没有继承关系。

    class Car():
        --snip--
    class Battery():
        """模拟电动车电瓶"""
        def __init()__(self, battery_size=70):
            """初始化电瓶的属性"""
            self.battery_size = battery_size
        def describe_battery(self):
            """显示电瓶容量"""
            print("This car has a "+str(self.battey_size)+"-kWh battery.")

    模拟实物:

      活用类会让你进入程序员的另一个境界:解决上述问题时,你从较高的逻辑层面(而不是语法层面)考虑;你考虑的不是Python,而是如何用代码来表示实物。到了这种境界后,你经常会发现,现实世界的建模方法没有对错之分。有些方法的效率更高,但要找出效率最高的表示法,需要经过一定的实践。

    导入类:

      下面实例为一个汽车的实例:

    """一个可用于表示汽车的类"""
    
    class Car():
        """一次模拟汽车的简单尝试"""
        def __init__(self, make, model, year):
            """初始化描述汽车的属性"""
            self.make = make
            self.model = model
            self.year = year
            self.odometer_reading = 0
        def get_descriptive_name(self):
            """返回整洁的描述性名称"""
            long_name = str(self.year)+' '+self.make+' '+self.model
            return long_name.title()
        def read_odometer(self, mileage):
            """
            将里程表读数设置为指定的值
            拒绝将里程表往回拨
            """
            if mileage >= self.odometer_reading:
                self.odometer_reading = mileage
            eles:
                print('You can't roll back an odometer!')
        def increment_odometer(self, miles):
            """将里程表读数增加指定的量"""
            self.odometer_reading+=miles

      类的导入类似函数和库文件的导入,同时支持类的定义中使用外部导入的别的类。


    小结:

      今天学的很开心,花了两个多小时的时间来整理笔记,有点累,但也有收获。

      以后代码要在Pycharm中编写、运行,这blog的代码编辑器真的费眼。

  • 相关阅读:
    js获取宽和高
    弹出一个登录层,并对登录进行校验
    存储过程事务处理
    C# 冒泡算法
    正则表达式30分钟入门教程
    生成树的两种递归方式
    (转)再说ActionMessages类及其用法
    java.io.IOException:stream closed 异常的原因及处理
    log4j学习
    struts1.x的国际化
  • 原文地址:https://www.cnblogs.com/vilogy/p/12275973.html
Copyright © 2011-2022 走看看