python編程從入門到實踐
變量和簡單數據類型
字符串相關
name.title () —— 以首字大寫的方式顯示每個單詞
name .lower () ——字符串改爲全部小寫
name .upper () ——字符串改爲全部大寫
\n 添加換行符
\n\t 換到下一行、並且在下一行開頭添加一個製表符
name.rstrip() ——可確保字符串name 末尾沒有空白
name.lstrip() ——確保name 開頭沒有空白
name.strip() ——確保name 兩端沒有空白
la = 'wait'
message = "happy" + str(age) + "rd Birthday!"
import this ——獲悉編寫優秀python的指導原則
列表簡介
# python 索引從0開始,而不是1
name[0].title()
#添加元素 將元素附到列表末尾
moto.append('elc')
#插入元素 任何位置
moto.insert(num, 'elc')
#刪除元素 del刪除後不使用、pop刪除後還能使用
del moto[num];
#pop()可刪除列表任何的元素,並讓你能夠接着使用
last = moto.pop(num) #意味着被刪除的元素,並且彈出
#根據值刪除元素、刪除後還能接着使用它的值
moto.remove('elc') #只能刪除第一個指定值
#使用sort()對列表進行永久性排序
cars.sort() #默認按照字母順序排列 Ex:reverse = True
#使用sorted()進行列表臨時排序
sorted(cars, reverse = True)
#反轉列表元素順序
cars.reverse ()
#函數len()可以獲悉列表長度
len(cars)
操作列表
#for循環
for magician in magicians:
print(magician) #打印時,會自動換行
#千萬要注意縮進形式
#創建數字列表
range(1,5) #從指定第一值開始,並在到達第二個指定值停止,不包含第二個
#從2開始不斷加2,知道達到或超過終值(11),末尾的2位步長
number = list(range(2,11,2))
ex:
squares = [] #!!!
for value in range(1,11)
square = value**2
squares.qppend(square)
print(squares)
ex:
squares = [value**2 for value in range(1,11)]
#需要指定索引0~3,這將輸出分別爲0、1、2的元素
print(player[0:3])
#最後三個元素
print(player[-3:])
#複製列表、即創造獨立副本
friend_foods = mu_food[:]
#元組、創造一系列 不可修改!的元素
dimensions = (200, 50) #利用圓括號,表示元素200、50
if語句
#在python中,檢查是否相等時區分大小寫
#所以一般只想檢查變量的值是,可將變量值轉化爲小寫 car.lower()
#檢查多個條件 可使用 and 或者 or 直接相連
#檢察特定值是否包含在列表中
‘mushrooms’ in requested_toppings
#檢查特定值是否不包含在列表中
if user not in banned_users:
print()
#if-else
if age <=18:
print()
else:
print()
#if-elif-else price = 5;則在打印的時候應該爲:str(price)
if age <4:
print()
elif age<10:
print()
else:
print()
#在一個列表中存儲數字1-9
numbers = list(range(1, 10));
for number in numbers:
print(str(number) + "th")
字典
#關於字典,注意大括號和中括號的使用
alien_0 = {'color': 'green ', 'point ': 5}
print (str (alien_0['points']))
#給字典中添加一組 'x_position' : 0
alien_0['x_position '] = 0 #注意此處中括號
#刪除某一組值
del alien_0['points'] #該值永遠消失
#使用字典來存儲用戶提供的數據或在編寫能自動生成大量鍵-值對的代碼時,通常都需要定義一個 空字典!!
#有類似對象組成的字典 注意書寫格式
favorite_language = {
'Jen ': 'python',
'sarah' : 'c',
'edward' : 'ruby',
}
# ‘age ’ 不等於 'age' 前一個含有空格
print(str(message['age ']))
## for key, value in user_0.items():
## if 'Erin' not infavourite_last.keys():
### 字典中values(), keys(), items()
>>> dict = { 1 : 2, 'a' : 'b', 'hello' : 'world' }
>>> dict.values() #返回的是 值列表
['b', 2, 'world']
>>> dict.keys() #返回的是 鍵列表
['a', 1, 'hello']
>>> dict.items() #返回的是 值-鍵對應
[('a', 'b'), (1, 2), ('hello', 'world')]
#若要按照順序遍歷 sorted()
for name in sorted(favorite_language.keys()):
#若爲了剔除重複項,則可以使用set()
for language in set(favourite_language.values()):
#在字典中存儲字典時的調用
for city, city_info in cities.items():
country = city_info['country'].title()
用戶輸入和while循環
#input()函數的調用
name = input("please enter your name:")
print("Hello, + name + "!")
#在字符串和數字進行比較時,不能直接比較。應該利用 int() 進行換算
# 例如在作比較時,可以使用: height = int(height) 然後進行 if height >36
# int(number) 從字符串轉化成數字 從用於 判斷時
# str(number) 從數字轉化成字符串 常用於 打印時
#在while執行之前一般都要進行中間變量初始化
active = True
while active:
#退出循環的兩種方式
1.while 的條件執行變成 False
2.break
# continue 用來返回循環開頭,並根據條件測試結果決定是否繼續執行 用法同break
#利用while進行重複元素刪除
while 'cat' in pets:
pets.remove('cat')
#使用用戶輸入來填充字典
responses[name] = response
函數
#關鍵字實參 以下兩者是相同的
describe_pet(animal_type = 'hamster', pet_name = 'harry')
describe_pet(,pet_name = 'harry', animal_type = 'hamster')
# 函數返回簡單值
def ____
return full_name.title()
#函數可返回任何類型的值 包括列表和字典等較複雜的數據結構
#傳遞列表
#禁止函數修改列表
function_name(list_name[:])
ex: print(unprinted_designs[:], completed_models)
#傳遞任意數量的實參
###形參名*toppings中的星號讓python創建一個名爲toppings的空元祖,並將收到的所有制均存在這個空元組中
def make_pizza(*toppings):
for topping in toppings:
print("-" + topping)
make_pizza('peperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')
#如果要讓函數接收不同類型的實參,必須在函數定義中將接納任意數量的形參放在最後
#使用任何數量的關鍵字實參
def build_profile(first, last, **user_info)
#導入整個模塊 pizza.py 和 making_pizza.py 應放在同一目錄下
#在making_pizza.py中,可以使用:
import pizza
#如果要從導入模塊中的特定函數則:
from module_nmae import function_name
from pizza import make_pizza
#使用as給函數指定別名
#例如給函數 make_pizza()指定了別名 mp()
from pizza import make_pizza as mp
from module_nmae ipmort function_name as fn
import pizza as p
#導入模塊中的所有函數 !!將pizza的所有函數複製到當前文件夾,但是慎用:因爲可能出現多個名稱相同的函數或變量,進而覆蓋函數
from pizza import *
##給形參制定默認值時,或者調用關鍵字實參,等號兩邊不要有空格
def function_name(parameter_0, parameter_1='default value')
類
#在python中,首字母大寫的名稱指的是 類;
#在命名中,我們通常可以認爲首字母大寫的名稱(Dog)指的是類;而小寫的名稱(my_dog)指的是根絕類創建的實例
class Dog():
#__init__()第一包括三個形參,其中self必不可少,而且位於其他所有之前
def __init__(self, name, age):
"""初始化屬性name和age"""
self.name = name
self.age = age
def sit(self):
"""模擬小狗被命令時蹲下"""
print(self.name.title() + " is now sitting.")
def roll_over(self):
"""模擬小狗被命令時打滾"""
print(self.name.title() + " rolled over")
#修改屬性的值
#1.直接修改屬性的值
#2.通過方法修改屬性的值 def update(self, mileage):
#3.通過方法對屬性的值進行遞增
#關於繼承
#子類繼承了其父類的所有屬性和方法,同時還可以定義自己的屬性和方法
#創建子類時,父類必須包含在當前文件中,且位於子類之前
class EledctricCar(Car):
#函數super()是一個特殊函數,幫助python將父類和子類關聯起來
#父類也成爲superclass, 名稱super因此出名
def __init__(self,make, model, year):
super().__init__(make, model, year)
#重寫父類的方法
#可在子類中定義,他與要重寫的父類方法同名,則python可忽視父類中的方法。
##!!將實例用作屬性
#在car.py中導入Car類,並創建其實例
from car import Car #car爲文件名,Car爲類名
##直接導入整個模塊 car.py
import car
my_beetle = car.Car('volkswagen', 'beetle', 2016)
#調用OrderedDict()來創建一個空的有序字典,並將其存儲在glossary中。
from collections import OrderedDict
glossary = OrderedDict()
文件和異常
#本章的技能可提高程序的適用性、可用性和穩定性
#讀取整個文件 注意要放在同一文件夾下
with open('pi_digits.txt') as file_object:
contents = file_object.read()
print(contents.rstrip()) #.rstrip 可以刪除字符串末尾的空白行
#.strip 可以刪除字符串每行左側的空格
#文件路徑
file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt'
with open(file_path) as file_object:
#對文件進行逐行讀取
with open('pi_digits.txt') as file_object:
for line in file_object:
print(line.rstrip())
#創建一個包含各行內容的列表, 並且使用文件的內容
filename = 'pi_30_digits.txt'
with open(filename) as file_object:
lines = file_object.readlines()
pi_string = ''
for line in lines:
pi_string += line.stip()
print(pi_string) ## print(pi_string[:52] + "...")
print(len(pi_string))
#打開文件時,可指定“都區模式('r')、寫入模式('w')、附加模式('a')或者可以同時讀取和寫入文件的模式('r+')”
#如果要給文件添加內容,而不是覆蓋原有的內容,可用附加模式('a')
#try-except 異常代碼處理
try:
except ZeroDivisionError:
else:
#處理FileNotFoundError 你要查找的其他文件、文件名可能不正確或者這個文件根本不存在
#方法split()以空格爲分隔符將字符串分拆成多個部分
words = contents.split()
num_words = len(words)
print(num_words)
#使用多個文件時,可用函數表示
def count_words(filename):
# pass 語句,可在代碼塊中使用來讓python什麼都不要做
#可以使用count()確定特定單詞或短語在字符串中出現了多少次
line.count('row')
line.lower().count('row')
#模塊json讓你能夠簡單的python數據結構轉儲在文件中,並在程序再次運行時加載該文件中的數據
#json.dump()用來存儲這組數字,, json.load()負責使用
~~~number_writer.py
import json
number = [2.35.7.11.13]
filename = 'numbers,json'
with open(filename, 'w') as f_obj:
json.dump(numbers, f_obj)
~~~num_reader.py
import json
filename = 'numbers.json'
with open(filename) as f_obj:
numbers = json.load(f_obj)
print(numbers)
測試代碼
#unittest提供了一系列代碼測試工具
#unittest類最有用的功能之一:斷言!!斷言使用來覈實得到的結果是否與期望的結果一樣
import unittest
class NameTestCase(unittest.TestCase):
def :
self.assertEqual(formatted_name, 'Woflgang Amadeus Mozart')
方法 | 用途 |
---|---|
assertEqual(a, b ) | 覈實 a == b |
assertNotEqual(a, b) | 覈實 a != b |
assertTrue(x) | 覈實x爲true |
assertFalse(x) | 覈實x爲false |
assertIn(item, list) | 覈實item在list中 |
assertNotIn(item, list) | 覈實item不在list中 |