python自學篇九[ 函數(三):變量作用域+ATM+5個小練習]

python基礎系列:
python自學篇一[ Anaconda3安裝 ]
python自學篇二[ pycharm安裝及使用 ]
python自學篇三[ 判斷語句if的使用 ]
python自學篇四[ 基本數據類型和字符串常用處理 ]
python自學篇五[ 列表 ]
python自學篇六[ 元組 ]
python自學篇七[ 字典+深拷貝與淺拷貝 ]描述
python自學篇八[ 循環:while+for+pass+range()+推導式 ]
python自學篇九[ 函數(一):參數+對象 ]
python自學篇九[ 函數(二):返回值return+yield+迭代器+生成器 ]
python自學篇九[ 函數(三):變量作用域+ATM+5個小練習 ]
python自學篇九[ 函數(四):遞歸函數+匿名函數+內置函數+高階函數 ]
python自學篇十[ 面向對象 (一) :面向對象概念+定義類+練習一]
python自學篇十[ 面向對象 (二) :繼承+多繼承+類屬性+實例屬性]
python自學篇十[ 面向對象 (三) :訪問限制+類方法+靜態方法]
python自學篇十[ 面向對象 (四) :王者榮耀小遊戲+模擬一個簡單的銀行進行業務辦理的類]
python自學篇十一[ 模塊簡介+模塊製作+dir()函數+標準模塊+包]
python自學篇十二[ 文件:打開+讀取+寫入+3個習題]

變量的作用域

  • 個程序的所有的變量並不是在哪個位置都可以訪問的。訪問權限決定於這個變量是在哪裏賦值的。

  • 定義在函數內部的變量擁有一個局部作用域,定義在函數外的擁有全局作用域

  • 變量的作用域決定了在哪一部分程序你可以訪問哪個特定的變量名稱。兩種最基本的變量作用域如下:

局部變量:聲明在函數內部的變量是局部變量,局部變量的作用於只在於函數中,外部無法使用

  • 不同的函數,可以定義相同的名字的局部變量,但是各用個的不會產生影響

全局變量:聲明在函數外部的變量,定義在函數外的擁有全局作用域

  • 對於可變類型的全局變量來說,要在函數中修改可以不使用global聲明
  • 對於不可變類型的全局變量來說,要在函數中修改需要global聲明
  • 函數內部修改全局變量需要使用grobal關鍵字聲明
global 變量名

函數習題

ATM取款機

  • 第一個方法(世界複雜的比第二個大):
'''
    ATM取款機
'''
    #1.登錄驗證
def login(password):
    pwd='88888888'#初始密碼88888888
    if password==pwd:
        return True
    else:
        return False

    #金額驗證
def checkmoney(money):
    if money.isdigit():
        if int(money)%100==0 and 0<= int(money) <=1000:
            return money
        else:
            return False
    else:
        return False

    #交易完成
def main():
    for i in range(3):
        password=input('請輸入用戶密碼:')
        if login(password):
            money=input('請輸入金額:')
            if checkmoney(money):
                print('交易成功,取出:%s元'%money)
            else:
                print('金額輸入錯誤!')
            break
        else:
            print('密碼輸入錯誤')
main()
  • 第二個方法(時間複雜度小):
#登錄驗證
def login(passwd):
    pwd = '888888'
    if passwd == pwd:
        return True
    else:
        return False

#2.金額驗證
def checkMoney(money):
    if money.isdigit():
        if int(money) % 100 ==0 and 0<= int(money) <=1000:
            return money
        else:
            return False
    else:
        return False

#業務邏輯寫到主程序當中
def main():
    #1.登錄驗證
    for i in range(3):
        passwd = input('請輸入密碼:')
        if passwd == 'n':
            break
        if login(passwd):
            # 2.金額驗證
            while True:
                money= input('請輸入金額:')
                money = checkMoney(money)
                if money :
                    print('成功取出%s元'%money)
                    break
                else:
                    print('輸入的金額有誤!請重新輸入')
            # 3.交易完成
            print('交易完成')
        else:
            if i == 2:
                print('您連續三次密碼有誤,賬號已凍結!')
                break
            print('密碼有誤')

main()
  • 1.計算傳入字符串的個數
def getLen(s):
    if isinstance(s,str): #args1: 數據 args2:數據類型
        return  len(s)
    else:
        return '類型錯誤'
print('請輸入一個字符串:')
num = getLen(input())
print(num)
  • 結果
請輸入一個字符串:
jhgydjlkjkkjhgiehsgpgvoihsg
27
  • 2.判斷用戶傳入的字符串、列表、元組長度是否大於5
def getLen2(args):
    if isinstance(args,(str,list,tuple)):
        if len(args) > 5:
            print('傳入的對象長度大於5')
        else:
            print('傳入的對象長度小於5')
    else:
        print('類型有誤')

getLen2(['a','b',1,2])

結果:

傳入的對象長度小於5
  • 3.寫入不定個數的字符串拼接第一個和最後一個字符串
def getStr(*args):
    return args[0]+args[-1]

print(getStr('fafafaf','2','lkjkjhkjh'))

結果:

fafafaflkjkjhkjh
  • 4.傳入多個參數,以list返回
def getList(*args):#*args用於接收多個參數
    li = []#初始化一個列表
    for i in args:#遍歷args
        li.append(i)#把每一個args中的參數加入到列表中
    return li

list01 = getList(1,2,3,4,5)
print(list01

結果:

[1, 2, 3, 4, 5]
  • 5.定義一個函數,輸入不定個數的數字,返回所有數字的和
def getSum(*args):
    x = 0
    for i in args:
        x+=i
    return x

num = getSum(1,2,3,4,5)
print(num)

結果:

15
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章