《Python编程入门到实践》笔记

一、数据类型

1.1、字符串

在python中如何拼接字符串?
通过format(在python3.6中引入了f字符串)能够将花括号内的变量名替换成它的值,具体如下

	first_name = "hello"
	second_name = "world"
	
	#3.6及3.6以后可以用的方式
	text = f"{first_name.title()} {second_name.title()}"
	#3.6之前用的方式
	#text = "{} {}".format(first_name,second_name)
	
	print(text)
	#输出结果为 Hello World
	#其中title()方法是修改字符串首字母为大写

在python中如何去除字符串中的空白?
可通过rstrip(),lstrip()和strip()分别删除字符串开头,结尾,同时删除开头结尾部分的空白。但是这些函数仅返回修改后的数据,并不会修改原数据

1.2、列表

在python中通过 [] 表示列表。
python访问最后一个列表元素的索引为-1,倒数第二个可以为-2,以此类推。
通过 append() 方法能够给列表末尾添加相应元素。
通过 insert() 方法给列表对应位置插入元素,第一个参数为插入位置,第二参数为插入的值。

删除元素
删除元素可以使用 del语句,如del 列表名[索引] ,即可删除对应位置的值。
删除元素还可以使用 pop() 方法,该方法删除列表最后的元素,并能够使用这个元素。同时还可以指定索引,删除指定位置的数据。
通过 remove() 方法可以根据元素的值进行删除。

调整元素
通过方法 sort() 能够让元素递增进行排序,若想使用相反的顺序,则添加参数 reverse=True .
使用函数 sorted() 能够保留列表的排序,并且展示你所需要的排序。
通过方法 reverse() 使原列表元素反转。

len()函数查看列表长度。

range()函数生成一系列的数字,当只有一个参数时,将返回数字0到该参数为止(不打印这个参数数字);当有两个参数时,如range(1,3),将返回数字1,2。
list()函数可以将range()生成的结果直接转换成列表。
通过以上方式生成的列表需要多行代码,可通过列表解析将循环和创建新元素的代码合并。

    #列表解析
    #语法使用规则,先指定一个列表名,如squares。
    #然后在列表的定义中,定义一个表达式,用于生成要存储到列表中的值
    #如 value**2,然后再定义for循环语句
    squares = [value**2 for value in range(1,11)]
    
    #常使用的方法
    squares = []
    for value in range(1,11):
    	square = value ** 2
    	squares.append(square)

python列表的复制需要使用到切片,如:A = B[:],意味着将B中的内容全部复制给A。
注意,A = B 语句只是让A变量也指向了B变量指向的列表,所以修改A的值也会造成B的变动。

1.3、元组

在python中,列表是可以修改的,但是可能需要一些不能修改的数据,所以元组就是不可变的列表。元组使用圆括号() 进行定义。

元组是由逗号标识的,如果元组只有一个元素那么这个元素后面要有个逗号。

不能修改元组的元素,但是能直接给存储元组的变量赋值。

1.4、字典

字典使用{} 来进行定义。在里面,键和值用冒号分隔。每一个键值对之间使用逗号进行分隔。
当确定需要多行定义字典时,在输入左花括号后按回车,在下一行缩进四个空格,然后在指定键值对并以逗号结尾,再回车输入后面的键值对。

通过 字典名[键名] 获取值时,当该键不存在时,将会报错。
可以通过get()方法,第一个参数指定键名,第二个参数指定不存在键时所要返回的值(可省略)。当要获取可能不存在的键的值时,可以使用该方法。

如何遍历字典中的所有键值对?

user_0 = {
    'username':'good',
    'first':'good',
    'last':'study',
    }
for key,value in user_0.items():
    print(f"\nKey:{key}")
    print(f"\nValue:{value}")
  
#其中keys(),values()方法会获得字典的所有键,值。
#通过调用set(字典名.values())来保证获得的值没有重复内容

二、数据计算

2.1、整数的运算

