亚洲免费在线-亚洲免费在线播放-亚洲免费在线观看-亚洲免费在线观看视频-亚洲免费在线看-亚洲免费在线视频

我的Python學(xué)習(xí)之路(一)

系統(tǒng) 2243 0

我的Python學(xué)習(xí)之路(一)

  • 跟著廖雪峰的Python教程學(xué)習(xí)
    • Task 1:輸入和輸出
    • Task 2:打印變量
    • Task 3:格式化輸出
    • Task 4:按要求打印tuple元素
    • Task 5:if分支練習(xí)
    • Task 6:循環(huán)練習(xí)
    • Task 7:調(diào)用函數(shù)
    • Task 8:定義函數(shù)
    • Task 9:可變參數(shù)
    • Task 10:遞歸函數(shù)實(shí)現(xiàn)
    • Task 11:切片練習(xí)
    • Task 12:迭代練習(xí)
    • Task 13: 列表生成式練習(xí)
    • Task 14:生成器練習(xí)
    • Task 15:map/reduce
    • Task 16:Filter練習(xí)
    • Task 17:sorted練習(xí)
    • Task 18:返回函數(shù)
    • Task 19:匿名函數(shù)
    • Task 20:裝飾器
    • Task 21:類和實(shí)例練習(xí)
    • Task 22: 訪問(wèn)限制練習(xí)
    • Task 23:實(shí)例屬性和類屬性
    • Task 24: @property練習(xí)
    • Task 25: 定制類練習(xí)
    • Task 26:枚舉類練習(xí)
    • Task 27:練習(xí)metaclass[ORM框架] **重要的高級(jí)知識(shí)點(diǎn)
    • Task 28:錯(cuò)誤處理練習(xí)
    • 明日練習(xí):調(diào)試 練習(xí)

跟著廖雪峰的Python教程學(xué)習(xí)

date:2019-06-25
從今天開(kāi)始,我開(kāi)始跟著廖雪峰的Python教程 學(xué)習(xí)Python,并將習(xí)題放到這兒,以便時(shí)時(shí)復(fù)習(xí)。

Task 1:輸入和輸出

            
              #!/usr/bin/env python3
# -*- codeing: utf-8 -*-
#bypython

print('1024*768=',1024*768)
print('1024*768=%10d'%(1024*768))
print('1024*768=%010d'%(1024*768))

            
          

Task 2:打印變量

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-
n = 123
f = 456.789
s1 = 'Hello, world'
s2 = 'Hello, \'Adam\''
s3 = r'Hello, "Bart"'
s4 = r'''Hello,
Lisa!'''

print('n=%d f=%.3f'%(n,f))
print(s1)
print('%s'%s2)
print(s3)
print(s4)
print(n,f,s1,s2,s3,s4)

            
          

Task 3:格式化輸出

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-
s1 = 72
s2 = 85

r = (s2-s1)/s1
print('%.1f%%' % r)

            
          

Task 4:按要求打印tuple元素

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-

L = [
    ['Apple', 'Google', 'Microsoft'],
    ['Java', 'Python', 'Ruby', 'PHP'],
    ['Adam', 'Bart', 'Lisa']
]

# 打印Apple:
print('%s'%L[0][0])
# 打印Python:
print('%s'%L[1][1])
# 打印Lisa:
print('%s'%L[2][2])

            
          

Task 5:if分支練習(xí)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-

height = 1.75
weight = 80.5

bmi = weight/height**2
if bmi < 18.5:
   print('過(guò)輕')
elif bmi < 25:
   print('正常')
elif bmi < 28:   
   print('過(guò)重')
elif bmi < 32:
   print('肥胖')
else:
   print('嚴(yán)重肥胖')

            
          

Task 6:循環(huán)練習(xí)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-
L = ['Bart', 'Lisa', 'Adam']

for name in L:
    print('Hello, %s!'%name)

i = 0
while i < len(L):
    print('Hello, %s!'%L[i])
    i = i+1

            
          

Task 7:調(diào)用函數(shù)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-

n1 = 255
n2 = 1000

