美文网首页
数据结构与算法python实现Chap1

数据结构与算法python实现Chap1

作者: 手捧樱花v | 来源:发表于2020-08-14 23:10 被阅读0次
    1. 计算学生GPA
    points = {'A+':4.0,'A':4.0,'B+':3.67}
    num_courses = 0
    total_score = 0
    done = False
    
    while not done:
        grade = input()
        if grade == '':
            done = True
        elif grade not in points:
            print("Unknown '{}' being ignored".format(grade))
        else:
            num_courses +=1
            total_score = points[grade]
    if num_courses > 0 :  # avoid division by zero
        print("your GPA is '{0:.3}'".format(total_score/num_courses))
    
    >>>print("'{0}','{1}','{0}'".format("hello","world")) 
    >>>hello world hello
    
    1. 如果对象的一个别名被赋值语句重新赋予了新的值,并不影响已存在的对象,而是给别名重新分配了存储对象

    2. 字符串检查是否以xx开头,return True/False,一些方法返回一个对象的状态信息,是胆识并不改变改状态,这些方法被成为访问器;其他方法,例如list类的sort方法,会改变一个对象的状态,这些方法被称为应用程序或更新方法

    response = "wertyuRIEJIJIJIEopasdfghjklzxcvbnm"
    a = response.lower().startswith('y')
    
    1. 两种实例化方式:通过调用类的构造函数;间接创建类的实例的方法

    2. 数值的字符串可以被int识别,默认情况下字符串必须使用十进制,若想识别十六进制的字符串则int('7f',16)表示,然而float('3.14')会提示valueError,float类不可变

    print(int('123'))
    >>> 123
    print(float('3.14')
    >>> ValueError: invalid literal
    
    1. 序列类型:list tuple str ,单个元素tuple需要加上都好,否则被识别为int/string...
    2. 创建空集合只能使用set() 因为{}会创建一个空字典,set无序不重复,set中不存在集合/列表
    >>> a = set(("hello",))
    >>> print(a)
    {'hello'}
    >>> a = set(("hello"))
    >>> print(a)
    {'l', 'o', 'e', 'h'}
    

    8.列表类操作+=和 = +的差别

    >>> a = 1
    >>> b = a
    >>> b += 5
    >>> b = b + 5
    >>> print(a)
    1
    >>> a = [1]
    >>> b = a
    >>> b += [2,3]
    >>> b = b + [5,6]
    >>> print(a)
    [1, 2, 3]
    
    1. 条件/循环语句每个条件都是布尔表达式,所以可以简写While True:
    2. 获取list中最大值(不使用内置函数)
    sakura = [1,3,23,5,6,7,8,333]
    biggest = sakura[0]
    for i in range(len(sakura)):
        if sakura[i] > biggest:
            biggest = sakura[i]
    print(biggest)
    
    1. continue会使当前迭代停止,但循环过程的后续迭代正常进行
    sakura = (1,3,23,5,6,7,8,333)
    for i in sakura:(过滤掉23)
        if i == 23:
            continue
        print(str(i)+"this is what i want")
    1this is what i want
    3this is what i want
    5this is what i want
    6this is what i want
    7this is what i want
    8this is what i want
    333this is what i want
    
    1. 函数:不用了解特定类的内容或该类的实例,sorted(data);方法:描述一个成员函数,在调用特定对象时使用面向对象的消息传递语法,data.sort();def作为函数的签名;每次调用函数时,python会创建一个专用的活动记录用来存储当前调用相关的信息,这个活动记录包括了命名空间,命名空间用于管理当前调用中局部作用域内所有的标识符
    2. 通常会对input结合split
    sakura = input ("enter seperate by spaces : ")
    pieces = sakura.split("")
    x = pieces[0]
    
    1. open:must have exactly one of create/read/write/append mode
      rw tell()位置=0 a模式在文末 fp.seek(偏移量,起始位置(0文件头/1当前/2文末)) fp.read(k)返回当前位置后k位
      在写文件时不会再尾部追加换行符
    fp = open('./sakura.txt','w')
    print(fp.tell())
    fp.seek(6,0)
    fp.write("leslie")
    # print(fp.read())
    fp.close()
    
    1. 抛出异常:异常如果没有捕获,可能会导致解释器停止运行,后端校验
      python3.8停用import collections
      抽象基类collections.Iterable包含所有确保支持for循环语法的python迭代容器类型(list/tuple/set) 若value不是一个迭代类型,尝试使用for循环会引发TypeError
    from collections.abc import Iterable
    def sqrt(x):
        if not isinstance(x,(int,float)): (第二个参数表示的所允许类型的元组)
            raise TypeError('x must be numeria')
        elif x < 0:
            raise ValueError('x cannot be negative')
    
    def summ(value):
        if not isinstance(value, Iterable):
            raise TypeError('parameter must be integer')
        total = 0
        for v in value:
            if not isinstance(v, (int, float)):
                raise TypeError('elements must be numeric')
            total += v
        return total
    
    print(summ([1,2,3,]))
            
    
    1. 捕捉异常: 使用try-expect而不是raise的想法是只要异常发生时,有一个处理问题的机制就可以了,try块后面会跟一个或多个except子句,优势是非特殊情况下高效运行,不需要多余的检查异常条件,然而在处理异常时,花费的时间更多
    try:
       age = int(input("enter your age: "))
       if age <= 0:
           print('your age must be positive')
    except(ValueError,EOFError):
       print('invalid response')
    

    try-expect两个特征: 允许最后一个except不加特定的错误类型来捕获一些异常;一个try语句允许有finally子句,总是会被执行,无论正常或异常,常用于清理工作,如关闭一个文件

    1. 迭代器对象,iter(obj)产生一个迭代器,同一个可迭代对象可创建多个迭代器,保存原始列表的当前索引,如果原始列表的内容在迭代器构造之后但在迭代完成之前被修改,迭代器将报告原始列表的更新内容
    sakura = [1,3,23,5,6,7,8,333]
    i = iter(sakura)
    print(type(i)) >>> <class 'list_iterator'>
    for i in iter(sakura):
        print(type(i)) >>> <class 'int'>
    

    iter返回一个对象的迭代器,对象迭代直接返回引用,打印出来时引用类型,for in就是打印迭代器的对象
    值类型: 对象本身不允许修改,数值的修改实际上是让变量指向了一个新的对象,包含: 字符串/元组/数值/本身不允许被修改
    引用类型: 对象本身可以修改,包含: 列表/字典/本身允许修改
    python还支持隐式迭代,调用range(1000)不是返回一个数字列表,而是返回一个可迭代的对象,惰性计算
    利用迭代器简单的创建元组或集合 list[range(10000)]

    1. python next(iterator,default[用于设置在没有下一个元素时返回该默认值,如果不设置,又没有下一个元素则会触发 StopIteration 异常])在 for 循环里,无需处理 StopIteration 异常,循环会正常结束。运用于:只计算需要的数,并且整个系列的数不需要一次性全部驻留在内存中,当结果不需要存储在内存中,生成器语法特别有优势
    2. 复合表达式:total = sum(k*k for k in range(1,n+1) if n > 0)
    3. 元组的自动打包 data = a,b,c,d ; return x,y ; 序列打包: a,b,c,d = range(7,11); 字典for x,y in {(7,2),(4,3)}

    相关文章

      网友评论

          本文标题:数据结构与算法python实现Chap1

          本文链接:https://www.haomeiwen.com/subject/yyondktx.html