一些想法:
在原有的c++的基础上学习python,①我认为python语言更加简洁,更易于游戏和web等网页的创作。②它没有一些繁琐的头文件和数据类型,没有一些像必须加逗号什么之类的语法,可以极大程度上减少错误的发生,提高编程效率。③python是一门面向对象的编程语言
但是,c++的一些方法用的比较多,python的也很多现在很难熟练的应用,会用混,还是不太熟练。还有,输入输出相对c++不太友好
工具python3, 编辑器sublime_text,参考资料“蟒蛇书”
基本语法
变量
变量名可以是字母,数字,下划线(但不能以数字开头,不能包含空格)
变量可以是数字,字符串,标签(一般不用中文)
字符串
title()以首字母大写的方式显示每个单词
upper()全大写
lower()全小写
f字符串:在字符串中插入变量的值 ,f字符串{}内为变量
rstrip()删除空白,此方法是暂时的,若要永久删除用变量赋值
removeprefix()删除前缀
数
任意两个数相除,结果为浮点数(即使是两个整数且能整除)
用下划线分组,计算机不识别
赋值 x,y,z= 0, 0, 0
列表
常用方法
append元素添加至末尾
insert(索引,插入元素)将元素添加至列表
del 列表[索引]
pop删除列表末尾元素;pop(索引值) 删除列表中的任意元素
remove(元素值) 删除列表中的任意元素,不需要知道它的位置(只删除第一个;若有多个,可用循环)
sort()排序
sorted()暂时排列
reverse()反向
len()列表长度
索引-1 为最后一个元素,-2为倒数第二个。。。
操作列表
遍历(不要遗漏冒号)
python根据缩进来判断与其他程序各部分的联系,要避免缩进错误
如下图,缩进的是在for循环里面的,不缩进是外面的
数值列表
range(1,5) 只生成了1~4-------->差一行为。从指定的第一个值开始数,到指定的第二个值停止。因此不包含第二个值
min(列表名) 取最小
max(列表名) 取最大
sum(列表名) 取和
切片 列表名 [ 索引1,索引2 ] 截取 索引1 至 索引2前面一个
省略则表示从头或至尾
复制列表--切片的重要作用
使用切片复制是将列表1的副本赋给列表2,是两个列表;
而直接复制是将列表1关联到列表1实际上是一个列表--列表2
元组
不可改变的列表
my_num=(9,0,1)圆括号
改变元组中的元素不合法,但是给元组变量重新赋值合法
循环
if语句 (and, or)
if-elif-elid-else ( else可省略)
判断列表非空
if 列表
练习5.9
按照下面的说明编写一个程序,模拟网站如何确保每个
用户的用户名都独一无一。
口创建一个至少包含5个用户名的列表,并将其命名为 current_userso
口 再创建一个包含5个用户名的列表,将其命名为 new_users,并确保其中有一两个用户名也在列表 current_users 中。
口遍历列表 new_users,检查其中的每个用户名是否已被使用。如果是,就打印一条消息,指出需要输入别的用户名;否则,打印一条消息,指出这个用户名未被使用。
口确保比较时不区分大小写。换句话说,如果用户名'John'已被使用,应拒绝用户名'JOHN'。(为此,需要创建列表 current__users 的副本,其中包含当前所有
用户名的全小写版本。)
字典
一系列的键值对,keys,values
键和值可以是任何变量,包括列表等
(类比c++map和结构体)
修改,删除,添加,查询,遍历
get()方法使用get方法使键值不存在时返回一个默认值
用户输入
input()方法
int()把输入转化成数值表示
学习中遇到的问题;
字典中冒号后要空格
sublime_text 本身不支持交互输入--vs code完美终端;或安装插件
安装插件sublimeRepl
crtl + shift + P 安装install Package 然后搜索安装sublimerepl参考此博客安装
函数
和c++很像
def 定义函数
函数方法里的为形参,主程序中的调用里面为实参
def 函数名(传递的信息):
函数体
关键词实参:既可以在调用时赋值,(形参 = 实参,...)
类(类比于java)
创建和使用类
__init__()方法(两个下划线哦):self必须存在,且位于最前面;
self是一个指向自身的引用->初始化
属性:可通过实例访问的变量 eg. age, name
使用类和实例
在类中的__init()__方法中,可以给属性指定默认值
也可以通过方法修改属性的值
继承
子类继承了父类(超类)的所有属性和方法,同时 还可以定义自己的属性和方法。
super() 调用父类的方法
重写父类:不符合子类模拟的实物的行为,可以进行重写
导入类
1.导入单个类:import 语句 eg. from car import Car 导入 car.py 中的 Car 类
2.导入多个类; from car import Car, ElectricCar 导入 car.py 中的 Car ,ElectricCar类
3.导入整个模块 import car
4.在一个模块中导入另一个模块:类分散到多个模块中,以免模块太大或在同一个模块中存储不相关 的类。将类存储在多个模块中时,一个模块中的类依赖于另一个模块 中的类。在这种情况下,可在前一个模块中导入必要的类。 from car import Car
5.使用别名:as eg.from electric_car import ElectricCar as EC
python标准库
是一组模块,使用其他程序员编写好的模块 eg.from random import randint
randint 随机返回一个位于这两个整数之间(含)的整数
choice() 将一个列表或元组作为参 数,并随机返回其中的一个元素
文件
读取文件
①open() 以任何方式使用文件
②close() 关闭文件;但在bug导致方法close() 未执行,文件将不会关闭 一般不用,自动关闭
③关键字with ,让Python负责妥善地打开和 关闭文件。
1.简单的open()在当前执行 的文件(即.py程序文件)所在的目录中查找。
with open('pi_digits.txt') as file_object:
contents = file_object.read()
2.根据文件路径查找
with open('text_files/filename.txt') as file_object:
注意: ①显示文件路径时,Windows系统使用反斜杠(\ )而不是斜杠(/ ), 但在代码中依然可以使用斜杠。
② 一定用反斜杠时,可用 \\ 进行转义 C:\path\to\file.txt" ------> C:\\path\\to\\file.txt"
3.逐行读取
filename = 'pi_digits.txt'
with open(filename) as file_object:
for line in file_object:
print(line)
写入文件
open('xxxx', y) 第一个实参也是要打开的文件的名称。
第二个实参告诉Python,要以什么模式打开这个文件
write()函数写入
模式
定读取模式 ('r' )
写入模式 ('w' )
附加模式 ('a' )
读写模式 ('r+' )
如果省略了模式实参,Python将以默认的只读模式打开文件。
filename = 'programming.txt'
with open(filename, 'w') as file_object:
file_object.write("I love programming.")
注意:如果指定的文件已经存在,Python将在返回文件对 象前清空该文件的内容。
异常
1.使用try-except 代码块
try:
print(5/0)
except ZeroDivisionError:
print("You can't divide by zero!")
输出
You can't divide by zero!
2.else 代码块
如果成功,不出现故障,则用else打印结果
try:
answer = int(first_number) / int(second_number)
except ZeroDivisionError:
print("You can't divide by 0!")
else:
print(answer)
异常:FileNotFoundError,ZeroDivisionError
静默失败
pass 语句,让Python在代码块中什么都不要做, 达到即使出现异常也保持静默
try:
--snip--
except FileNotFoundError:
pass
else:
--snip--
存储数据
json.dump() 和 json.load()读取到内存中
import json
numbers = [2, 3, 5, 7, 11, 13] filename = 'numbers.json'
with open(filename, 'w') as f:
json.dump(numbers, f)
import json
filename = 'numbers.json'
with open(filename) as f:
numbers = json.load(f)
print(numbers)
测试代码
使用Python模块unittest 中的工具来测试代码
测试函数
先编写函数,后续在主程序中导入,并查看显示
测试类
断言方法
setUp() 来创建一个调查对象和一组答案