2020-11-16 周记录(七)

Python

Python 列表转换字符串

例子:将列表 temp_list = ['h', 'e', 'l', 'l', 'o'] 转换成字符串'hello',代码如下:

temp_list = ['h', 'e', 'l', 'l', 'o']
result = ''.join(temp_list)
print(result)    # hello
hello

字符串对象的方法join其描述如下:
大概意思是:s.join(iterable)是将括号内的迭代对象(如列表)使用s字符串作为链接将迭代对象中的元素拼接成一个字符串,返回该字符串。

Python中反转列表的三种方式

1.内建函数 reversed()

li =[1, 2, 3, 4, 5, 6]
a = list(reversed(li))
print (a)

注意:reversed()函数返回的是一个迭代器,而不是一个List,所以需要list函数转换一下

2.内建函数 sorted()

sorted()语法

sorted(iterable[, cmp[, key[, reverse]]])

参数说明:
iterable -- 可迭代对象。
cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。

返回值

返回重新排序的列表。

a=[1,2,3,4,5,6,7,8,9] 
c=sorted(a, reverse=True) 
print (c)

注意:sorted()按降序排列,对于反转内容不是顺序排列的无效果,此处待改善。

3: 使用分片

a=[1,2,3,4,5,6,7,8,9] 
d=a[::-1] 
print (d)  

注意:其中[::-1]代表从后向前取值,每次步进值为1

Python导入类

在一个模块中储存多个类

创建一个模块 car.py

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 Battery():
    """一次模拟电动汽车电瓶的简单尝试"""

    def __init__(self,battery_size=70):
        """初始化电瓶的属性"""
        self.battery_size = battery_size

    def describe_battery(self):
        """打印一条描述电瓶容量的消息"""
        print("This car has a " + str(self.battery_size) + "-KWh battery.")

    def get_range(self):
        "打印一条关于电瓶续航里程的消息"
        if self.battery_size == 70:
            range = 240
        elif sef.battery_size == 85:
            range = 270

        message = "This car can go approximately " + str(range)
        message += " miles on a full charge."
        print(message)

class ElectricCar(Car):
    """模拟电动汽车的独特之处"""
    def __init__(self,make,model,year):
        """
        初始化父类的属性,再初始化电动汽车特有的属性
        """
        super().__init__(make,model,year)
        self.battery = Battery()

导入单个类

创建一个实例my_car.py,导入Car

from car import Car

my_new_car = Car('audi','a4','2016')
print(my_new_car.get_descriptive_name())

my_new_car.odometer_reading = 23

my_new_car.read_odometer()

在一个模块中储存多个类

导入ElectricCar类,创建一个电动车

from car import ElectricCar

my_tesla = ElectricCar('tesla','model s',2016)

print(my_tesla.get_descriptive_name())
my_tesla.battery.describe_battery()
my_tesla.battery.get_range()

从一个模块中导入多个类

CarElectricCar 类都导入

from car import Car,ElectricCar

my_beetle = Car('volkswagen','bettel',2016)
print(my_beetle.get_descriptive_name())

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

导入整个模块

导入整个 car 模块

import car

my_beetle = car.Car('volkswagen','bettel',2016)
print(my_beetle.get_descriptive_name())

my_tesla = car.ElectricCar('tesla','roadster',2016)
print(my_tesla.get_descriptive_name())

Python文件

pi_digits.txt

3.1415926535
  8979323846
  2643383279


file_reader.py读取文件

with open('pi_digits.txt') as file_object:
    contents = file_object.read()
    print(contents.rstrip())

.rstrip()函数删除空行

逐行读取

filename = 'pi_digits.txt'

with open(filename) as file_object:
    for line in file_object:
        print(line.rstrip())
        """.strip()消除空白行"""

创建一个包含文件隔行内容的列表

.readlines()函数创建文件隔行内容的列表

filename = 'pi_digits,txt'

with open(filename) as file_object:
    lines = file_object.readlines()

for line in lines:
    print(line.rstrip)

使用文件的内容

filename = 'pi_digits.txt'

with open(filename) as file_object:
    lines = file_object.readlines()

pi_string = ''
for line in lines:
    pi_string += line.strip()

print(pi_string)
print(len(pi_string))

查询圆周率中的生日

file_name = 'pi_million_digits.txt'

