01.python基础

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这里map可以重复,但是不能都重复 或者map结构,键不能重复

   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
  1. 案例 读出每行然后, 每行数据分割,后变成字典
#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}]
  1. 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!')
  1. 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)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值