Python基础笔记

注意
并非完整的python基础内容,基于本人基础知识,且部分内容错误,此处未做更新

运算符

数学

加减乘,+-*,有浮点就返回浮点

除,/返回浮点值,即使整除

整除,//返回整数向下取整

乘方,**,有浮点就返回浮点

取模,%

逻辑

35>=23 and 24*4==96 true

1+2==3 and (1+1==2 or 2*4==10) true

字符串

'字符串'是字符串,“字符串”是字符串,可以用\

f+字符串可以让字符串中包含变量,如f'I have a {tool}',其中tool是一个变量

lstrip去除左边的空余(空格,\t,\n),rstrip右边,strip全部

string[a:b]字符串切片,拓展用法见列表/切片

split()返回一个字符串中所有“单词”的列表(去掉空格缩进换行,分隔)。

len(sample_string)返回strlen

列表

tools=['pickaxe','axe','shovel','hoe']

基本操作

tools[-1]='hoe'

tools.append('flint and steel'),则在最后加上打火石

tools.insert(1,'flint and steel'),则在镐子后面插入打火石

del tools[1],则斧头没了

print(tools.pop()),则锄头没了,输出hoe;pop也可以有参数,执行print(tools.pop(2)),则铲子没了,输出shovel

print(tools.remove("axe")),则斧头没了。如果有好几个斧头,则只会remove第一个

tools.sort(),则斧头锄头镐子铲子;tools.sorted()会临时返回排序后的列表,但本身不变

tools.reverse(),反转列表

len(tools)是4

遍历

如下,记得冒号

for tool in tools:
	print(tool)

range(a,b),指的是[a,b)

numbers = list(range(1, 6))
print(numbers)

输出[1,2,3,4,5]

range(1,10,2)就是1,3,5,7,9

统计

nums=[2,7,5,3,11]

min(nums)返回2;max,11;sum,28

squares = [value**2 for value in range(1, 11)] # 返回1-10的平方的list

切片

tools[1:3]返回['axe','shovel'],同为左开右闭;[:3]就是[0:3][1:]就是[1,4]

列表复制的切片方法(如果直接赋值是指针操作):thetools=tools[:]

设定步长(每隔几个提取):sometools=tools[-4::2],则sometools里是镐子和铲子

元组

不能修改内容的列表,但是可以整个一起修改

其他操作和列表几乎相同,包括遍历、统计、切片等

代码格式

PEP(Python Enhancement Proposal)规定:一行不要超过80个字符,缩进是4个空格,不要过多空行

运算符边上最好都空一格,但是我从来不空,而且已经改不掉了

IF

基本用法

例:

for tool in tools:
    if tool=="shovel":
        print(tool)
        print("yes sir!")
    elif tool=="axe":
        print(tool.upper())
    else
    	print(tool.title())

检查是否在内

对列表或元组有效

'pickaxe' in tools true

'shovel' not in tools false

字典

简单理解为索引为任意类型的列表,其实就是哈希表,也可以用作结构体

steve={'health'=20,'saturation'=14,'potion_effect'=1}

基本操作

修改:steve['health']=19,史蒂夫被仙人掌扎了一下;如果字典内没有health键,则会添加

删除:del steve['potion_effect'],药水效果这个就没了

get()

steve.get('speed','No point value assigned'),则如果steve里面有speed就输出对应的值。如果没有就输出后面那段

如果直接输出steve['speed'],会报错

遍历

遍历键和键值:

for key,value in steve
	print(f'{key}:{value}')

遍历键:(两种是一样,默认遍历键)

for key in steve
	something
for key in steve.keys()

遍历键值:上面的keys改成value即可

集合

显然,不能有相同元素

tools={'pickaxe','axe','shovel','hoe'}

创建时输入相同元素,会保留第一个

嵌套

字典,列表,元组,集合等都可以互相嵌套,即N维数组

比较合理,没有笔记必要

用户输入

一般输入

name=input("Please enter your name:") # 用户可以在这句话之后输入,并存入message
print(f'Hello, {name.title()}!')

数值输入

直接输入字符串之后,用int(message)强制转换,例如:

age=input("your age:")
age=int(age)

python中,用int()强制转换字符串会直接把整一串转换为数值。体现了python的新手友好、脱离本质、编程高效、运行低效。我乱叫的。

while循环

例如:

