1. 程式人生 > >python 常見字串與函式的用法

python 常見字串與函式的用法

目錄

strip去除空格

大小寫

位置和比較

分隔和連線

常用判斷

函式

函式定義與預設引數

可變引數

關鍵字引數

命名關鍵字引數

複雜情況

函式可以作為引數

遞迴

 


strip去除空格

s = ' abcd efg  '
print(s.strip())    #去除所有空格
print(s.lstrip())   #去除左邊空格
print(s.rstrip())   #去除右邊空格
print(s)
abcd efg
abcd efg  
 abcd efg
 abcd efg  

 

大小寫

s = 'abc defg'
print(s.upper())
print(s.upper().lower())
print(s.capitalize())  #首字母大寫
ABC DEFG
abc defg
Abc defg

 

位置和比較

s_1 = 'abcdefg'
s_2 = 'abdefgh'
print(s_1.index('bcd'))
try:
    print(s_1.index('bce'))
except ValueError:
    print('ValueError: substring not found')

print(s_1 == s_1)   # cmp函式被Python3移除了
print(s_1 > s_2)
print(s_2 > s_1)

1
ValueError: substring not found
True
False
True

s = ''
if not s:
    print('true')
else:
    print('flase') #空字串和flase是等價的


true

 

分隔和連線

s = 'abc,def,ghi'
print(s.split(','))
s = '123\n456\n789'
numbers = s.split('\n')   #按行分隔
numbers = s.splitlines()  #按行分隔
print(numbers)
print('-'.join(numbers))  

['abc', 'def', 'ghi']
['123', '456', '789']
123-456-789

 

常用判斷

s = 'abcdefg'
print(s.startswith('abc'))    #判斷是否以某個字串為開頭
print(s.endswith('efg'))      #判斷是否以某個字串為結尾
print('abcd1234'.isalnum())   #string中至少有一個字元,而且全是字母或者數字或者是字母和數字混合返回True,其他情況返回False
print('\tabcd1234'.isalnum()) 
print('abcd'.isalpha())       #string中至少有一個字元,而且全為字母,返回True,其他情況返回False
print('12345'.isdigit())      #輸入字串是否只由數字組成
print('  '.isspace())
print('acb125'.islower())
print('A1B2C'.isupper())
print('Hello world!'.istitle())  #檢測字串中所有的單詞拼寫首字母是否為大寫,且其他字母為小寫


True
True
True
False
True
True
True
True
True
False

 

函式

函式定義與預設引數

def func(x, y = 500):
    print(x, y)


func(150)
func(100, 200)
func(y = 300, x = 100)

150 500
100 200
100 300

可變引數

def func(name, *numbers):  #加一個星號,就表示告訴python,在處理後面所有引數的時候,把這些引數放到一個數組裡面
    print(name)
    print(numbers)
    print(type(numbers))


func('Tom', 1, 2, 3, 4)

Tom
(1, 2, 3, 4)
<class 'tuple'>        
#tuple - 元組,等價於只讀陣列,就是後面所有的引數都會作為一個數組

關鍵字引數

def func(name, **kvs):  # **意思是把它裝到 key/value 字典裡,轉化成字典了
    print(name)
    print(kvs)
    print(type(kvs))


func('Jack', china = 'Beijing', uk = 'London')
Jack
{'china': 'Beijing', 'uk': 'London'}
<class 'dict'>

命名關鍵字引數

def func(a,b,c,*, china, uk): # *用於和普通引數做分割,*args一樣效果
    print(china, uk)


func(1,2,3,china = 'Beijing', uk = 'London')  # *後面傳遞的引數必須傳入引數名

Beijing London

複雜情況

def func(a, b, c = 0, *args, **kvs):
    print(a, b, c, args, kvs)


func(1, 2)
func(1, 2, 3)
func(1, 2, 3, 'a', 'b')
func(1, 2, 3, 'a', 'b', china = 'Beijing', uk = 'London')
func(1, 2, 3, *('a', 'b'), **{'china':'Beijing', 'uk':'London'})  #提高程式碼的可讀性

1 2 0 () {}
1 2 3 () {}
1 2 3 ('a', 'b') {}
1 2 3 ('a', 'b') {'china': 'Beijing', 'uk': 'London'}
1 2 3 ('a', 'b') {'china': 'Beijing', 'uk': 'London'}
def my_print(*args):
    print(*args)  #傳變數時,在變數前加上*號,代表把這個陣列作為可變引數處理
    
my_print('x = ',100, 'y = ',200)

x =  100 y =  200

函式可以作為引數

def sum(x,y,p = None):
    s = x + y 
    if p:
        p(s)
    return 


sum(100,200)
sum(100,200,print)

300
def cmp(x,y,cp = None):
    if not cp:
        if x > y:
            return 1
        elif x < y:
            return -1
        else:
            return 0
    else:
        return cp(x,y)

def my_cp(x ,y):
    if x < y:
        return 1
    elif x == y:
        return 0
    else:
        return -1

print(cmp(100,200))
print(cmp(100,200,my_cp))

-1
1

 

遞迴

把一個大問題分解成同樣結構的小問題, 然後利用小問題的解得出大問題的解

def my_sum(i):
    if i < 0:
        raise ValueError
    elif i <=1:
        return i
    else:
        return i + my_sum(i - 1)  # my_sum(i - 1)是它更小範圍內的解,利用這個子問題的解得出當前的解

print(my_sum(1))
print(my_sum(2))
print(my_sum(3))
print(my_sum(10))
print(my_sum(100))

1
3
6
55
5050
# 遞迴的經典例子!
# 斐波那契數列 f(n) = f(n - 1) + f(n -2)
def fib(n):
    if n < 1:
        raise ValueError
    elif (n == 1) or (n == 2):
        return 1
    else:
        return fib(n - 1) + fib(n - 2)

print(fib(1))
print(fib(2))
print(fib(3))
print(fib(4))
print(fib(5))
print(fib(6))

1
1
2
3
5
8