print(hex(n1))
print(hex(n2))
print('0x%04X'%n1)
print('0x%04X'%n2)


            
          

Task 8:定義函數(shù)

請(qǐng)定義一個(gè)函數(shù)quadratic(a, b, c),接收3個(gè)參數(shù),返回一元二次方程 ax2+bx+c=0ax^2+bx+c=0ax2+bx+c=0 的兩個(gè)解。

提示:

一元二次方程的求根公式為:

x=?b±b2?4ac2ax=\frac{-b\pm\sqrt{b^2-4ac}}{2a}x=2a?b±b2?4ac

計(jì)算平方根可以調(diào)用math.sqrt()函數(shù):

            
              >>> import math
>>> math.sqrt(2)
1.4142135623730951

            
          
            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-
import math

def quadratic(a, b, c):
    if (b**2 - 4*a*c) < 0:
        return None,None
    return ( (-b+math.sqrt(b**2 - 4*a*c))/(2*a), (-b-math.sqrt(b**2 - 4*a*c))/(2*a))


            
          

Task 9:可變參數(shù)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-
def product(x, *y):
    pro = x
    for val in y:
       pro = pro*val
    return pro


            
          

Task 10:遞歸函數(shù)實(shí)現(xiàn)

由于之前漢諾塔的解決方案忘了,因此此函數(shù)未寫出來(lái)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-
def move(n, a, b, c):
    if n == 1:
        print(a, '-->', c)
    else:
        move(n-1,a,c,b)
        move(1,a,b,c)
        move(n-1,b,a,c)
        
#print("move(%d, %s,%s,%s)"%(n,a,b,c))

            
          

Task 11:切片練習(xí)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-
def trim(s):
  if len(s) == 0:
     return ''
  flg = False    
  if s[0] == ' ':
    s = s[1:]
    flg = True
  if s[-1] == ' ':
    s = s[:-1]
    flg = True
  if flg :
    s = trim(s)
  return s

            
          

Task 12:迭代練習(xí)

            
               #!/usr/bin/env python3
# -*- coding: utf-8 -*-
def findMinAndMax(L):
    min = None
    max = None
    for val in L:
       if min == None or val < min:
          min = val
       if max == None or val > max :
          max = val
    return (min, max)

            
          

Task 13: 列表生成式練習(xí)

            
               #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
L1 = ['Hello', 'World', 18, 'Apple', None]
L2 = [s.lower() for s in L1 if isinstance(s, str)]

            
          

Task 14:生成器練習(xí)

沒(méi)有得到最簡(jiǎn)方式,找到的最簡(jiǎn)方式

            
               #!/usr/bin/env python3
# -*- coding: utf-8 -*-

def triangles():
    p = [1] 
    while True:
       yield p  
       p =[1]+[p[x]+p[x+1] for x in range(len(p)-1)]+[1]
       

            
          

date:2019-6-26

Task 15:map/reduce

以下我認(rèn)為是最簡(jiǎn)潔的函數(shù),我自己由于對(duì)Python不熟,沒(méi)有想到用切片來(lái)做

            
               #!/usr/bin/env python3
# -*- coding: utf-8 -*-

def normalize(name):
    return name[0].upper() + name[1:].lower()
    #return name.capitalize() //首字母大寫函數(shù)
    
L1 = ['adam', 'LISA', 'barT']
L2 = list(map(normalize, L1))
print(L2)

            
          
            
               #!/usr/bin/env python3
# -*- coding: utf-8 -*-

def prod(L):
   def prod2(x, y):   
       return x*y
   return reduce(prod2, L)
   #return reduce(lambda x,y:x*y, L)

            
          
            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*
from functools import reduce

def str2float(s):
    #TODO:這里應(yīng)該判定全是數(shù)值

    index = s.find('.')
    if index == -1:
         return int(s) 
    fl = len(s[index+1:])    
    return int(s[:index])+int(s[index+1:])/(10**fl)   


            
          

Task 16:Filter練習(xí)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*