while message!="quit":
    message=input("I will repeat after you until you enter 'quit'.")
    if message!="quit":
        print(message)

(以下内容同C/C++

退出循环:break

进入下一轮:continue

while True:也可以实现无限循环

函数

在python中,函数不分类型,如果写了return就是有返回值

除了用冒号代替花括号之外,函数的大部分基础操作与C/C++并无二致

默认值

和C++差不多,但是Pistol的这部分C++并没有学好,可能是因为平时用不到:

def build_person(first_name, last_name, age=None): # 默认值部分一定要在后面
    person = {'first': first_name, 'last': last_name}
    if age:
        person['age'] = age
    return person

musician = build_person('jimi', 'hendrix', age=27) # age这里不写'age='也可以
print(musician)
musician = build_person('Koji', 'Tabosh')          # 田所浩二年龄显然是24歲,所以不用写
print(musician)

传递列表

和C++一样,传递的是头指针,所以函数中对列表的操作会对列表产生永久影响。

要避免修改,需要用切片表示法:sample_function(list1[:])

传递任意数量的参数

使用星号+形参的格式,可以让传入的参数形成一个元组,在函数中,可以用处理元组的方式处理这些数据。如果除了这个元组之外还有其他参数,需要让其他普通形参放在前面(显然)。

def make_pizza(*toppings):
    print("\nMaking a pizza with the following toppings:")
    for topping in toppings:
    print(f"- {topping}")
make_pizza('pepperoni')
make_pizza('mushrooms', 'green peppers', 'extra cheese')

传递任意数量的带键值参数

类似上面的,但是用两个星号+形参名,形成一个字典。

模块化编程

例如:

# player.py
def mining(pickaxe_value, haste_level, efficiency_level)
    speed=pickaxe_value*(efficiency_level**2)*(1+haste_level*0.2)
    return speed
def attack_damage(weapon_value, strength_level, sharpness_level)
    damage=114514 # 懒得查力量和锋利的计算函数了
    return damage
from player import mining
# 于是可以使用player中的mining函数,这里是直接调用,多个函数用逗号分隔
spd=mining(1,2,3)
import player
# 于是可以使用player中的所有函数,但是需要声明模块名
spd=player.mining(1,2,3) # 和C/C++一样的调用方式

非常清晰,但是注意区分两种导入方式的调用方法

也可以用from player import *一键导入所有函数且不带模块名使用

as

一种define而已。例如:

from player import mining as mn
spd=mn(1,2,3)
import player as plyr
spd=plyr.mining(1,2,3)

创建类:和C++几乎一样,括号换成冒号,构造函数名字换成__init__,并且只要声明函数,变量开箱即用。

创建实例和C++完全一样,调用函数和C++完全一样。

python没有private,所以代码安全性比C++要垃圾不少。

继承

用不到,先不学了。和C++一个逻辑,就是写法有少许区别

导入类

和前面的导入函数没有区别。一点都没有。

python有很多很牛逼的标准库,以及一大堆社区提供的库。python除了这一点之外比C++烂多了,但是就因为这一点,在很多时候比C++牛逼。

操作文件

读取文件

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

使用read()的时候,末尾会多出一个空行,故使用rstrip()去掉。

文件路径默认同一个目录的相对路径,绝对路径就开头斜杠。(这有什么好说的,全球统一

虽然windows用反斜杠表示路径关系,但是不影响在代码中使用斜杠表示。

读取数组

使用JSON存储的数组文件,但是我不会。要用再学。

逐行读取

with open('1.txt') as file:
    for line in file:
        list1.append(line.rstrip())

上面的方法更适合对每一行进行操作,如果只是要创建列表,也可以直接用readlines

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

注意,用以上方法生成的列表,每一个字符串的末尾都有换行。

写入文件

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

write()函数不带换行,这个print的默认值不同。

open()的第二个位置:默认只读,‘r’只读,‘w’写入,‘a’附加,‘r+‘读写

注意,写入只支持字符串(与C不同),写入数值需要先用str()转换。

附加到文件

filename = 'programming.txt'
with open(filename, 'a') as file_object:
    file_object.write("I love programming.\n")
    file_object.write("I love creating new games.\n")

与上面写入的程序只有open的参数不同,不过在此程序运行后,只会在programming.txt后面添加这两行,而不是整个文件只有这两行。

异常处理

算了,暂时没用。和C++差不多。

0%