Python学习笔记

2.3.1使用方法修改字符串的大小写
name = "ada lovelace" 
print(name.title())
title()以首字母大写的方式显示每个单词
name.upper()
name.lower()


2.3.2合并(拼接)字符串
Python使用加号(+)来合并字符串
2.3.3使用制表符或换行符来添加空白
字符串中添加制表符,可使用字符组合\t
添加换行符,可使用字符组合\n
2.3.4删除空白
要确保字符串末尾没有空白,可使用方法rstrip()。
左删除lstrip()和两边删除strip()
2.4.3使用函数str()避免类型错误
age = 23 
message = "Happy " + str(age) + "rd Birthday!" 
在Python 2中,除法中,务必确保至少有一个操作数为浮点数


motorcycles = ['honda', 'yamaha', 'suzuki'] 
3.1.1访问列表元素
通过将索引指定为-1,可让Python返回最后一个列表元素:motorcycles[-1]
3.2.2在列表中添加元素   列表末尾append 


motorcycles.append('ducati') 
使用方法insert()可在列表的任何位置添加新元素
motorcycles.insert(1, 'ducati') 
3.2.3从列表中删除元素 del+..
1. 使用del语句删除元素
del motorcycles[2] 
2. 使用方法pop()删除元素 .pop() 
方法pop()可删除列表末尾的元素,并让你能够接着使用它
popped_motorcycle = motorcycles.pop() 
print(motorcycles) #['honda', 'yamaha']
print(popped_motorcycle) #suzuki
3. 弹出列表中任何位置处的元素 .pop(0) 
first_owned = motorcycles.pop(0) 
4. 根据值删除元素 remove
motorcycles.remove('ducati')


3.3.1 使用方法 sort()对列表进行永久性排序
反序 cars.sort(reverse=True)
3.3.2 使用函数 sorted()对列表进行临时排序
print(sorted(cars))
临时反序 也可向函数sorted()传递参数reverse=True。
3.3.3 倒着打印列表
cars.reverse()
3.3.4 确定列表的长度len(cars)

4.1 遍历整个列表 for ... in ... :
for magician in magicians:
在for循环后面,没有缩进的代码都只执行一次,而不会重复执行。

4.3 创建数值列表
4.3.1 使用函数 range()
for value in range(1,5):
print(value)
4.3.2 使用 range()创建数字列表  使用函数list()将range()的结果直接转换为列表
numbers = list(range(1,6))
两个星号(**)表示乘方运算


4.3.3 对数字列表执行简单的统计计算
digits = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
min(digits) max(digits) sum(digits)
4.3.4 列表解析
squares = [value**2 for value in range(1,11)]

4.4使用列表的一部分
4.4.1切片
指定索引0~3,这将输出分别为0、1和2的元素。
指定1-3  print(players[1:4])
始于开头print(players[:4])
终于最后print(players[2:]) 
最后三名队员print(players[-3:])
4.4.2遍历切片
for player in players[:3]: 
print(player.title())
4.4.3复制列表
friend_foods = my_foods[:] 
不用切片时,直接赋值,则将类似C里面的索引或指针。。


4.5元组
4.5.1定义元组   不可变的列表被称为元组
dimensions = (200, 50) 
4.5.2遍历元组中的所有值
4.5.3修改元组变量   重新定义整个元组


5.1if语句   分号不可漏
if car == 'bmw':
5.2.5检查多个条件
1. 使用and检查多个条件;2 使用or检查多个条件
5.2.6检查特定值是否包含在列表中
要判断特定的值是否已包含在列表中,可使用关键字in
5.2.7检查特定值是否不包含在列表中 Not in
5.3.3 if-elif-else结构
5.4 使用 if 语句处理列表
5.4.2 确定列表不是空的
requested_toppings = []
if requested_toppings:
....
5.5 设置 if 语句的格式