def is_palindrome(n):
    s = str(n)
    strlen = len(s)
    
    flg = True
    for i in range(0, strlen//2):
       if s[i] != s[strlen - i-1]:
           flg = False
           break
    return flg

            
          

date:2019-6-27

Task 17:sorted練習(xí)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-

L = [('Bob', 75), ('Adam', 92), ('Bart', 66), ('Lisa', 88)]
def by_name(t):
    return t[0]
def by_score(t):
    return t[1]
L2 = sorted(L, key=by_name)
print(L2)
L2 = sorted(L, key=by_score)
print(L2)

            
          

Task 18:返回函數(shù)

注:此節(jié)學(xué)習(xí)到作用域聲明,雖然閉包可以使用外層作用域變量,但是如果要修改外部變量的值,也是需要聲明變量是外層作用域或者全局變量的,如果修改的變量是list,則不用聲明
可使用 nonlocal 或者 global 關(guān)鍵字,推薦使用 nonlocal.并且如果使用的是global,內(nèi)部聲明也需要使用global

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-

def createCounter():
    i = 0
    def counter():
    nonlocal i
        i += 1
        return i
    return counter

            
          

Task 19:匿名函數(shù)

            
              # -*- coding: utf-8 -*-
def is_odd(n):
    return n % 2 == 1

L = list(filter(lambda n:n%2==1, range(1, 20)))

            
          

Task 20:裝飾器

附加知識(shí):時(shí)間庫(kù) 獲取當(dāng)前時(shí)間 time.time() 單位秒 結(jié)果為浮點(diǎn)數(shù)

            
              # -*- coding: utf-8 -*-
import time, functools
def metric(fn):
  @functools.wraps(fn)
  def wrapper(*args, **kw):
    t1 = time.time()*1000
    res = fn(*args, **kw)
    t2 = time.time()*1000
    print('%s executed in %s ms' % (fn.__name__, int(t2-t1)) )
    return res
  return wrapper

            
          

熟悉第三方工具 Anaconda+PyCharm

Task 21:類和實(shí)例練習(xí)

在PyCharm中,發(fā)現(xiàn)工具會(huì)嚴(yán)格檢查編碼規(guī)范,因此了解了以下編碼規(guī)范
另外如果不加括號(hào)(如下),不會(huì)調(diào)用__init__函數(shù)

            
              

class Student(object):

    count = 0

    def __init__(self):

        Student.count = Student.count + 1

        self._name = ''

print(Student.count)

a = Student()
# 錯(cuò)誤示范 這樣沒(méi)有調(diào)用_init__函數(shù)
a = Student

print(Student.count)

b = Student()

print(Student.count)


            
          

Task 22: 訪問(wèn)限制練習(xí)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Student(object):

    def __init__(self, name, gender):
        self.__name = name
        self.__gender = gender

    def get_gender(self):
        return self.__gender

    def set_gender(self, val):
        self.__gender = val

            
          

Task 23:實(shí)例屬性和類屬性

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Student(object):
    count = 0

    def __init__(self, name):
        self.name = name
        Student.count = Student.count + 1

            
          

Task 24: @property練習(xí)

            
              class Screen(object):

    def __init__(self):
        self.__width = 0
        self.__height = 0

    @property
    def width(self):
        return self.__width

    @width.setter
    def width(self, val):
        self.__width = val

    @property
    def height(self):
        return self.__height

    @height.setter
    def height(self, val):
        self.__height = val

    @property
    def resolution(self):
        return self.__width*self.__height

            
          

Task 25: 定制類練習(xí)

在本章中,由于在PyCharm中運(yùn)行網(wǎng)站實(shí)例出現(xiàn)了,在最后測(cè)試Fib for循環(huán)輸出時(shí)遇到死在其中不能退出,經(jīng)過(guò)調(diào)試發(fā)現(xiàn)不知道為什么,for循環(huán)沒(méi)有處理StopIteration異常,自己處理異常成功測(cè)試完成
求助得到,竟然是因?yàn)?使用了return異常,而不是raise異常,個(gè)人使用的PyCharm的沒(méi)有提示警告

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-

class Student(object):
    def __init__(self, name):
        self.__name = name

    def __str__(self):
        return 'Object:Student(name:%s)'%self.__name
    __repr__ = __str__


