1.基本语法 可以加分号对我学习java的非常友好,输出语句也简单,没有类型定义
boolean的true 为1 0为false
list集合可以嵌套
#dict字典就是map集合
#低精度转高精度可以 高精度转低级度也可以(java不可以)
#for循环语法是 for i in a
#逻辑运算符是 and or not
修改变量 a 、b 、c
a, b, = 2, 3
c = a**b # 幂
print( "2的3次方的值为:", c)
a, b = 10, 4
c = a//b # 取整除数
print( "10除4的整除数为:", c)
##值在是不是在里面
成员运算符
lst = [1,2,3,4,5,6]
a,b = 1,10
print(a in lst) # a 在 lst 序列中 , 如果 x 在 y 序列中返回 True。
print(b not in lst) # b 不在 lst 序列中 , 如果 x 不在 y 序列中返回 True。
Tuple元祖,用()标识,不能二次赋值,可以理解成不可变的列表(只读列表),有序对象
#不可以改变
x6 = (1,2,3,'hello')
print(x6,type(x6))
x6[0]
Dict字典,用{}标识,由索引(key)和它对应的值value组成,无序对象
#相当于 java的 Map对象
x7 = {"name":"fatbird", "city":"shanghai", "tel":10001000}
print(x7,type(x7))
数据类型转换方法 **这里暂时只针对int,float,str三者,list/tuple/dict后面课程讲
var1 = 10.8
var2 = int(var1)
print(var1,type(var1))
print(var2,type(var2))
print('----------')
int(x)函数:将x转为整数,如果是四舍五入则是round(x)函数
var1 = 10
var2 = float(var1)
print(var1,type(var1))
print(var2,type(var2))
print('----------')
float(x)函数:将x转为浮点数
var1 = 10.0
var2 = str(var1)
var3 = float(var2)
print(var1,type(var1))
print(var2,type(var2))
print(var3,type(var3))
print('----------')
str(x)函数:将x转为字符串
2.list的操作
#有直接截取,和步长
lst = [1,2,3,4,5,6,7,8,9,0]
print(lst[2:5]) # lst[2:5)
print(lst[4:]) # 右边无索引,代表以最后一个值结束 [4,lst.length+1)
print(lst[5:-1]) # 索引5的值 - 倒数第二个值
#结果
[3, 4, 5]
[5, 6, 7, 8, 9, 0]
[6, 7, 8, 9]
序列的基本内置全局函数
lst = [1,2,3,4,5,6,7,8,9,0]
print(len(lst)) # 列表元素个数
print(max(lst),min(lst),sum(lst)) # 返回列表的最大值、最小值、求和,这三个函数都只针对数字的list
print(lst.index(3)) # .index(obj)方法:从列表中找出某个值第一个匹配项的索引位置
lst = [1,1,2,3,3,4,4,4,4,5,6]
print(lst.count(4)) # .count(obj)方法:计算值的出现次数
#list可以嵌套
lst1 = [1,2,3,'a','b','c',[1,2,3]]
#列表数据生成器
lst = list(range(5))
print(lst) # 生成 0 1 2 3 4
lst = list(range(2,5)) #从2开始生成 [2,5)
print(lst) # 2 3 4
# 通过list()函数生成列表
lst = list(range(10))
lst.append('hello')
print(lst)
# list.append() 添加元素
lst.append(['a','b','c'])
print(lst)
lst.extend(['a','b','c']) #添加元素而不是添加list到list 如 1 2 3--> 1 2 3 a b c
#插入 lst.insert(5,'aaa')
lst.clear() #清空
lst.remove('a')
lst1=lst; #复制
lst1=lst.copy();
lst.sorted(reverse.True) #排序
#删除元祖
del tup3
#list转元祖
tuple=tuple(list);
3.字符串的处理,py的索引都是查找他的值的索引
st = 'abcdefg'
print(st[2],st[-1]) // c g
print(st[:2])//ab
print(st[::3]) #步长 a d g
索引、切片
#结果
c g
ab
adg
#查看这个字符的索引
print(st.index('a')) # .index()方法 为 0
print('st长度为:',len(st)) #7
#把list变成字符串,并且可以替换标识符
lst = ['poi01', '116.446238', '39.940166']
m = '-'
st = m.join(lst) # poi01-116.446238-39.940166
#list变字符串
st = "poi01,116.446238,39.940166"
lst = st.split(',') #[ xx,xx,xx]
st = 'abcdefg'
print(st.startswith('a'), st.endswith('f')) #true false
str.startswith(“str”) 判断是否以“str”开头;str.endswith (“str”) 判断是否以“str”结尾
print(st.upper()) # 全部大写
print(st.lower()) # 全部小写
print(st.swapcase()) # 大小写互换
print(st.capitalize()) # 首字母大写
st = '1234567'
print(st.isnumeric()) # 如果 string 只包含数字则返回 True,否则返回 False
st = 'DNVAK'
print(st.isalpha()) # 如果 string 至少有一个字符并且所有字符都是字母则返回 True,否则返回 False
st = 'avd '
print(st.rstrip()) # 删除字符末尾的空格
#有类似c语言的输出,和字符串代替
name = "FATBIRD"
truth = "%s is 好人" %name
x = 4
y = "hehe"
z = 4.2
print("this is %i" %x)
print("this is %s" %y)
print("this is %f" %z)
# 更强大的格式化方法.format
print("User ID: {0}".format("root"))
print("{} 呵呵 {}".format("a","b"))
{} 这里代表占位符,其中可以有数字也可以没有
print("{}{}{}".format('a','b','c'),'\n',
"{0}{1}{2}{0}".format('a','b','c'),'\n')
#print("{}{}{}{}".format('a','b','c'))
{}和{0}的区别:都是占位符,后者有了明确指定
print("我的工作是{work}".format(work = '设计'))
也可以用变量来指示
x="abc{}"
a = x.format("def")
print(a,x)
.format()生成新的值吗??
print("{:f}".format(4.123),'\n',
"{:.2f}".format(4.123),'\n',
"{:e}".format(4.123),'\n',
"{:.0f}".format(99.9),'\n',
"{:%}".format(4.123),'\n',
"{:d}".format(10))
4.字典 就是 list
dic = {'大头儿子':6, '小头爸爸': 35, '隔壁老王':37}
print(dic,type(dic))
用{}来表示,按照key:value来表示字典中的元素,其中key是键,value是值,key-value也就是键值对
这里dic就是一个字典类型的变量
dic = [{'name':'Tom', 'age':18},{'name':'Jack', 'age':19},{'name':'Alex', "age":17}]
#如果重复会自动去重 如
dic = {'a':1,'a':2}
print(dic)#{a:'2'}
dic['var5'] = '添加一个值' # map没有这个值,相当于添加元素
dic['var4'] = '任意修改其中一个值' # 任意修改元素
del dic['var1'] # 任意删除元素
print(dic)
dic.clear() # 清空词典所有条目
print(dic)
del dic # 删除词典
#使用dict函数转list<map>
dic = {'a':1,'b':2}
keys = ["a", "b", "c"]
dic1 = dict.fromkeys(keys) #合并字典的键
dic2 = dict.fromkeys(keys, 'hello') #键是keys值全部是hello
print(dic1,dic2)# {'b': None, 'a': None, 'c': None} {'b': 'hello', 'a': 'hello', 'c': 'hello'}
#更新字典,没有相当于添加元素
dic1 = {"a":1, "b":2}
dic2 = {"a":2, "d":4}
dic1.update(dic2)
print(dic1)#{'a': 2, 'b': 2, 'd': 4}
#!!!copy复制出来的指针指向一样的
# 和序列的原理一样,a和b指向同一个字典,所以会一起更新
a = {'m':1 , 'n':2 , 'p':3}
b = a.copy()
a.update({'q':4})
print(a,b)#{'m': 1, 'n': 2, 'p': 3, 'q': 4} {'m': 1, 'n': 2, 'p': 3, 'q': 4}相同
字典的元素遍历
poi = {'name':'shop', 'city':'shanghai', 'information':{'address':'somewhere', 'num':66663333}}
#字典的遍历
for key in poi.keys():
print(key)
print('-------')
for value in poi.values():
print(value)
print('-------')
for (k,v) in poi.items():
print('key为 %s, value为 %s' %(k,v))
print('-------')
for函数遍历
4.逻辑判断,类似yml如果有缩进就相当于是一个语句块{},都有:号, 也可以写 == 和 &&
age = 12
if age < 18:
print('18岁以下不宜观看')
#只有or和and
num = 5
if num >= 0 and num <= 10:
print( 'hello')
判断值是否在0~10之间
输出结果: hello
num = 10
if num < 0 or num > 10:
print( 'hello')
else:
print( 'undefine')
判断值是否在小于0或大于10
输出结果: undefine
num = 8
if (num >= 0 and num <= 5) or (num >= 10 and num <= 15):
print( 'hello')
else:
print( 'undefine')
判断值是否在05或者1015之间
输出结果: undefine
#输出5次hello,不用在定义一个初始变量和一个条件....
for i in range(5):
print('hello world!')
4.for循环比较神奇的是,他可以自动遍历map集合如 for key in item
age = {'Tom':18, 'Jack':19, 'Alex':17, 'Mary':20}
for k in age:
print(k + '年龄为:%s岁' % age[k])
#多层
for i in range(3):
for j in range(2):
print(i,j)
5.while循环(替代原来没有for(int i=0;i<10;i++)的缺陷) !!! py 1是true 0是false
count = 0
while count < 9:
print( 'The count is:', count)
count = count + 1
print( "Good bye!")
6.while-else 条件不成立就相当于if else ,相当于到最后再执行
count = 0
while count < 5:
print(count, " is less than 5")
count = count + 1
if count>5 :
break
else:
print(count, " is not less than 5")
continue
s = 0
for i in range(50):
if i%2 == 0:
s += i
else:
continue
print('第%i次计算'%(i/2))
print('结果为%i' % s)
#!!!pass空语句 这里先预留位置,回头再补上具体的代码实现
5.函数 !!!使用def(xxx,xxx):没有返回值说明
def f1(x):
y = 2**x # 没有return
def f2(x):
y = 2**x #求2^2
return y # 含有return
print(f1(2),f2(2)) #None,4 !!!py没有null只有None 而且首字母是大写....
#!!!默认值
def f(x,n = 2): #java没有这个说法
return(x**n)
print(f(10)) #100
print(f(10,3)) #1000 ,去掉默认值
#可变参数(可以传入任意多个元素0-....,返回值为tuple)
def f(*x):
print(x)
return x
f(1)
f('a','b')
f(1,2,3,[44,33])
print(type(f('a','b')))
6.全局变量与局部变量 global直接在局部变量定义全局变量
def f(m):
m = '呵呵哒' #局部变量变量
print("函数内为局部变量:%s" % m)
a = input('请输入一个数字:') #全局变量
f(a)
print("函数外为全局变量:%s" % a)
def f():
global a
a = 'aaa'
a = input('请输入一个数字:') //10
print("输入变量值:%s" % a) //aaa 也是分先来后到的修改
f()
#lambda表达式 定义只有一个语句的函数
f = lambda a,b,c:a+b+c
print(f(2,3,4)) #9
7.导入包
import pandas
print(pandas.__file__)
# 查看现有包所在路径,将自己创建的包存入改路径
import sys
sys.path.append(r'C:\Users\Administrator\Desktop\ai\lib')
# 加载sys包,可以自定义路径的包,!!!不用写具体文件名导入整个包 ,包里全部是def方法
import testmodel2 as t2
print(t2.f1(5))
print(t2.f2([2,3,4,5,5,5,6,6,4,4,4,4],4))
print(t2.f3(10,2,10))
#单独导入包的一个方法
from testmodel2 import f2
8.随机数
import random
x = random.random()
y = random.random()
print(x,y*10)
m = random.randint(0,10)
print(m) //手机生成一个[0,10]的整数
#list或str中选择一个数
st1 = random.choice(list(range(10))) //10
st2 = random.choice('abcdnehgjla') //a
print(st1,st2)
#在list中随机找5个数
lst = list(range(20))
sli = random.sample(lst,5) #相当于在样本中取样,不改变原来list
print(sli)
#打乱list的数的排序,改变原list
lst = [1,3,5,7,9,11,13]
random.shuffle(lst) #洗牌
print(lst)
9.time sleep 和本地日期格式化
import time
for i in range(2):
print('hello')
time.sleep(1)
# time.sleep()程序休息()秒
print(time.ctime())
print(type(time.ctime()))
# 将当前时间转换为一个字符串
print(time.localtime())
print(type(time.localtime()))
将当前时间转为当前时区的struct_time
wday 0-6表示周日到周六
ydat 1-366 一年中的第几天
isdst 是否为夏令时,默认为-1
print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
10.文件读取和写入
#推荐第三种
path1 = 'C:/Users/Administrator/Desktop/ai/lib/text.txt' # 单个反斜杠:/
path2 = 'C:\\Users\\Administrator\\Desktop\\ai\\lib\\text.txt' # 两个斜杠:\\(第一个\是转义符)
path3 = r'\Users\Administrator\Desktop\ai\lib\text.txt' # r用于防止字符转义
路径书写格式
print(path1)
print(path2)
print(path3)
#模式 r , w ,rw, a追加
f = open(path2, 'r')
print(type(f))
print(f)
print(f.read()) #读取全部字符 假如是123
print('读取完毕')
f.seek(1) 移动到第几个字符 ,0代表不移动
print(f.read()) # 23
f.close() #记得关闭
11.os模块
import os # 导入模块
print(os.name) #window 则用'nt'表示,对Linux/Unix 显示'posix'。
print(os.getcwd()) #当前Python脚本工作的目录路径。
print(os.listdir()) # 返回工作目录所有文件和目录名。
#os.chdir('C:\\Users\\Hjx\\Desktop\\' ) # 切换到目标路径
#print(os.getcwd())
#os.remove('text2.txt') # 删除一个文件
print(os.path.split('C:\\Users\\Administrator\\Desktop\\ai\\lib\\text.txt')) # 分割为这个文件夹的路径和文件名,('C:\\Users\\Administrator\\Desktop\\ai\\lib', 'text.txt')
print(os.path.exists('C:\\Users\\Administrator\\Desktop\\ai\\lib\\text.txt'))#是否有这个文件
print(os.path.exists('C:\\Users\\Administrator\\Desktop\\ai\\lib')) #是否有这个文件夹
#切换路径读文件
os.chdir('C://Users//Administrator//Desktop//ai//lib//')
f2 = open('text.txt','r')
print(f2.read())
f.seek(0) #开始的行
print(f.readline()) #读一行的几个字符
print(f.read(2)) //读取2个字符
f2.seek(0) #从第0行开始,读取每一行字符依次打印
for line in f2.readlines():
print(type(line),line)
//<class 'str'> 123456
//<class 'str'> 789
- 案例 读出每行然后, 每行数据分割,后变成字典
#path = 'C:\\Users\\Hjx\\Desktop\\jiuba.txt' # 创建路径变量
#f = open(path,'r') # 读取txt文件
m = [] # 新建一个空列表,用于存储数据
n = 0
for line in f2.readlines():
n += 1
st1 = line.split(':')
name = st1[0] # 先以:拆分,筛选出name文本
information = st1[1] # 第二部分包括lng,lat,address
st2 = information.split(',')
lng = float(st2[0]) # 筛选出lng
lat = float(st2[1]) # 筛选出lat
ad = st2[2].strip() # 筛选出address,去除末尾空格
data = [['name',name],['lng',lng],['lat',lat],['address',ad]] # 做成嵌套列表
m.append(dict(data)) # 生成字典,并追加如列表m
#print('成功转换%i个数据'%n)
print(m)
print('\n数据转换完成!总共转换%i个数据'%n)
//运行结果 !!![['k':v]] 是代表[{'k':v}] list<Map>
[{'address': '中山东一路18', 'name': '外滩18号', 'lat': 31.244099, 'lng': 121.49618},
{'address': '衡山路10号甲欧登大夏2-3楼', 'name': 'Light酒吧', 'lat': 31.211903, 'lng': 121.453435}]
- os的函数 字符写入文件
f = open(r"C:\Users\Administrator\Desktop\ai\lib\text.txt", 'w', encoding = 'utf8')
f.write('hello world!')
#f.close() #必须关闭,不然只在内存操作,没有写入磁盘
lst = ['\na\n','b\n','c\n','d\n','e\n']
f.writelines(lst) #没有\n就是 abcde
f.close()
14.案例给两个list 变成有下面格式 !!!py使用,逗号连接字符串
1,a
2,b
3,c
n = list(range(1,11))
v = ['a','b','c','d','e','f','g','h','i','j']
f = open( 'C:\\Users\\Hjx\\Desktop\\test_write3.txt', 'w', encoding = 'utf8')
m = []
for i in range(len(n)):
f.writelines([str(n[i]),',',v[i] + '\n'])
f.close()
print('finished!')
- pickle 把对象存储为文件
import pickle
data = {'a':[1,2,3,4], 'b':('string','abc'), 'c':'hello'}
print(data)
# 创建一个字典变量data
pic = open( r'C:\Users\Administrator\Desktop\ai\lib\data.pkl', 'wb')
# 以二进制来存储:rb, wb, wrb, ab
pickle.dump(data,pic)
pic.close()
# 将一个字典数据存成了pkl文件
f = open( r'C:\Users\Administrator\Desktop\ai\lib\data.pkl', 'rb')
st = pickle.load(f)
print(st)