在python中两个**代表的是乘法运算。
任意两个数相除的时候,其结果总是浮点数。

三、数据输入

通过input() 函数接受用户的输入,函数中接受一个参数,参数内容是要向用户显示的提示或说明。
若用户输入的是数值,则该函数将该数值用字符串表示,通过函数int() 可以转换为数值

使用模块 json 可以存储数据
json.dump():可接受两个参数,第一个是存储的数据,第二个是用于存储数据的文件对象。
例子如下:

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

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

json.load()将信息读取到内存中。
举例如下:

import json

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

四、函数

python中函数的参数有一种叫关键字实参,当调用函数时,直接点名参数名并为它赋值,例子如下:

def describe_pet(animal_type, pet_name):
    #可在此处定义时的形参名直接赋值,此时若无实参传递,将使用默认值
    #如 def describe_pet(pet_name,animal_type=‘dog',):
    #因为python会按顺序给参数赋值,所以有默认值的参数放到后面。
    print(f"My {animal_type}'s name is {pet_name.title()}.")
    
describe_pet(animal_type='hamster',pet_name='harry')

函数形参名前也可用*号进行修饰,这样表示创建了一个空元组,python将会把收到的所有值都存到这个元组当中。
也可用**号进行修饰,表示创建了一个空字典。

python可以导入其他模块,如:

  • import module_name,这种需要用模块名.方法名来调用外部方法。
  • from module_name import function_0,function_1,这种可以直接使用特定的方法
  • from module_name import function_name as nick_name,通过这种引用方法避免函数命名重复
  • from module_name as nick_name,给模块指定别名

五、文件

使用open()函数,参数是指定的文件名。
通过关键字 with 可以在不访问文件时关闭之前调用的open()。
如:

with open('test.txt') as file_object:
    cotents = file_object.read()
print(contents)

如提供第二个参数,则是指定以什么模式打开文件(默认只读模式):

  • 写入模式:w
  • 读取模式:r
  • 附加模式:a
  • 读写模式:r+

六、异常

通过try-except-else代码块来处理异常。
以零作为除数错误为例子:

try:
    answer = int(first_number) / int(second_number)
except: ZeroDivisionError:
	print("You can't divide by 0!")
	#也可在此处输入pass,表示在该区域什么都不做
	#pass
else:
	print(answer)

七、测试

通过unittest中的工具来测试代码。

单元测试用于核实函数的某个方面没有问题。
测试用例是一组单元测试,它们一道核实函数在各种情况下的行为都符合要求。

unittest类中的一些 断言方法

方法用途
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中

如要测试下方函数:

def get_formatted_name(first, last, middle=''):
	if middle:
		full_name = f'{first} {middle} {last}'
	else:
		full_name = f"{first} {last}"
	return full_name.title()
   

则可如下编写测试方法:

import unittest
from name_function import get_formatted_name

class NamesTestCase(unittest.TestCase):
	def test_first_last_name(self):
		formatted_name = get_formatted_name('janis', 'joplin')
		self.assertEqual(formatted_name,'Janis Joplin')
	def test_first_last_middle_name(self):
		formatted_name = get_formatted_name('wolfgang', 'mozart', 'amadeus')
		self.assertEqual(formatted_name, 'Wolfgang Amadeus Mozart')

	if __name__ == '__main__':
		unittest.main()

运行后测试成功与失败都将获得提醒。

如要测试下方的类:

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(f"-{response}")

则可如下编写测试方法:

import unittest
from survey import AnonymousSurvey

class TestAnonymousSurvey(unittest.TestCase):
    #当测试方法变多时,再使用原来的方法将要不停的创建对象
    #使用方法setUp()可以让python先运行它,从而避免多次对象的创建
    def setUp(self):
        question = "What language did you first learn to speak?"
        self.my_survey = AnonymousSurvey(question)
        self.responses = ['English', 'Spanish', 'Mandarin']

    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.my_survey.responses)

    if __name__ == '__main__':
        unittest.main()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值