# 測(cè)試 __str__
print(Student('Michael'))
# 分割


class Fib(object):
    def __init__(self):
        self.__a, self.__b = 0, 1   # 初始化兩個(gè)計(jì)數(shù)器 a,b

    def __iter__(self):
        return self                 # 實(shí)例本身是迭代對(duì)象

    def __next__(self):
        self.__a, self.__b = self.__b, self.__a + self.__b
        if self.__a > 100:        # 設(shè)置退出循環(huán)的條件
        	raise StopIteration()
           # return StopIteration()
        return self.__a             # 返回下一個(gè)值

    def __getitem__(self, idx):
        __a, __b = 1, 1
        for x in range(idx):
            __a, __b = __b, __a + __b
        return __a


# 測(cè)試__iter__,__getitem__
for n in Fib():
    if isinstance(n, StopIteration):
        break
    else:
        print(n)

f = Fib()
print(f[0])
print(f[1])
print(f[2])
print(f[3])
print(f[4])


            
          

date:2019-7-6 由于出差一周,之前一直沒(méi)空學(xué)習(xí) 今天繼續(xù)

Task 26:枚舉類練習(xí)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-

from enum import Enum

Month = Enum('Month', ('Jan', 'Feb', 'Mar', 'Apr', 'May'
                       , 'Jun', 'Jul', 'Aug', 'Sep', 'Oct'
                       , 'Nov', 'Dec'))

for name, member in Month.__members__.items():
    print(name, '=>', member, ',', member.value)

from enum import unique

@unique
class Weekday(Enum):
    Sun = 0 #除了默認(rèn)值外也可以指定枚舉為對(duì)應(yīng)的值
    Mon = 1
    Tue = 2
    Wed = 3
    Thu = 4
    Fri = 5
    Sat = 6


day1 = Weekday.Mon
print(day1)
print(Weekday.Tue)
print(Weekday['Tue'])
print(Weekday.Tue.value)
print(day1 == Weekday.Mon.value)
print(day1 == Weekday.Tue.value)
print(Weekday(1))
print(day1 == Weekday(1))


class Gender(Enum):
    Male = 0
    Female = 1


class Student(object):
    def __init__(self, name, gender):
        self.name = name
        self.gender = gender


# 測(cè)試:
bart = Student('Bart', Gender.Male)
if bart.gender == Gender.Male:
    print('測(cè)試通過(guò)!')
else:
    print('測(cè)試失敗!')

            
          

Task 27:練習(xí)metaclass[ORM框架] **重要的高級(jí)知識(shí)點(diǎn)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-


class Field(object):
    def __init__(self, name, column_type):
        self.name = name
        self.column_type = column_type

    def __str__(self):
        return '<%s:%s>'%(self.name, self.column_type)


class StringField(Field):
    def __init__(self, name):
        super(StringField, self).__init__(name, 'varchar(100)')


class IntegerField(Field):
    def __init__(self, name):
        super(IntegerField, self).__init__(name, 'bigint')


class ModelMetaclass(type):
    def __new__(cls, name, bases, attrs):
        if name=='Model':
            return type.__new__(cls, name, bases, attrs)
        print('Fount Model:%s'%name)
        mappings = dict()
        for k, v in attrs.items():
            if isinstance(v, Field):
                print('Found mapping:%s ==> %s'%(k, v))
                mappings[k] = v
        for k in mappings.keys():
            attrs.pop(k)
        attrs['__mappings__'] = mappings #保存屬性和映射關(guān)系
        attrs['__table__'] = name #假設(shè)表名與類名一致
        return type.__new__(cls, name, bases, attrs)


class Model(dict, metaclass=ModelMetaclass):
    def __init__(self, **kv):
        super(Model, self).__init__(**kv)

    def __getattr__(self, key):
        try:
            return self[key]
        except KeyError:
            raise AttributeError(r"'Model' Obejct has no attribute '%s'"
                                 %key)

    def __setattr__(self, key, value):
        self[key] = value

    def save(self):
        fields = []
        params = []
        args = []
        for k, v in self.__mappings__.items():
            fields.append(v.name)
            params.append('?')
            args.append(getattr(self, k, None))
        sql = 'insert into %s(%s) value (%s)'\
              %(self.__table__, ','.join(fields), ','.join(params))
        print('SQL: %s'%sql)
        print('ARGS: %s'%str(args))