with open(file_name) as file_object:
    lines = file_object.readlines()

pi_string = ''
for line in lines:
    pi_string += line.strip()

birthday = input("Enter your birthday,in the from mmddyy:")
if birthday in pi_string:
    print("Your birthday appears in the first million digits of pi!")
else:
    print("Your birthday does not appear in the first million digits of pi.")

写入文件

w 模式写入空文件

filename = 'programming.txt'

with open(filename,'w') as file_object:
    file_object.write("I love programming.\n")
    file_object.write("I love ctreating new games.\n")

w模式下,如果文件已经存在,将在返回文件对象前清空文件

a模式写入文件

filename = 'programming.txt'

with open(filename,'a') as file_object:
    file_object.write("I also love finding meaning in large datasets.\n")
    file_object.write("I love creating apps that can run in abrowser.\n")

***a模式下,写入的文件都将添加到文件末尾,如果指定文件不存在,将为你创建一个空文件

Python异常处理

try—except 代码块

ZeroDicisionError 处理

try:
    print(5/0)
except ZeroDivisionError:
    print("You can't divide by zero!")

FileNotFound处理

filename = 'DCcomics.txt'

try:
    with open(filename) as file_object:
        contents = file_object.readlines()

except FileNotFoundError:
    message = 'Sorry,the file ' + filename + ' does not exist'
    print(message)

try—excpet—else 代码块

print("Give me two numbers,and I wil 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:
        anwser = int(first_number) / int(second_number)
    except ZeroDivisionError:
        print("You can't divide by 0!")
    else:
        print(anwser)

Python分析文本

alice.txt

Alice in Wonderland

统计文件单词个数

filename = 'alice.txt'

try:
    with open(filename) as file_object:
        contents = file_object.read()

except FileNotFoundError:
    msg = 'Sorry, the file ' + filename + ' does not exist.'
    print(msg)

else:
    #计算文件大概包含多少个单词
    words = contents.split()
    num_words = len(words)
    print("The file " + filename + " has about " + str(num_words) + " words.")

统计多个文件

def count_words(filename):
    """计算一个文件大概包含多少个单词"""

    try:
        with open(filename) as file_object:
            contents = file_object.read()

    except FileNotFoundError:
        msg = 'Sorry, the file ' + filename + ' does not exist.'
        print(msg)

    else:
        #计算文件大概包含多少个单词
        words = contents.split()
        num_words = len(words)
        print("The file " + filename + " has about " + str(num_words) + " words.")

filenames = ['alice.txt','DCcomics','Batman vs Superman']
for filename in filenames:
    count_words(filename)
pass 语句

excpet 中使用

def count_words(filename):
    """计算一个文件大概包含多少个单词"""

    try:
        with open(filename) as file_object:
            contents = file_object.read()

    except FileNotFoundError:
        pass
    
    else:
        #计算文件大概包含多少个单词
        words = contents.split()
        num_words = len(words)
        print("The file " + filename + " has about " + str(num_words) + " words.")

filenames = ['alice.txt','DCcomics','Batman vs Superman']
for filename in filenames:
    count_words(filename)

json 储存数据

json.dump()

import json

numbers = [2,3,5,7,11,13]

filename = 'numbers.json'
with open(filename,'w') as file_object:
    json.dump(numbers,file_object)

json.load()

import json

filename = 'numbers.json'
with open(filename) as file_object:
    numbers = json.load(file_object)

print(numbers)

保存和读取用户生成的数据

remember_me

import json

username = input("What is your name?\n")

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

greet_user

import json

filename = 'username.json'

with open(filename) as file_object:
    username = json.load(file_object)
    print("Welcome back, " + username + "!")

合并

import json

#如果以前储存了用户名,就加载它
#否则,就提示用户输入用户名并存储它

filename = 'username.json'

try:
    with open(filename) as file_object:
        username = json.load(file_object)

except FileNotFoundError:
    username = input("What's your name?\n")
    with open(filename,'w') as file_object:
        json.dump(username,file_object)
        print("We'll remember you when you come back, " + username + "!")

else:
    print("Welcome back, " + username + "!")

重构

import json

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

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

def greet_user():
    """问候用户,并指出其名字"""
    username = get_stored_username()
    if username:
        print("Welcom back, " + username + "!")
    else:
        username = get_new_usrname()
        print("We'll remember you when you come back, " + username + "!")

greet_user()

Python测试代码

测试函数

name_function 函数

def get_formatted_name(first,last):
    """生成整洁的姓名"""
    full_name = first + ' ' + last
    return full_name.title()

def get_formatted_name_1(first,last,middle=''):
    """生成整洁的姓名"""
    if middle:
        full_name = first + ' ' + middle + ' ' + last
    else:
        full_name = first + last
    return full_name.title()

unittest 模块

创建一个继承 unittest.TestCase 的类,调用方法 assertEqual()

import unittest
from name_function import get_formatted_name_1

class NamesTestCase(unittest.TestCase):
    """测试name_function.py"""

    def test_first_last_name(self):
        """能够正确地处理像Janis Juplin这样的姓名吗?"""
        formatted_name = get_formatted_name_1('janis','joplin')
        self.assertEqual(formatted_name,'Janis Joplin')

    def test_first_last_middle_name(self):
        """能够正确地处理像Janis Juplin这样的姓名吗?"""
        formatted_name = get_formatted_name_1('janis','joplin','wall')
        self.assertEqual(formatted_name,'Janis Wall Joplin')

unittest.main()

测试类

各种 断言方法

assertEqual(a,b) 核实 a==b
assertNotEqual(a,b) 核实 a!=b
assertTure(x) 核实 x 为 True
assertFalse 核实 x 为 False
assertIn 核实 item 在 List 中
assertNotIn 核实 item 不在 List 中

帮助匿名调查的类

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)

