1. 程式人生 > >Python學習之路-變數、字串、函式

Python學習之路-變數、字串、函式

目錄

變數和型別

條件判斷

迴圈控制

函式

變數和型別

基本變數型別

  • 整數
  • 浮點數
  • 字串
  • 布林值
  • 空值
  • 函式
  • 模組
  • 型別*
  • 自定義型別

變數定義
 變數儲存在記憶體中的值。這就意味著在建立變數時會在記憶體中開闢一個空間。
基於變數的資料型別,直譯器會分配指定記憶體,並決定什麼資料可以被儲存在記憶體中。
變數可以指定不同的資料型別,這些變數可以儲存整數,小數或字元。(弱型別)
變數賦值
 每個變數在使用前都必須賦值,變數賦值以後該變數才會被建立。(重要!!!)
等號(=)用來給變數賦值,等號(=)運算子左邊是一個變數名,等號(=)運算子右邊是儲存在變數中的值。

# -*- coding: utf-8 -*-


import string


# 基本型別
print(type(None))
print(type(True))
print(type(12345))
print(type(123.45))
print(type(1234.))
print(type('abc'))


# 容器型別
print(type([1, 2, 3, 'a', 'bc']))
print(type((1, 2, 3, 'abc')))
values = ['abc', 1, 2, 3.]
print(type(values[3]))
print(type(set(['a', 1, 2.])))
print(type({'a':123, 4:'bcd', 5:'efg'}))


# 函式
def func(): print(100)
print(type(func))


# 模組
print(type(string))


# 自定義型別與型別例項
class Cls: pass
print(type(Cls))
cls = Cls()
print(type(cls))


# 變數賦值
try:
    print(x)    # 變數必須先賦值再使用
except NameError:
    print("NameError: name 'x' is not defined")
x = 100
x = 'abcd'  # x的型別不受限制

常見字串處理

  • 去除空格及特殊符號:strip, lstrip, rstrip
  • 複製字串:str1 = str2
  • 連線字串
str2 += str1
new_str = str2 + str1
  • 查詢字串:pos = str1.index(str2)
  • 比較字串:cmp(str1, str2)
  • 字串長度:len(str)
  • 大小寫轉換
u_str = str.upper()
l_str = str.lower()
  • 首字母大寫:str.capitalize(); string.capword(str)
  • 分割與合併字串:split, splitlines, join
  • 型別轉換:int, float轉換
  • 格式化字串
  • 字串測試
str.startwith(prefix)	
str.endwith(suffix)
str.isalnum() # 是否全是字母和數字,並至少有一個字元。
str.isalpha() # 是否全是字母,並至少有一個字元。
str.isdigit() # 是否全是數字,並至少有一個字元。
str.isspace() # 是否全是空白字元,並至少有一個字元。
str.islower() # 字母是否全是小寫
str.isupper() # 字母是否全是大寫
str.istitle() # 首字母是否大寫
# -*- coding: utf-8 -*-


import string


# strip去除空格
s = ' abcd efg  '
print(s.strip())
print(s.lstrip())
print(s.rstrip())
print(s)


# 字串連線
print('abc_' + 'defg')
s = 'abcdefg'
s += '\nhijk'
print(str)


# 大寫小
s = 'abc defg'
print(s.upper())
print(s.upper().lower())
print(s.capitalize())


# 位置和比較
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)


# 分割和連線
s = 'abc,def,ghi'
print(s.split(','))
s = '123\n456\n789'
numbers = s.splitlines()
print(numbers)
print('-'.join(numbers))


# 常用判斷
s = 'abcdefg'
print(s.startswith('abc'))
print(s.endswith('efg'))
print('abcd1234'.isalnum())
print('\tabcd1234'.isalnum())
print('abcd'.isalpha())
print('12345'.isdigit())
print('  '.isspace())
print('acb125'.islower())
print('A1B2C'.isupper())
print('Hello world!'.istitle())


# 數字到字串
print(str(5))
print(str(5.))
print(str(-5.23))
print(int('1234'))
print(float('-23.456'))


# 格式化字串
print('Hello %s!' % 'world')
print('%d-%.2f-%s' % (4, -2.3, 'hello'))

條件判斷

真值判斷

if x == True:
if x:
if not x:

空值判斷

if x is None:
if not x:

比較

if a == b:
if a > b:
...
# -*- coding: utf-8 -*-


# if判斷
a = 100
b = 200
c = 300
if c == a:
    print(a)
elif c == b:
    print(b)
else:
    print(c)


# None的判斷
x = None
if x is None:
    print('x is None')
if not x:
    print('x is None')


# for迴圈
s = 0
for i in range(0, 101):
    s += i
print(s)


# while迴圈
s = 0
i = 0
while i <= 100:
    s += i
    i += 1
print(s)


# continue/pass/break
for i in range(0, 100):
    if i < 10:
        pass
    elif i < 30:
        continue
    elif i < 35:
        print(i)
    else:
        break

迴圈控制

for迴圈

for i in range(begin, end, steps): <=> for (i = begin; i < end; i += steps)

while迴圈
 while 條件判斷:
迴圈巢狀
迴圈控制

break
continue
pass

函式

函式定義格式

  • 預設引數
  • 可變引數:*args,自動組裝成tuple
  • 關鍵字引數:*args,自動組裝成dict
  • 命名關鍵字引數

函式呼叫

  • 函式名(引數名)
  • 模組名.函式名(引數名)
  • 帶引數名呼叫
# -*- coding: utf-8 -*-

# 函式定義和預設引數
def func(x, y = 500):
    print(x, y)

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

# 可變引數
def func(name, *numbers):
    print(name)
    print(numbers)

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

# 關鍵字引數
def func(name, **kvs):
    print(name)
    print(kvs)

func('Jack', china = 'Beijing', uk = 'London')

# 命名關鍵字引數
def func(*, china, uk): # *用於和普通引數做分割,*args一樣效果
    print(china, uk)

func(china = 'Beijing', uk = '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'})

# 遞迴的經典例子!
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))