Java 转 Python 学习笔记-基础篇

# 列表类型
names = ['李明博', '咖喱棒']

# 字典类型
person = {'name':'咖喱棒', 'age':18}

# 元祖类型
nums = (1,2,3,4,)

# 集合类型
object = { 9,'李明博',True}

# 查看数据类型
print(type(names))

# python可以更新数据类型 x = 32 x = '你好'

# print('hello','world') 输出时逗号为空格 print(5,3,sep='+') 输出时逗号为加号
# print('你好') 输出后换行 print('你也好',end='----') 输出后不换行跟上----
# print(r'你好/t')原样输出

# 格式输出 %s 将变量都强转str
name = '李明博'
age = 15
print('姓名:%s,年龄:%s' %(name,age))

# 保留格式
message = '''
你好:%s
世界:%d
'''% (name,age)
print(message)

# format
message = '{}{}岁了'.format(name,age)
print(message)

# 直接输出
print( '{}{}岁了'.format(name,age))

# 输入操作 password = input('请输入密码') password默认的数据类型是字符串

# 精准除法和取整除法
print(9/2,9//2)

# 字符串比较 == 比较的是内容  集合类似
print('abc' == 'abc')

# 交互式相同值的地址是不一样的 因为一步一步来

# 对象之间的比较用is 比较的是地址
age2 = 15
print(age is age2)

# not == !  or == || and == &&
print(True and False,True or False,not True)

# 位运算 &
print(3 & 2)
# 3 = 0000 0011
# 2 = 0000 0010
# 3&2 = 0000 0010
# 相同1,不相同0

# 位运算 |
print(3 | 2)
# 0000 0011

# 位运算 ~
print(~5)
# 5 = 0000 0101
# ~5= 1111 1010 头1为负数
#   = 1111 1001 减1
#   = 0000 0110
#   =-6

# 位运算 ^ 相同为0不同为1
print(3^5)
# 3 = 0000 0011
# 5 = 0000 0101
# 3^5=0000 0110
#    =6

# 位运算 >> x 除2^x  << x 乘2^x
print(2 >> 1)
print(2 << 2)

# 三目运算符  真 if 判断 else 假
a = 6
b = 5
print((a + b) if a > b else (a - b))
print((a + b) if a < b else (a - b))

# if
if 1:
    print('True')

# if else
if 0:
    print('False')
else:
    print('True')

# if else if else
if ():
	pass
elif ():
	 pass
else:
	pass
# random 8,9
import random
print(random.randint(8,9))

# for i默认1 range(x) 默认从0到x-1 range(1,2) 只能循环i=1
for i in range(3):
    print("123")
for i in range(1,2):
    print("2")

# for对列表进行遍历
for name in names:
    print(name)
for i in range(1,10,3):#3是步长
    print(i)
print(list(range(1,10,3)))#[1, 4, 7]

# pass 代替空内容
if 1:
    pass

# break 跳出循环
for i in range(1,10):
    if i == 1:
        print("3")
        break

# while i默认为0
while i<3:
    print(i)
    i+=1

# in 字符串中是否存在部分字符 集合类似
print('李明' in name)

# 字符串取特定位置 列表类似 元组类似
print(name[1])#明
print(name[0:2])#包前不包后  李明
print(name[1:])#明博
str = 'abcde'
print(str[0:-3])#ab 倒着数 顺序还是正序
print(str[-1:])#e
print(str[:-1])#abcd
print(str[::-1])#edcba逆序 0还是str的第一个字符

# 字符串内置方法 字符转化大写
print('abcde'.upper())

# 字符串内置方法 字符转化小写
print('ABCDE'.lower())

# str的长度len(str),索引从0~len(str)-1

# 字符串内置方法 find
print(str.find('d'))#找到返回位置没有返回-1
print(str.find('a',1,3))#指定位置范围
print(str.find('a',1))#指定具体位置

# 字符串内置方法 rfind 找最后一个带有目标字符的位置
url = 'https://www.bilibili.com/video/BV1R7411F7JV?p=44'
print(url.rfind('/'))

# 字符串内置方法 替换 replace(,原字符,替换字符,最大替换次数)
print(str.replace('a','b',1))

# 字符串内置方法 设置编码
print(name.encode('utf-8'))

# 字符串内置方法 判断开始或者结尾
print('abc.txt'.endswith('txt'))
print('abc.txt'.startswith('abc'))

# 字符串内置方法 判断是否全为字母 或者数字
print('abc'.isalpha())
print('123'.isdigit())

# 字符串内置方法 每个字符之间加符号
print('-'.join('abc'))

# 字符串内置方法  去除空格
print('   hello   world'.lstrip())#左侧空格
print('   hello   '.rstrip())#右侧空格

# 字符串内置方法 切字符串 把各个部分放到列表里
print('a b c d'.split(' ')) #['a', 'b', 'c', 'd']
print('a b c d'.split(' ',2)) #切2刀

# 字符串内置方法 判断字符出现次数  元组类似
print('abbcccdddd'.count('c'))

#修改列表
numbers = ['1','2','3','4','5']
for i in range(len(numbers)):
    if numbers[i] == '3':
        numbers[i]  = '8'

# 删除列表元素
l = len(numbers)
i = 0#必不可少
while i < l:
    if '4' in numbers[i]:
        del numbers[i]
        l-=1
        continue
    i += 1
print(numbers)
numbers.remove('1')#或者直接删除元素名
print(numbers)


# 列表添加元素
names.append('水男')#尾部追加
print(names)

# 列表合并 元组类似
heronames = ['钢铁侠']
print(heronames + names)

# 列表插入元素
names.insert(2,'蜘蛛甲')
print(names)

# 列表求最值 元组类似
print(max(numbers))
print(min(numbers))

# 列表求和 需要元素为数字而不是字符 元组类似
dignum = [2,1,4,3,5,6,7,8,9,10]
print(sum(dignum))

# 列表排序 元组类似
print(sorted(dignum))#默认升序
dignum.sort()#默认升序
print(dignum)

print(sorted(dignum,reverse=True))#降序

dignum.sort(reverse=False)#降序
print(dignum)

dignum.reverse()#逆序
print(dignum)

# 列表 重复内容增加 元组类似
print(names * 3) # ['李明博', '咖喱棒', '蜘蛛甲', '水男', '李明博', '咖喱棒', '蜘蛛甲', '水男', '李明博', '咖喱棒', '蜘蛛甲', '水男']

# 列表的本质是广义表
# list = [1,[3,2],4]
 print([3,2] in list)
 print(list[1][0])#3

# 推导式 格式 []或者{} 里面 加入新列表的变量 for 提取出的变量 in 旧列表/集合名 if 条件

nums = [1,2,3,4,5,6]
print([num for num in nums if num > 3])

print([i for i in range(1,100) if i%3 == 0 and i%5 == 0])

print([(x,y) for x in range(5) if x%2==0 for y in range(5) if y%2==0])#双重循环用两个for

score = [{'name':'张三','garde':80},{'name':'李四','garde':85},{'name':'王五','garde':90}]
print([data['garde']+1 if data['garde']<90 else data['garde']-2 for data in score])#[新加入的变量 if 条件 else 新加入的变量 for 提取出的变量 in 旧列表]
# 生成器 格式 (列表/集合推导式) 实质是线程中的协程
g = (x*3 for x in range(5))#5是调用次数上限
while True:
    try:
        print(next(g))  # 调用生成器
    except:
        print('到达调用次数上限')
        break

def func():
    n = 0
    while True:
        n+=1
        yield n#让函数变成生成器

g = func()
print(next(g))

def funb():
    i = 0
    while i<5:
        temp = yield i #先执行yield i 将i 的值传出 然后将send里的参数传给temp
        print(temp)
        i+=1

g = funb()
print(g.send(None))#第一次必须用None
print(g.send('你好'))#send可以给生成器传值,让生成器进行不同的操作
print(g.send('你好a'))
# 字符串转列表 转集合 转元组
strabc = 'abc'
print(list(strabc))
print(set(strabc))#转集合
print(tuple(strabc))#转元组

# 列表出栈
print(dignum.pop())#弹出最后一个值 并且删除

# 列表清空
# dignum.clear()
# print(dignum)

# 元组tuple  内容不可修改 只读
print(type(3))#只有一个元素时类型是元素的类型
print(tuple(dignum)) #列表转元组

# 元组找某个元素下表
print(nums.index(3))

# 元组的拆包
nums = (1, 2, 3, 4)
a,b,c,d = nums#元素个数和元组元素个数一致
print(a,b,c,d)

a,*_ = nums#元素少时用 *_代替
print(a,_)#1 [2, 3, 4]

print(*(4, 8, 6))#4 8 6

# 元组转列表
print(list(nums))

# 字典的本质是键值对
# 列表转字典
dict1 = dict([('name','李明博'),('age','18')])
print(dict1)

# 字典转列表
print(dict1.items())

# 字典增加元素 键名相同 覆盖键值
dict1['power'] = '100'
print(dict1)
dict1['name'] = '咖喱棒'
print(dict1)

# 列表+字典
i = 0
database = []
while i < 2:
    user = {}
    if( i == 0 ):
        user['name'] = '水男'
        user['age'] = '18'
    else:
        user['name'] = '冰男'
        user['age'] = '17'
    i+=1
    database.append(user)
print(database)

# 字典遍历
dict2 = {}#先创建字典
dict2['张三'] = 98
dict2['李四'] = 95
dict2['王五'] = 90
for key,value in dict2.items():
    if value > 90:
        print(key)

# 取出字典里所有的键值和值
print(dict2.keys())
print(dict2.values())

# 字典查询
print('张三' in dict2)#返回True或者False
print(dict2.get('张三'))#获得指定键的值 没有键返回None
print(dict2.get('赵云',96))#找到返回对应的键值没有返回设置的值

# 字典查询和删除
print(dict2['张三'])#直接输入键值

dict2.pop('张三')#键值相当于索引 pop 返回对应键的值
print(dict2.pop('赵云',50))#没有不报错返回设置的值
print(dict2)

dict2.popitem()#删除末尾一个
print(dict2)

dict2.clear()#清除所有
print(dict2)

# 字典的更新 后面的覆盖到前面 更新或者增加 相当于字典的合并
dict3 = {1:'张三',2:'李四',3:'王五'}
dict4 = {1:'赵云',4:'马超'}
dict3.update(dict4)
print(dict3)

# 字典转列表
print(list(dict3))#只保留键不保留值

# 集合的本质是没有值得字典  key的值不重复  并且无序
list2 = [1,2,2,3,3,3,4,4,4,4]
print(set(list2))#{1, 2, 3, 4}

# 集合的增加
set1 = {1,2,3,4,5}
set1.add(6)#增加单个元素
print(set1)

tuple1 = (7,8)
set1.update(tuple1)#update添加的可以是元组
print(set1)
set1.update({9,10})#update添加的也可以是集合
print(set1)

# 集合的删除
set1.remove(10)#指定删除,不存在报错
print(set1)

set1.discard(10)#指定删除不存在不报错
print(set1)

set1.pop()
print(set1)#删除第一个,

# set1.clear()#清空
print(set1)

# 集合求差集 -或者difference都可以
set2 = {2,3}
print(set1 - set2)
print(set1.difference(set2))

# 集合求交集 &或者intersection都可以
print(set1 & set2)
print(set1.intersection(set2))

# 集合求并集 |或者union都可以
print(set1 | set2)
print(set1.union(set2))

# 集合求对称差集 并集减去交集的部分
print(set1 ^ set2)

#集合转列表
print(list(set1))

# 变量不为空
itname = ''
if itname:
    print('存在')
else:
    print('不存在')

```python
# 模块导入
# import 模块名
# from 模块名 import 类名(方法名,变量名)

# 导包
# from 包名 import 模块名

# 包内不希望 被导入的部分
if __name__ == '__main__':
    pass#不想被导入的部分

# __all__ = ['方法名','变量名']#列表中才能访问

# 内部文件调用外部文件
# from 外部模块名 import 函数名

# A模块里调用B,B模块里调用A会出现错误
# 解决方案:重写组织结构
#         把导入语句放在函数里要用其他模块语句之前
#         用__all__控制只能本模块适用

# sys模块
import sys
print(sys.path)#打印搜索包的顺序
print(sys.version)#打印python解释器的版本

# time模块
import time
print(time.time())#当前时间  时间戳
print(time.ctime(time.time()))#转化成正常日期格式
print(time.localtime(time.time()))# 元组格式时间  time.struct_time(tm_year=2020, tm_mon=8, tm_mday=20, tm_hour=10, tm_min=7, tm_sec=52, tm_wday=3, tm_yday=233, tm_isdst=0)
print(time.localtime(time.time()).tm_hour)#元组格式方便获取各种时间 年,月,日
print(time.mktime(time.localtime(time.time())))#把元组格式的时间改成时间戳(去小数点)
print(time.strftime('%Y-%m-%d'))#元组转自定义格式  不需要先取时间戳
# time.sleep(3)#暂停固定时间

# datetime模块
import datetime
print(datetime.date.ctime(datetime.date(2020,8,20)))#格式化时间 Thu Aug 20 00:00:00 2020
print(datetime.datetime.now())#当前时间 2020-08-20 11:02:25.973721
timedel = datetime.timedelta(hours=2,days=5)
print(datetime.datetime.now() + timedel)#对时间进行加减  对数据存在时间进行控制

# random模块
import random
print(random.random())#0-1之间的随机小数
print(random.randrange(1,10))#1-10随机整数,不包括10
print(random.randrange(1,10,2))#1-10随机奇数最后一个参数是步长
print(random.randint(1,10))#包括10
list1 = ['张三','李四','王五']
print(random.choice(list1))#随机抽
random.shuffle(list1)#打乱顺序
print(list1)

# 标注库
print(chr(65))#A
print(ord('A'))#65

# hashlib模块  加密算法 数据库里账号密码都是加密的
import hashlib
print(hashlib.md5('你好啊'.encode('utf-8')).hexdigest())#124756ef340daf80196b4124686d651c  md5加密模式

# 安装第三方模块
# 切换下面Terminal栏输入 pip install 模块名
import requests
# print(requests.get('https://www.12306.cn/index/').text)

# 正则表达式
import re
s = '大帅哥是我'
print(re.match('我',s))#第一个不相同直接返回None
print(re.search('我',s))#判断是否存在 #<re.Match object; span=(4, 5), match='我'> serach 找到就不找了
print(re.search('我',s).span())#输出位置 (4, 5)
print(re.search('我',s).group())#输出匹配数据 #我

# 用户名可以是数字或者字母 首位不能是数字,总长度6位以上
# /w 代表字母+数字+下划线
# /d代表 数字 /D代表非数字,其他类似
# /s 代表空格
username = 'admin001'
print(re.match('[a-zA-Z][0-9a-zA-Z]{5,}$',username))#{5,}5代表前面的格式*5个以上的字符 {5}代表只能5位 {5,6} 5位或者6位  $代表搜索到结尾 #<re.Match object; span=(1, 9), match='admin001'>
print(re.search('^[a-zA-Z][0-9a-zA-Z]{5,}$',username))#^代表搜索到结尾 #<re.Match object; span=(1, 9), match='admin001'>
msg = 'aa.py bb.py cc.py apy.txt'
print(re.findall(r'py\b',msg))#\b边界 findall找出所有符合条件的
print(re.findall(r'\w*\.py\b',msg))#/w代表前面有任意字符 .代表任意字符 \.代表 .

# 匹配0-100数字
n = '39'
print(re.match('[1-9]?\d',n))#?代表前面的可以有也可以没有 ?代表0或1次
# print(re.match('[1-9]*',n))# *代表>=0 +代表>=1
print(re.match('[1-9]?\d$|100$',n))# 0-99 | 100

# 126,163,qq邮箱 5-20位前缀
email = '1104815607@qq.com'
print(re.match(r'\w{5,20}@(126|163|qq)\.com$',email))#(word|word)列表任意一个

# 爬取html标签
msg = '<html><h1>abc</h1></html>'
print(re.match(r'<(?P<name1>\w+)><(?P<name2>\w+)>(.+)</(?P=name2)></(?P=name1)>',msg).group())
print(re.match(r'<([0-9a-z-A-Z]+)><([0-9a-z-A-Z]+)>(.+)</\2></\1>$',msg))

# 数字替换
print(re.sub(r'\d+','90','java:100,python:99'))#java:90,python:90

# 切割
print(re.split(r'[:,]','java:100,python:99'))#['java', '100', 'python', '99']  括号里的符号遇到都切一刀

# 爬电话号码
num = '0570-3099758'
print(re.match(r'(\d{3}|\d{4})-(\d{7})',num).group(1))#把区号分成第一组并提取 0570

# 贪婪和非贪婪
msg = 'abc123abc'
print(re.match(r'abc(\d+)',msg))#match='abc123' 贪婪
print(re.match(r'abc(\d+?)',msg))#match='abc1' 加?变成非贪婪

# 爬取网上图片
# path = '<img class="BDE_Image" src="http://tiebapic.baidu.com/forum/w%3D580/sign=8f111cb19a1001e94e3c1407880f7b06/0bafa40f4bfbfbed87b963276ff0f736aec31f81.jpg" size="156449" changedsize="true" width="560" height="703">'
# import requests
# response = requests.get(re.match(r'<img class="BDE_Image" src="(.*)"',path).group(1))
# with open('aa.jpg','wb') as wstream:
#     wstream.write(response.content)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值