调用该类

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()
    

测试 AnonymousSurvey

import unittest
from survey import AnonymousSurvey

class TestAnonymousSurvey(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)

    def test_store_three_responses(self):
        """测试三个答案会被妥善地储存"""
        question = "What language did you first learn to speak?"
        my_survey = AnonymousSurvey(question)
        responses = ['Chinese','English','Spanish']
        for response in responses:
            my_survey.store_response(response)

        for response in responses:
            self.assertIn(response,my_survey.responses)

unittest.main()
方法 setUp

使用 setUp 改进测试代码

import unittest
from survey import AnonymousSurvey

class TestAnonymousSurvey(unittest.TestCase):
    """针对AnonymousSurvey类的测试"""

    def setUp(self):
        """创建一个调查对象和一组答案,供使用的测试方法使用"""

        question = "What language did you first learn to speak?"
        self.my_survey = AnonymousSurvey(question)
        self.responses = ['Chinese','English','Spanish']

    def test_store_single_response(self):
        """测试单个答案会被妥善地储存"""
        self.my_survey.store_response(self.responses[0])
        self.assertIn(self.responses[0],self.my_survey.responses)

    def test_store_three_responses(self):
        """测试三个答案会被妥善地储存"""
        for response in self.responses:
            self.my_survey.store_response(response)
        for response in self.responses:
            self.assertIn(response,self.responses)

unittest.main()

方法 setUp() 做了两件事:创建一个调查对象;创建一个答案列表。储存这两样东西的变量名包含前缀 self (即储存在属性中),因此可在这个类的任何地方使用。

Python isinstance()函数

isinstance() 与 type() 区别:

type() 不会认为子类是一种父类类型,不考虑继承关系。

isinstance() 会认为子类是一种父类类型,考虑继承关系。

如果要判断两个类型是否相同推荐使用 isinstance()。

语法

以下是 isinstance() 方法的语法:

isinstance(object, classinfo)
参数

object -- 实例对象。
classinfo -- 可以是直接或间接类名、基本类型或者由它们组成的元组。

返回值

如果对象的类型与参数二的类型(classinfo)相同则返回 True,否则返回 False。。

实例

以下展示了使用 isinstance 函数的实例:

>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list))    # 是元组中的一个返回 True
True

type() 与 isinstance()区别:

class A:
    pass
 
class B(A):
    pass
 
isinstance(A(), A)    # returns True
type(A()) == A        # returns True
isinstance(B(), A)    # returns True
type(B()) == A        # returns False
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,242评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,769评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,484评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,133评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,007评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,080评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,496评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,190评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,464评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,549评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,330评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,205评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,567评论 3 298
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,889评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,160评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,475评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,650评论 2 335

推荐阅读更多精彩内容