6.1 一个简单的字典
alien_0 = {'color': 'green', 'points': 5}
print(alien_0['color'])
print(alien_0['points'])
6.2 使用字典
字典是一系列键—值对
键—值对是两个相关联的值。指定键时, Python将返回与之相关联的值。键和值之间用冒号分隔,而键—值对之间用逗号分隔。
6.2.1 访问字典中的值
要获取与键相关联的值,可依次指定字典名和放在方括号内的键
6.2.2 添加键—值对
字典是一种动态结构,可随时在其中添加键—值对。要添加键—值对,可依次指定字典名、用方括号括起的键和相关联的值
Python不关心键—值对的添加顺序,而只关心键和值之间的关联关系。
6.2.3 先创建一个空字典
alien_0 = {}
alien_0['color'] = 'green'
alien_0['points'] = 5
6.2.4修改字典中的值
alien_0['color'] = 'yellow'  
6.2.5删除键—值对
使用del语句时,必须指定字典名和要删除的键。
del alien_0['color']
6.3遍历字典
Python不关心键—值对的存储顺序,而只跟踪键和值之间的关联关系。
6.3.1遍历所有的键—值对
for k, v in user_0.items():
6.3.2遍历字典中的所有键
for name in favorite_languages.keys(): #使用方法keys()可让代码更容易理解
print(name.title())
6.3.3按顺序遍历字典中的所有键 函数sorted()
for name in sorted(favorite_languages.keys()):
6.3.4遍历字典中的所有值
for language in sorted(favorite_languages.values()):
通过对包含重复元素的列表调用set(),可让Python找出列表中独一无二的元素,并使用这些元素来创建一个集合
for language in set(favorite_languages.values()): 
6.4.1字典列表
alien_0 = {'color': 'green', 'points': 5} 
alien_1 = {'color': 'yellow', 'points': 10} 
alien_2 = {'color': 'red', 'points': 15} 
aliens = [alien_0, alien_1, alien_2] 
for alien in aliens: 
print(alien)
6.4.2在字典中存储列表
pizza = { 
'crust': 'thick', 
'toppings': ['mushrooms', 'extra cheese'], 



for topping in pizza['toppings']: 
print("\t" + topping) 
6.4.3在字典中存储字典
users = { 
'aeinstein': { 
'first': 'albert', 
'last': 'einstein', 
'location': 'princeton', 
}, 
'mcurie': { 
'first': 'marie', 
'last': 'curie', 
'location': 'paris', 
}, 
}


7.1 函数 input()的工作原理
函数int()字符转换数字
7.1.4 在 Python 2.7 中获取输入
函数raw_input()来提示用户输入
7.2.1 使用 while 循环
current_number = 1
while current_number <= 5:
print(current_number)
current_number += 1
7.2 while循环简介
current_number = 1 
while current_number <= 5: 
print(current_number) 
current_number += 1 #不能是++
7.2.4使用break退出循环
7.2.5在循环中使用continue
7.3.1在列表之间移动元素
7.3.2删除包含特定值的所有列表元素
pets =['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat'] 
while 'cat' in pets: 
pets.remove('cat') 
7.3.3使用用户输入来填充字典


8.1定义函数
def greet_user(username): 
"""显示简单的问候语"""
print("Hello, " + username.title() + "!") 
greet_user('jesse') 
8.2.2关键字实参 传递给函数的名称—值对
 以下一样
describe_pet(animal_type='hamster', pet_name='harry')
describe_pet(pet_name='harry',animal_type='hamster')
8.2.3默认值
def describe_pet(pet_name, animal_type='dog'):
print("My " + animal_type + "'s name is " + pet_name.title() + ".") 
describe_pet(pet_name='willie')
describe_pet(pet_name='harry', animal_type='hamster')
8.2.4等效的函数调用
8.3.1返回简单值return
8.3.2让实参变成可选的
8.3.3返回字典
def build_person(first_name, last_name):
person = {'first': first_name, 'last': last_name} 
return person 
musician = build_person('jimi', 'hendrix') 
8.4传递列表
8.4.1在函数中修改列表
8.4.2 禁止函数修改列表
调用时这样function_name(list_name[:])
8.5 传递任意数量的实参
def make_pizza(*toppings):
8.5.1结合使用位置实参和任意数量实参
让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。 Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。
def make_pizza(size, *toppings): 
调用
make_pizza(16, 'pepperoni') 
make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese')
8.5.2使用任意数量的关键字实参
def build_profile(first, last, **user_info): 
profile = {} 
profile['first_name'] = first 
profile['last_name'] = last 
for key, value in user_info.items(): 
profile[key] = value 
return profile 
user_profile = build_profile('albert', 'einstein', 
location='princeton', 
field='physics') 
print(user_profile) 
8.6将函数存储在模块中  (引用其他文件)
import pizza 
pizza.make_pizza(16, 'pepperoni') 
pizza.make_pizza(12, 'mushrooms', 'green peppers', 'extra cheese') 
8.6.2导入特定的函数
from module_name import function_0, function_1, function_2
范例
from pizza import make_pizza
8.6.3使用as给函数指定别名  指定后,原函数不可访问
from pizza import make_pizza as mp 
8.6.4使用as给模块指定别名
import module_name as mn
8.6.5导入模块中的所有函数
from pizza import *


9.1创建和使用类
根据约定,在Python中,首字母大写的名称指的是类。
class Dog():
def __init__(self, name, age): 
self.name = name
self.age = age
self.color = "black"
def sit(self): 
print(self.name.title() + " is now sitting.")
def roll_over(self):
print(self.name.title() + " rolled over!") 
1. 方法__init__()  两个下划线
__init__()是一个特殊的方法,每当你根据Dog类创建新实例时,Python都会自动运行它


有前缀self。以self为前缀的变量都可供类中的所有方法使用,我们还可以通过类的任何实例来访问这些变量
可通过实例访问的变量称为属性


在Python 2.7中创建类时,需要做细微的修改——在括号内包含单词object:
class ClassName(object): 
9.1.2根据类创建实例
my_dog = Dog('willie', 6) 
print("My dog's name is " + my_dog.name.title() + ".") 
print("My dog is " + str(my_dog.age) + " years old.")
1. 访问属性  
my_dog.name
2. 调用方法
my_dog = Dog('willie', 6)
my_dog.sit() 
my_dog.roll_over() 
9.2使用类和实例
9.2.2给属性指定默认值
9.2.3修改属性的值
1. 直接修改属性的值
my_dog.color = "yellow"
2. 通过方法修改属性的值
def update_color(self,newcolor):
self.color = newcolor
my_dog.update_color("yellow")
3. 通过方法对属性的值进行递增
9.3继承
9.3.1子类的方法__init__()
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model 
self.year = year
self.odometer_reading = 0
def  get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
self.odometer_reading += miles
class ElectricCar(Car): #定义子类时,必须在括号内指定父类的名称
def __init__(self, make, model, year): #让ElectricCar实例包含父类的所有属性
super().__init__(make, model, year) #父类也称为超类(superclass),名称super因此而得名。
my_tesla = ElectricCar('tesla', 'model s', 2016) 
print(my_tesla.get_descriptive_name()) 


Python 2.7 中的继承
class Car(object):
def __init__(self, make, model, year):
--snip--
class ElectricCar(Car):
def __init__(self, make, model, year):
super(ElectricCar, self).__init__(make, model, year)
--snip--
函数super()需要两个实参:子类名和对象self。
9.3.3 给子类定义属性和方法
9.3.4 重写父类的方法
对于父类的方法,只要它不符合子类模拟的实物的行为,都可对其进行重写。
9.3.5 将实例用作属性
class Car():
def __init__(self, make, model, year):
self.make = make
self.model = model 
self.year = year
self.odometer_reading = 0
def  get_descriptive_name(self):
long_name = str(self.year) + ' ' + self.make + ' ' + self.model
return long_name.title()
def read_odometer(self):
print("This car has " + str(self.odometer_reading) + " miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't roll back an odometer!")
def increment_odometer(self, miles):
self.odometer_reading += miles
def fill_gas_tank(self):
#电动汽车没有油箱
print("This car need a gas tank!###")
class ElectricCar(Car): #定义子类时,必须在括号内指定父类的名称
def __init__(self, make, model, year): #让ElectricCar实例包含父类的所有属性
super().__init__(make, model, year) #父类也称为超类(superclass),名称super因此而得名。
self.battery_size = 70
def describe_battery(self):
print("This car has a " + str(self.battery_size) + "-kWh battery.")
def fill_gas_tank(self):
#电动汽车没有油箱
print("This car doesn't need a gas tank!")
my_car = Car('bentian','model L',2018)
print(my_car.get_descriptive_name()) 
my_car.fill_gas_tank()


my_tesla = ElectricCar('tesla', 'model s', 2016) 
print(my_tesla.get_descriptive_name()) 


my_tesla.describe_battery()
my_tesla.fill_gas_tank()


9.3.6 模拟实物
9.4.1 导入单个类 from car import Car 
9.4.2在一个模块中存储多个类 
9.4.3从一个模块中导入多个类 from car import Car, ElectricCar
用逗号分隔了各个类
9.4.4导入整个模块
9.4.5导入模块中的所有类 from module_nameimport * (不推荐使用这种导入方式)
9.4.6在一个模块中导入另一个模块
9.4.7自定义工作流程
9.5  Python标准库
9.6类编码风格
类名应采用驼峰命名法,即将类名中的每个单词的首字母都大写,而不使用下划线。
实例名和模块名都采用小写格式,并在单词之间加上下划线。


10.1从文件中读取数据
10.1.1读取整个文件
with open('pi_digits.txt') as file_object: 
contents = file_object.read() 
print(contents) 


with open('include/a.c','r',encoding='UTF-8') as file_object: 
在Windows系统中,在文件路径中使用反斜杠(\)而不是斜杠(/):
在Linux和OS X中
file_path = '/home/ehmatthes/other_files/text_files/filename.txt' 
with open(file_path) as file_object: 
在Windows系统中
file_path = 'C:\Users\ehmatthes\other_files\text_files\filename.txt' 
with open(file_path) as file_object: 
10.1.3逐行读取
for line in file_object: 
print(line.rstrip()) 
10.1.4创建一个包含文件各行内容的列表
with open(filename) as file_object: 
lines = file_object.readlines() 
10.1.5使用文件的内容
读取文本文件时,Python将其中的所有文本都解读为字符串
如果你读取的是数字,并要将其作为数值使用,就必须使用函数int()将其转换为整数
10.1.6包含一百万位的大型文件
print(pi_string[:52] + "...")
#if birthday in pi_string:


10.2.1写入空文件
filename = 'programming.txt'
with open(filename, 'w') as file_object: 
file_object.write("I love programming.") 


可指定读取模式('r')、写入模式('w')、附加模式('a')
或让你能够读取和写入文件的模式('r+')
10.3.1处理ZeroDivisionError异常
如果try-except代码块后面还有其他代码,程序将接着运行,因为已经告诉了Python如何处理这种错误。
try: 
print(5/0) 
except ZeroDivisionError: 
print("You can't divide by zero!")
10.3.3使用异常避免崩溃
10.3.4 else代码块
print("Give me two numbers, and I'll divide them.") 
print("Enter 'q' to quit.") 
while True: 
first_number = input("\nFirst number: ") 
if first_number == 'q': 
break 
second_number = input("Second number: ") 
try: 
answer = int(first_number) / int(second_number) 
except ZeroDivisionError: 
print("You can't divide by 0!") 
else: 
print(answer)
10.3.5 处理 FileNotFoundError 异常
filename = 'alice.txt'
try:
with open(filename) as f_obj:
contents = f_obj.read()
except FileNotFoundError:
msg = "Sorry, the file " + filename + " does not exist."
print(msg)
10.3.6 分析文本
字符串调用方法split()的结果
words = contents.split()
num_words = len(words)
10.3.7 使用多个文件
10.4.1 使用 json.dump()和 json.load()
函数json.dump()接受两个实参:要存储的数据以及可用于存储数据的文件对象。
import json 
numbers = [2, 3, 5, 7, 11, 13] 
filename = 'numbers.json' 
with open(filename, 'w') as f_obj: 
json.dump(numbers, f_obj)
====
import json 
filename = 'numbers.json' 
with open(filename) as f_obj: 
numbers = json.load(f_obj) 
print(numbers)


10.4.2保存和读取用户生成的数据
import json 
username = input("What is your name? ")


filename = 'username.json'
with open(filename, 'w') as f_obj: 
json.dump(username, f_obj)
print("We'll remember you when you come back, " + username + "!")
======
import json 


filename = 'username.json'


with open(filename) as f_obj: 
username = json.load(f_obj) 
print("Welcome back, " + username + "!") 
======
filename = 'username.json' 
try: 
with open(filename) as f_obj: 
username = json.load(f_obj) 
except FileNotFoundError: 
username = input("What is your name? ") 


with open(filename, 'w') as f_obj: 
json.dump(username, f_obj) 
print("We'll remember you when you come back, " + username + "!") 
else: 
print("Welcome back, " + username + "!") 
========
10.4.3重构


def get_stored_username(): 
"""如果存储了用户名,就获取它"""
filename = 'username.json'
try: 
with open(filename) as f_obj: 
username = json.load(f_obj) 
except FileNotFoundError: 
return None
else: 
return username


def get_new_username(): 
"""提示用户输入用户名""" 
username = input("What is your name? ") 
filename = 'username.json' 
with open(filename, 'w') as f_obj: 
json.dump(username, f_obj) 
return username


def greet_user(): 
username = get_stored_username() 
if username: 
print("Welcome back, " + username + "!") 
else:
username = get_new_username()
print("We'll remember you when you come back, " + username + "!") 

greet_user()

======

 

11.1.1单元测试和测试用例
11.1.2可通过的测试self.assertEqual
import unittest 
from name_function import get_formatted_name 
class NamesTestCase(unittest.TestCase): 
    """测试name_function.py""" 
def test_first_last_name(self): 
    """能够正确地处理像Janis Joplin这样的姓名吗?""" 
    formatted_name = get_formatted_name('janis', 'joplin') 
    self.assertEqual(formatted_name, 'Janis Joplin') 
unittest.main() 

11.2.2一个要测试的类
survey.py 
# -*- coding: UTF-8 -*- 
class AnonymousSurvey(): 
    """收集匿名调查问卷的答案""" 
    def __init__(self, question): 
        """存储一个问题,并为存储答案做准备""" 
        self.question = question 
        self.responses = [] 
    def show_question(self):
        """显示调查问卷  此处书上有错"""
        print(self.question)
    def store_response(self, new_response): 
        """存储单份调查答卷""" 
        self.responses.append(new_response) 
    def show_results(self): 
        """显示收集到的所有答卷  此处书上有错""" 
        print("Survey results:") 
        for response in self.responses: 
            print('- ' + response) 
===
language_survey.py
# -*- coding: UTF-8 -*-
from survey import AnonymousSurvey

#定义一个问题,并创建一个表示调查的AnonymousSurvey对象
question = "What language did you first learn to speak?"
my_survey = AnonymousSurvey(question)
#显示问题并存储答案
my_survey.show_question() 

print("Enter 'q' at any time to quit.\n") 
while True: 
    response = input("Language: ") 
    if response == 'q':
        break 
    my_survey.store_response(response)
# 显示调查结果
print("\nThank you to everyone who participated in the survey!") 
my_survey.show_results() 

11.2.3测试AnonymousSurvey类  self.assertIn('English', my_survey.responses) 

# -*- coding: UTF-8 -*-

import unittest 
from survey import AnonymousSurvey 
class TestAnonmyousSurvey(unittest.TestCase):
    """针对AnonymousSurvey类的测试""" 
    def test_store_single_response(self): 
        """测试单个答案会被妥善地存储""" 
        question = "What language did you first learn to speak?" 
        my_survey = AnonymousSurvey(question) 
        my_survey.store_response('English') 
        self.assertIn('English', my_survey.responses) 
unittest.main()
=====生成器===
yield:返回列表

decorator


11.2.4方法setUp()

项目1 外星人入侵
武装飞船

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值