class User(Model):
    # 定義類的屬性到列的映射:
    id = IntegerField('id')
    name = StringField('username')
    email = StringField('email')
    password = StringField('password')


# 創(chuàng)建一個(gè)實(shí)例:
u = User(id=12345, name='Michael', email='test@orm.org', password='my-pwd')
# 保存到數(shù)據(jù)庫(kù):
u.save()


            
          

date:2019-7-7

Task 28:錯(cuò)誤處理練習(xí)

            
              #!/usr/bin/env python3
# -*- coding: utf-8 -*-

import logging
from functools import reduce


try:
    print('try...')
    r = 10/0
    print('result:', r)
except ZeroDivisionError as e:
    print('Except:', e)
finally:
    print('finally...')
print('END')

try:
    print('try...')
    r = 10/int('a')
    print('result:', r)
except ValueError as e:
    print('ValueError:', e)
except ZeroDivisionError as e:
    print('Except:', e)
else:
    print('no error')
finally:
    print('finally...')
print('END')

try:
    print('try...')
    r = 10/int('2')
    print('result:', r)
except ValueError as e:
    print('ValueError:', e)
except ZeroDivisionError as e:
    print('Except:', e)
else:
    print('no error')
finally:
    print('finally...')
print('END')


def foo(s):
    return 10 / int(s)


def bar(s):
    return foo(s) * 2


def main():
    try:
        bar('0')
    except Exception as e:
        logging.exception(e)


main()
print('END')


def str2num(s):
    return int(s)


def calc(exp):
    ss = exp.split('+')
    ns = map(str2num, ss)
    return reduce(lambda acc, x: acc + x, ns)


def lmain():
    r = calc('100 + 200 + 345')
    print('100 + 200 + 345 =', r)
    r = calc('99 + 88 + 7.6')
    print('99 + 88 + 7.6 =', r)


lmain()

            
          

明日練習(xí):調(diào)試 練習(xí)

調(diào)試 練習(xí)


更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主

微信掃碼或搜索:z360901061

微信掃一掃加我為好友

QQ號(hào)聯(lián)系: 360901061

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。

【本文對(duì)您有幫助就好】

您的支持是博主寫作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描上面二維碼支持博主2元、5元、10元、自定義金額等您想捐的金額吧,站長(zhǎng)會(huì)非常 感謝您的哦?。。?/p>

發(fā)表我的評(píng)論
最新評(píng)論 總共0條評(píng)論
主站蜘蛛池模板: 久在线视频| 精品国产成人a在线观看 | 九月丁香婷婷亚洲综合色 | 久久成年人视频 | 国产亚洲精品一区二区在线播放 | 欧美在线中文 | 亚洲成网站www久久九 | 日韩在线1 | 天天操比 | 久久精品国产视频在热 | 日本不卡在线观看免费v | 亚欧中文字幕 | 亚洲一区二区三区精品国产 | 7799国产精品久久久久99 | 久久毛片免费看一区二区三区 | 亚洲高清在线观看播放 | 久草热在线| 午夜伊人 | 中文字幕免费视频精品一 | 日本高清免费不卡毛片 | 日本又黄又爽又色的视频免费 | 日韩专区亚洲精品欧美专区 | 亚洲女精品一区二区三区 | 午夜美女久久久久爽久久 | 91在线短视频 | 久操视频在线播放 | 国内精品免费 | 免费观看a黄一级视频 | 好吊妞免费视频 | 亚洲黑人巨大videos0 | 色色网视频| 国产乱人伦精品一区二区 | 杨幂国产精品福利在线观看 | 一本大道高清香蕉中文大在线 | 久草视频免费在线观看 | 青青青国产在线视频 | 狠狠色噜狠狠狠狠色综合久 | xx另类性欧美 | 亚洲在线中文 | 久久红综合久久亚洲网色 | 日本亚欧乱色视频在线网站 |