【Python】【笔记】《python从入门到实践》十三天学习笔记总结
# 《python从入门到实践》学习笔记 #本书配套网站:()
## day 1 基础学习
已安装python3.10
拥有一定python语法基础
根据书上内容进行实践
将字符串的字母大小写进行变换的方法
```python
name.title()
name.upper()
name.lower()
```
table键:\t
删除字符串末尾和开头的空白
调用方法:rstrip(),lstrip
细节问题:如果字符串中必须包括一个单引号,用双引号引起来这个字符串
将整形数据转换成字符型:str()
列表
在某一位置添加元素,
调用方法insert(索引,元素)
删除:方法1:del(索引)
方法2:pop()(括号内不写东西删除的是末尾的元素,写索引则删除对应元素)
区别:pop后可以用来使用
方法3:remove()根据值删除【用法见程序】,只能删除第一个指定的值,如果该值出现多次则需要循环删除
永久排序:方法sort()实现按字母正反排序,永久性改变
```python
#day1
name = "Abc deFg"
print(name.title())#只大写首字母
print(name.upper())
print(name.lower())
delspace = " python "
print(len(delspace))
print(len(delspace.rstrip()))#删除尾巴
print(len(delspace.lstrip()))#删除头部
import this#python之禅
mylist = ["a","c","b","d","a"]
print(mylist)
mylist.insert(3, "z")#特定位置插入
print(mylist)
myletter = "a"
mylist.remove(myletter)#根据值删除特定元素
print(mylist)
print(myletter)
mylist.sort()#按字母永久排序
print(mylist)
mylist.sort(reverse=True)#倒序
print(mylist)
print(mylist)
sorted(mylist)#只写这句话不能实现临时按照字母顺序
print(mylist)
print(sorted(mylist))#直接输出才行
print(mylist)#确实是临时的
```
## day 2 列表
临时排序:sorted()
书中3.3.2介绍到sorted后按照字母倒序输出,需要给sorted传输参数reverse=True,但是编译mylist.sorted时会显示编译错误,sorted中必须为mylist否则无法保存第一部的结果,根据这个思路,可以另外新建一个列表来存储,然后用sort的方法进行对新的列表的永久排序然后用sort(reverse=True)来实现
倒着打印列表
具体调用方法:mylist.reverse()
确定列表长度:len(mylist)
实践提示:计算还剩下多少僵尸
一个列表有n个元素,索引随后一个元素mylist[-1]或者mylist
for循环实践提示:初始化游戏——遍历角色列表,将每个角色都显示到屏幕上,循环后显示play now
数值列表,使用函数range()创建数字列表
乘方运算:**
tips:当使用临时变量时可以使代码可读性增强,审核时可以进行高效化的缩减
列表解析:将for循环和创建新元素的代码合并成一行,并自动附加新元素
复制列表,所用的知识为列表的切片,mylist[:]即不写开始结束的索引,直接将整个列表作为一个大切片
注意不能直接把mylist赋给新的列表,应当制作切片去传递
元组:不可变的列表
定义的时候使用()而不是[],索引的时候使用的和列表一样name[]
不允许对元组中的元素赋值
可以直接重新初始化该元组
```python
#day2
mylist.reverse()
print(mylist)#直接按照原列表打印倒序
print(mylist[-1])#索引最后一个元素
numbers = list(range(1,6))#创建的是左开右闭
print(numbers)
even_num = list(range(2,11,2))#第三个数可以指定步长
print(even_num)
构造完全平方数列表
square_num = []
for i in range(1,11):
temp = i**2
square_num.append(temp)
print(square_num)
square_num = #列表解析
print(square_num)
dimensions = (5,3,7,11,9)
```
## day 3 字典
if语句
检查是否相等:需要考虑字母大小写
如果为了实现不许分大小写,可以先将所有字母小写后做判断
检查一个元素是否在列表中:not in
字典
初始化字典:
访问字典中的值:
添加/删除:
修改字典中的值:(均见示例)
遍历所有的键值对(也可以单独便利)
6.4嵌套:可以使用字典列表,列表字典,字典字典
```python
#day3
mydic = {"char1": "abc","char2": "def","char3": "ghi"}
print(mydic["char1"])
mydic["char2"] = "xyz"
print(mydic["char2"])
mydic["char4"] = "pqr"
del mydic["char3"]
print(mydic)
for key,value in mydic.items():
print(key)
print(value)
```
## day 4 用户输入(1)
input函数:
工作原理:函数input()让程序暂停运行,等待用户输入一些文本。获取用户输入后存在一个变量中,以等待使用。
int()
可以将输入的字符串转换为整型数据
## day 5 用户输入(2)
根据用户输入来决定是否结束程序的运行
while中运用字符串相等问题。
## day 6 用户输入(3)
利用while循环,将人员的firstname lastname统计,并提供结束方式。90%自主完成,存在一个问题:每次只能存储一个人的信息进入字典,不过好像任务就是这个。本程序相当于结合了day4-6所学内容进行的程序编写,如下:
```python
#day6
def get_ones_name(frn,ln):
fn = frn + " " + ln
return fn.title()
while True:
print("tell me your name , input 'q' to break")
frn = input("first name:\n")
if frn != 'q':
ln = input("last name:\n")
if ln != 'q':
age = input("your age:\n")
if age == 'q':
break
else:
break
else:
break
print("hello " + get_ones_name(frn, ln))
def buildname(frn,ln,age):
namedic = {'firstname: ': frn,'lastname: ':ln,'age: ': age}#这是一种封装方式
#if age:
#namedic['age'] = age#这是另一种封装方式,在函数定义中使用age = '',然后在调用时直接给其赋值在最开始的括号里面,成为一个实参
return namedic
print(buildname(frn, ln, age))#注意本程序有一个小问题就是每次只能输入一个人的信息,如果输入多次只会记录最后一个人的信息。
```
## day 7形参与实参
传递任意数量实参方法:*形参名
意思为创建了一个以形参名命名的空元组,并将所有收到的值都封装到这个元组中
传递任意数量的关键字实参:**形参名
创建的是一个新的空字典(使用键值对,即调用语句提供了多少就使用多少)
调用模块:
```
import module_name
```
调用模块下的函数:
```
from module_name import function_name1,function_name2...........
```
调用模块下所有函数:
```
from module_name import *#正中情况下函数可以直接调用,不需要句点表示法
```
调用函数并起别名避免和程序中的名字重复:
```
from module_name import function_name as new_name
import module_name as new_name
```
这样一来调用的时候可以更加简洁:
```
new_name.new_name
```
## day 8 类
类,对象,实例化。
面向对象编程是最有效的软件编写方法之一
创建类:
```python
__init__(self,name,age)
```
类中的函数称为方法,init这个方法时一个__特殊且重要__的的方法,每当根据Dog类创建新的实例,Python都会自动运行它,开头末尾分别由两个下划线hi为了区别于其他的常用命名的函数。
在该方法的定义中,形参self必不可少,必须位于最前方。
__self的作用__:python调用者个方法时自动传入self实参,每个与类相关联的方法调用都用到实参self,它是一个指向实例本身的引用,让实例能够访问类中的属性和方法。因为会自动传递,所以调用的时候只需要给其他形参赋值。
创建类中的实例:
```python
my_dog = Dog('pp',3)#实例化对象
print(my_dog.name)#访问实例化对象的属性
```
想要修改内容,高级的方法是再写一个方法去调用以达到修改的目的:
```python
def update_age(self,age):#又来改变年龄的方法
self.age = age
my_dog = Dog('pp', 3)
my_dog.update_age(23)#调用该方法
print(my_dog.age)
```
也可以通过创建方法来实现对某个属性累加
```python
class Height():
def __init__(self,len):
self.len = len
def sum(self,len):
self.len += len
my_height = Height(180)
my_height.sum(3)
print(my_height.len)
```
下面是根据所学和自己想要实现的内容写出的代码:
```python
#day8
class Dog():
def __init__(self,name,age):#小狗类的信息
self.name = name
self.age = age
def sit(self):#小狗执行坐下命令
print(self.name.title() + " is sitting now.")
def row_over(self):#小狗执行打滚命令
print(self.name.title() + " rowed over.")
my_dog = Dog('pp', 3)
print(my_dog.name)
print(f"给{my_dog.name}‘sit’指令或者‘else’指令看看它会怎么做:)\n(输入‘q’结束)")
giveorders = ''
while giveorders != 'q':
giveorders = input()
if giveorders == 'sit':
my_dog.sit()
elif giveorders != 'q':
my_dog.row_over()
```
## day 9 类与子类
一个类**继承**另一个类:子类继承父类,继承原有并且可以定义自己的属性和方法
子类中有两个需要注意的:`__init__()`和 `super()`,下面的是继承的一个示例:
```python
class Car():#先定义好一个父类
def __init__(self,carname,caryear,carsize):
self.carname = carname
self.caryear = caryear
self.carsize = carsize
#创建子类时父类必须包含在统一个文件中
```
然后创建ElectricCar()子类:
```python
class ElectricCar(Car):#这是想要继承父类的一个子类,定义子类必须要在括号内指出继承的父类是什么
def __init__(self,carname,caryear,carsize):#子类的__init__继承父类
super().__init__(carname,caryear,carsize)#super函数将父类与子类关联起来,这让python调用子类的父类方法__init__(),让子类实例化包含父类的属性父类也成为supercla,所以super因此得名。
```
若想改变父类下的方法,只需要在子类中重新定义即可。
## day 10 文件
打开文件:
```python
with open('python之禅.txt',encoding='utf-8') as file_object: #有汉字,需要对解码方式进行标注
contents = file_object.read()
print(contents)
```
逐行读取:
```python
filename = 'python之禅.txt'
with open(filename) as file_object:
for line in file_object:
print(line)
#print(line.rstrip())#消除每读取一行后的空行
```
写入空文件:
```python
filename = 'programming.md'
with open(filename,'w') as file_object:
file_object.write('My name is LogyJ.')
```
open()函数中文件后的实参 :
`'a'` 附加模式
`'w'` 写入模式
`'r'` 读取模式
`'r+'` 读取和写入模式
## day 11 异常
`ZeroDivisionError`异常:python不能除以0
**try-expect-else**的使用:
```python
try:
answer = n / m
expect ZeroDivisionError:
print("You can't divide by zero!")
#pass #如果希望程序不做出错误的汇报
else:
print(answer)
#如果try中的代码运行没有出错则跳过expect代码块运行接下来的程序,如果出错则运行expect中的代码,这样可以避免用户看到traceback从而提高程序出错的可读性和安全性。
```
通过预测可能发生错误的代码,可编写健壮的程序,即便面临无效数据或缺少资源也能继续运行,从而能抵御无意的用户错误和恶意的攻击。
## day 12 数据存储
存储数据:`json`模块(`JavaScript Object Notation`)
常用的两个方法:
```python
import json
numbers =
filename = 'number.json'
with open(filename,'w') as f_obj:
json.dump(numbers,f_obj)#使用json.dump存储数据,需要传入两个参数
with open(filename) as f_obj:
numb = json.load(f_obj)#使用json.load读取存储的数据
print(numb)
```
## day 13 测试代码
测试函数的一个例子:
```python
def get_formatted_name(first,last):
full_name = first + ' ' + last
return full_name.title()
```
提示:使用模块unittest中的工具为函数和类编写测试
后记:小白新人第一次发帖,感觉发帖要求好严格呜呜,紧张的要死害怕被记过,希望没事吧,有什么错误或者疏忽的话还请大家指出来,后续会发本书后半部分项目开发的学习笔记,欢迎关注。 哈哈哈,我也是新加入不久的 加油,都是刚开始学 加油,我现在看这些字母,头还是晕的,得从最基础开始了解。 楼主,python从菜鸟上学完语法之后咋么学呀,很多exp看不懂 谢谢分享,真的需要 Python初学习,Mark一下 辛苦了。 感谢分享