Python 全域性作用域 區域性作用域及遞迴函式

2021-08-16 06:20:21 字數 3389 閱讀 1989

例1:累加

def

add(*args):

"""定義可變引數,累加

:param args: 可變引數

:return: 累加求和後的值

"""total = 0

for value in args:

total += value

return total

if __name__ == '__main__':

print(add(1,2,3,4,5,10))

a = 100

deff

():# 函式內的區域性變數,離開f()函式變數a是無法訪問的

# local variable

global a # 區域性變數中執行全域性變數

a = 200

print(a)

f()print(a)

小結:從區域性作用域到巢狀作用域再到全域性作用域,弄清楚每一步步驟~

例2:21根火柴,人先拿,機後拿,(1,4),最後拿到一根火柴的輸

from random import  randint

defmain

(): total = 21

while total > 0:

while

true:

num = int(input('拿幾根火柴:'))

if1<= num <= 4

and num <= total:

break

total -= num

if total > 0:

com = randint(1,min(4,total))

print('計算機拿走了%d根火柴'%(com))

total -= com

if total == 0 :

print('電腦拿到了最後一根火柴,你贏了!')

else:

print('你拿到了最後一根火柴,你輸了!')

if __name__ == '__main__':

main()

小結:其實可以做到,因為是人先拿,如果電腦每次都拿5-num次,那麼人鐵定會輸~這裡沒有寫,就當都是隨機取吧,更具有娛樂感~

例3:求階乘n! =n*(n - 1)!

def

f(n):

if n == 0

or n==1:

return

1return n*f(n-1)

if __name__ == '__main__':

# 在進入函式呼叫之前要儲存當前的執行現場

# 函式的執行現場是儲存在一種稱為棧(stack)的記憶體空間上

# 棧是一種先進後出(filo)的儲存機構

print(f(100))

小結:這裡用到遞迴函式,簡化了寫**的過程,幾句話就搞定階乘的計算。例4:累加
def

f(n):

if n == 1:

return

1return n+f(n-1)

if __name__ == '__main__':

print(f(100))

例5:10級樓梯,每次只能跨1-3級,共有多少種方法?
def

walk

(n):

if n < 0:

return

0elif n == 0:

return

1return walk(n-1) + walk(n - 2) + walk(n - 3)

if __name__ == '__main__':

print(walk(10))

小結:這兩個是遞迴函式的進一步運用,找到規律,巨集觀觀察,確定收斂條件,寫出遞迴公式,就可以寫出遞迴函式。
def

main

():# 不變字串

str1 = 'hello,world!'

print(len(str1)) # 長度

print(str1.capitalize()) # 首字母大寫

help(str1.capitalize)

print(str1.upper()) #全轉大寫

print(str1.lower()) #全轉小寫

print(str1.find('or')) #尋找字串

print(str1.find('****')) #尋找字串

# print(str1.index('or'))

# print(str1.index('****'))

print(str1.startswith('he'))

print(str1.endswith('!'))

print(str1.center(50,'*'))

print(str1.rjust(50,'#'))

print(str1.ljust(50,'$'))

str2 = 'abc123456'

print(str2[2]) # 下標運算

print(str2[2:5]) # 切片

print(str2[-1:-3:-1]) # '-'方向

print(str2[-3:-1])

print(str2[2:])

print(str2[2::2])

print(str2[:])

print(str2[::2])

print(str2[::-1])

print(str2.isdecimal()) # 判斷字串中是否全是數字

print(str2.isalpha()) # 判斷字串中是否全是字母

print(str2.isalnum()) # 判斷字串中是否全為字母或數字

str3 = ' [email protected] '

print(str3.strip()) #去掉左右兩邊的空格

if __name__ == '__main__':

main()

例6:字串跑馬燈
import os

import time

defmain

(): str4 = '歡迎來到千峰大世界~~~~~~~~'

while

true:

os.system('cls')

print(str4)

time.sleep(0.5)

str4 = str4[1:]+ str4[0]

if __name__ == '__main__':

main()

小結:運用字串以及命令視窗清除的函式,實現跑馬燈的效果~

Python作用域 全域性作用域 區域性作用域

在python中,每個函式都會建立乙個作用域。pythonistas也可能稱函式擁有它們自己的命名空間 namespace 這意味著當在函式體裡遇到變數名 時,python首先在該函式的命名空間中查詢,python包含了一些讓我們檢視命名空間的函式。讓我們寫乙個簡單的函式來探查一下local和glo...

javaScript全域性作用域和區域性作用域

1.全域性作用域 1 最外層函式和最外層函式外通過var來定義的變數 全域性變數 全域性函式 2 在函式內部不通過var定義的變數也稱為全域性變數 2.在es5中函式是區分全域性和區域性唯一的 塊 1 在函式內通過var來定義的變數,以及內部定義的函式 2 函式的引數具有區域性作用域 functio...

作用域,區域性與全域性變數

區域性變數 下圖中畫紅色的框為區域性變數,藍色框為全域性變數。不管區域性變數怎麼變,不會影響到全域性變數的值。只限於字串,數字等等簡單的變數 區域性變數的作用域只侷限於函式之內,在函式之外,不可以引用到區域性變數。在函式裡可以呼叫全域性變數,也可以賦值,但是不會對全域性變數有任何影響。只限於字串,數...