Python基础

print("hello world!!")  # 单行注释
'''
    多行注释
    ctrl+/ 注释/取消注释
    ctrl+ enter 在下方插入一个空行
    
'''
print("hello world!!")
# -----------------------------------------------------------
# 变量: 内存地址的别名,用来存储数据
# 定义: 变量名 = 数据值    变量名要遵循标识符 定义规则
name = "messi"
age = 36
print(name, "'s age is", age)
# -----------------------------------------------------------
#    数据类型:数字(int,float,long,complex)、布尔、字符串、列表、元组、字典
# 可以用type()查看数据类型
result = 10
print(type(result))
result = "hello"
print(type(result))
result = True
print(type(result))
# -----------------------------------------------------------
# keyword
import keyword

print(keyword.kwlist)
# -----------------------------------------------------------
# 格式化输出,格式化占位符,%s 字符串, %d int , %f 浮点型float
print("我的名字是%s,我的年龄是%d" % (name, age))
print(f"我的名字是{name},我的年龄是{age}")  # f-string
# -----------------------------------------------------------
# 输入: input()函数   input(给用户的提示信息)  得到的数据都是字符串类型.
name = input("what is your name?")
# -----------------------------------------------------------
# 类型转换: 转换后类型名(需转换的变量) 如:float(age) 不改变原始数据,生成新的数据
# eval() 还原原来的数据类型   变量如果没有定义,则不能使用
a1 = float(age)
# -----------------------------------------------------------
# + - * / //(取整除) % **(指数)
# 逻辑运算符  and  or not    短路性
# --------------------------------------------------------------------------------------------------------------------
if age > 18:
    print("i'm not a teenager")
# import random  randint(a,b)  返回a-b之间的一个整数
'''
    - 三目运算符:变量 = 表达式1 if 判断条件 else 表达式2 
    - for循环:
        for 变量 in 字符串:
            代码
        for 循环也称为for遍历
'''
num = 2 if age < 10 else 1
print(num)
# -----------------------------
# 打印正方形-while
i, j = 0, 0
while i < 5:
    j = 0
    while j < 5:
        print("*", end=" ")
        j += 1
    print()
    i += 1
# 打印正方形-for
for i in range(0, 5):
    for j in range(0, 5):
        print("*", end=" ")
    print()
# -----------------------------
# 打印三角形 - while
i = 1
while i < 6:
    j = 0
    while j < i:
        print("*", end=" ")
        j += 1
    print()
    i += 1
# 打印三角形 -  for
for i in range(5):
    for j in range(i + 1):
        print("*", end=" ")
    print()
'''
    只能用在循环中
   break 终止循环
   continue 结束本次循环
'''
for i in range(7):
    if i == 6:
        print("<6")
        break
else:
    print(">6")
'''
 ----------------------------字符串-------------------------------
 字符串 带引号的内容 ‘ ‘ 、“ ”、''' '''都可以
 若字符串本身包含单引号,则用双引号,若包含双引号,则用单引号,或统一使用三引号
 字符串*3 => 重复
 输入: input()
    input函数得到的就是字符串
 输出: f-string、print()函数 %s
 下标:
    正数下标:第一个数开始,从零开始到+∞
    负数下标:最后一个数开始,从-1开始到-∞
    使用:变量[下标]
 切片:
    对操作的对象截取其中一部分的操作,字符串、列表、元组都支持切片操作
    语法:[起始:结束:步长] 到结束的前一位
    end 不写,则可以取到最后一个位置
    start不写,从第一个开始
    end start都不写, 冒号必须写
    步长可以是负数
    str[::-1]字符串逆置
 常见操作:
    find() 在字符串中查找是否存在某个字符串
        str.find(sub_str,start,end) 在str中查找sub_str,从start到end
        返回值:找到则为索引,没找到则为-1
        rfind 从右边(后边)开始查找
    index :
        str.index(sub_str,start,end) 在str中查找sub_str,从start到end
        返回值:找到则为索引,没找到则报错
        rindex 从右边(后边)开始查找
    count() 统计出现的次数
        str.count(sub_str,start,end)
    replace()
        str.replace(str1, str2, count = str.count(str1))
        count : 替换次数,默认全部替换
        把str1替换成str2 
        返回值:得到一个新的字符串,不会改变原来的字符串
    split()
        str.split(sub,count) 将str字符串 以sub为分隔符分割count次
        返回值:一个列表[]
    join()
        str.join(str1) 将str插入到str1中每个元素之间,构造一个新的字符串
        str1:可迭代对象,可以将str添加到可迭代对象的两个元素之间
        如:
            "_".join("hello")
            结果:h_e_l_l_o
    capitalize 首字母大写
    title 每个单词首字母大写
    upper 所有字母大写
    lower 所有字母小写
    startswith 以什么开头
    endswith 以什么结尾
    lstrip 去除左边空格
    rstrip 去除右边空格
    strip  去除空格
    partition 分割
    
'''
name = "messi"
name = name * 3
print(name)

my_list = ["Lionel", "Andres", "Messi"]
print("_".join(my_list))
'''
 ----------------------------列表-------------------------------
 list []
    支持下标与切片 与字符串类似
    字符串不能通过下标修改列表中的数据,但是列表可以
    遍历:
        for/while
    添加操作: 都是直接在原列表中添加,不会返回新的列表
        append() 向列表尾部追加数据
        insert() list.insert(index) 在指定位置添加数据
        extend() list.extend(可迭代对象) 将可迭代对象中的每个数据添加到原来列表的末尾
    查询:
        列表中无find方法!!!!
        index() 根据数据值查找元素下标
        count() 统计出现次数
        in/not in 是否存在,存在true,否则false
    删除:
        del() del list[index] 删除下表为index的数据
        pop() 根据下标删除,默认删除最后一个数据(可指定下标),并返回删除的数据
        remove() 直接删除原列表中的数据,按值
    排序:
        前提:列表中的数据类型一致
        直接在原列表中排序
        sort() list.sort()
        sort(reverse = True ) 从大到小
        sorted(list):不会在原列表中排序,会得到一个新的列表
    逆置:
        list[::-1] 得到一个新列表
        list.reverse() 在原列表中排序
    enumerate() 带下标的遍历,将元素所在下标与元素数据组合在一起,变成元组
        for i in enumerate(list):
            print(i)
'''
# 定义空列表
my_list = []
my_list = list()
# 定义带数据的 ,数据之间用逗号隔开
my_list = [1, 3.14, True, "ISSSSS"]
my_list[-1] = "messi"
print(my_list)
# 遍历
for i in my_list:
    print(i)
# 添加
my_list.append("hello")
print(my_list)
my_list.insert(1, "d")
print(my_list)
b = [1, 2, "ddd"]
my_list.extend(b)
print(my_list)
# --------------------随机分房间案例--------------------
import random

names = ["A", "B", "C", "D", "E", "F", "G"]
room = [[], [], []]
for name in names:
    index = random.randint(0, 2)
    room[index].append(name)
for r in room:
    for n in r:
        print(n)
    print("*" * 30)
'''
 ----------------------------元组-------------------------------
    元组定义()
    元组中元素与列表类似,但是不能修改
    支持下标和切片
    定义一个元素的元组:(2,)一定要有逗号
 '''
# 定义空元组
tuplee = ()
# 定义一个元素的元组,
tuplee = (3,)

'''
 ----------------------------字典-------------------------------
 {}定义,key-value 键值对
 如: info = {'name' : 'messi','age' : 36} 一个 key:value 键值对是一个元素
 key可以是字符串/数字,不能是列表
  访问 : 没有下标的概念,用key来访问value,如:
    info['name'],如果key值不存在,报错
    info.get('name') 如果key不存在,返回none,不会报错
    info.get(key,value) 如果key存在,返回key对应value值,若不存在则返回传入的value
  数据添加与修改:
    使用key值:
        字典[key] = 数据值; 如果key值存在,则为修改,若不存在则为新增。
        注意: key值的int 1与float 1.0为一个key值
  删除:
    根据key值删除   del my_dict[key] /  my_dict.pop(key)返回值是key对应的value值 key不存在会报错
    清空字典: 字典.clear() 
    删除字典 del 字典名
  遍历:
    for循环遍历:
        for key in my_dict2:
            print(my_dict2[key])
    字典.keys() 获取所有的key,得到的类型是dict_keys,可以用list()转换为列表,可用for循环遍历
    字典.values() 获取所有的value,得到的类型是dict_values 
    字典.items() 获取所有的键值对
        for k, v in dict.items():
            print(k,v)
'''
# 空字典
my_dict = {}
my_dict1 = dict()
# 有数据的字典
my_dict2 = {'name': 'messi', 'age': 36}
print(my_dict2.keys())
print(my_dict2.values())
print(my_dict2.items())
for key in my_dict2:
    print(my_dict2[key])
'''
 ----------------------------公共方法-------------------------------
 + 支持字符串、列表、元组进行操作,得到新容器
 *整数 支持字符串、列表、元组进行操作,得到新容器
 in/not in  判断存在或者不存在,支持字符串、列表、元组、字典进行操作
            注意:如果是字典,判断的是key值是否存在
 len(item)
 max(item) 对于字典来说比较的是key的值
 min(item)
 del(item) 
 '''
'''
 ----------------------------函数-------------------------------
 定义函数: def 函数名(参数): #遵循规则,见名知意
            ‘’‘ 
            文档注释, 可以用help(函数名)来查看
            ‘’‘
            函数体
            return
  想要在函数体内部修改全局变量的值:要加global关键字
  
  return 返回多个数据值:将数据值放入容器中返回
 函数传参
    def func(a,b,c):
        print(f"a:{a}")
        print(f"b:{b}")
        print(f"c:{c}")
  位置传参: 按照形参的位置将实参的值传给形参
  func(1,2,3)
  关键字传参:指定实参传给哪个形参,注意点: 关键词必须是函数的形参名
  func(a=10,b=39,c=3)
  混合使用:先写位置参数,再写关键字参数
  func(10,b=90,c=8)√
  func(a=10,2,3) ×
 形参
  缺省参数:·
    形参,在函数定义时候,给形参一个默认值,这个形参就是缺省参数 
    注意:缺省函数要写在普通参数后面
  不定长参数:
    在形参前面加上一个*,其变为不定长元组形参,可以接受所有的位置实参,类型是元组
    在形参前面加上两个**,其变为不定长字典形参,可以接受所有关键字实参,类型是字典。
    def func(*args , **kwargs)
        print(args)
        print(kwargs)
  形参完整格式:
   普通形参、不定长元组形参、缺省形参、不定长字典形参
   如:def func(a,*args,b=1,**kwargs)
 拆包:
    组包:将多个数据值组成元组给一个变量: 如 a=1,2,3
    拆包:将容器中的多个数据给到多个变量,数据个数要与变量个数保持一致。
        所有容器都可以,字典是key值
    应用:
        交换两个变量: a,b = b,a
 引用:
    python中,值靠引用来传递
    可以使用id()查看变量的引用,可将id值认为是内存地址的别名
    赋值运算符可以改变变量的引用
 可变与不可变类型: 在不改变变量引用的前提下,能否修改变量中引用中的数据
    不可变:int float bool str tuple
    可变:list dict
    交互终端中,小整数(-5~255)使用相同的引用地址,如果不是小整数则开辟新的内存
    += 对于列表来说,类似extend方法,不会改变列表的引用地址
 递归:
    ①自己调用自己
    ②要有递归出口
 匿名函数: lambda关键字定义的函数为匿名函数
    lambda 参数列表:表达式
    1. 无参无返
        lambda :函数代码
    2. 无参有返
        lambda :表达式
    3. 有参无返 
        lambda a,b :print(a,b)
    4. 有参有返
        lambda a,b:a+b
 
 '''
# return 返回多个数据值
def func(a, b):
    c = a + b
    d = a - b
    return c, d  # 默认是组成元组进行返回.
aa, bb = func(10, 2)

# 匿名函数
# 1. 无参无返
def func1():
    print("hello")
(lambda: print("hello"))()  # 调用
f1 = lambda: print("hello")  # 调用
f1()
# 2. 无参有返
def func2():
    return 1+2
f2 = lambda :1+2
print(f2())
# 3. 有参无返
def func3(name):
    print(name)
f3 = lambda name:print(name)
f3("messi")
# 4. 有参有返
def func4(a,b):
    return a+b
f4 = lambda a,b :a+b
print(f4(3, 4))

#函数作为参数
def my_cal(a,b,func):
    print(func(a,b))
def add1(a,b):
    return a+b

my_cal(1,4,add1)

'''
        list排序
    list.sort(self,key,reverse) key用于指定排序规则
    
'''
list1 = [
    {'name':'fa','age':12},
    {'name': 'b', 'age': 12},
    {'name': 'c', 'age': 52},
    {'name': 'd', 'age': 12},
]
list1.sort(key = lambda x:x['age'])
# 如果有两种规则:
#       sort(key=lambda 形参:(排序规则1,规则2))
list1.sort(key = lambda x :(x['age'],x['name']))
'''
    列表推导式:快速生成一个列表
    1. 变量 = [生成数据的规则 for 临时变量 in xxx]
    如:mylist = [i**2 for i in range(20)]
    2. 变量 = [生成数据的规则 for 临时变量 in xxx if xxx]
    3. 变量 = [生成数据的规则 for 临时变量 in xxx for j in xxx]
    如: mylist = [(i,j) for i in range(3) for j in range(2)]
    -------------------------------------------------------
    字典推导式:
    变量 = {生成数据的规则 for 临时变量 in xxx}
    my_dict = {key :value for i in range(3)
'''
'''
---------------------集合set---------------------
    定义: {数据,数据}
    特点: 
        1. 集合中数据必须为不可变类型,字典中的key也必须是不可变类型
        2. 集合是可变的
        3. 集合是无序的,不支持下标
        4. 集合是没有重复数据的,可以用来去重
    集合、列表、元组之间可以互相转换
'''
'''
    文件操作
    文件在硬盘中以二进制方式存储
    1. 打开文件
        open(file, mode='r', encoding=None)
        file要操作的文件名,类型是str
        mode文件打开的方式,r(read)只读打开,w(write)只写打开,a(append)追加打开
        encoding 文件编码格式 常见:GBK/UTF-8
        返回值:文件对象,后续所有文件操作都需要这个文件对象进行
    2. 读写文件
        文件对象.read()
        文件对象.readline()
        文件对象.readlines() 返回值是列表,列表中每一项是一个字符串,即一行的内容
        mode = ‘w'  文件对象.write(写入文件的内容)
    3. 关闭文件
        文件对象.close() 将内存中三大文件同步到硬盘中
    
  计算机最小单位:bit(位),只有0/1 
  字节:基本单位byte
  1 byte = 8 bit   
    4. 二进制文件: 只能用二进制方式打开,不能指定encoding
        rb、wb、ab
    f.write('nihao'.encode()) encode将str转换为二进制格式的字符串
    buf.decode() 解码
    5. 文件备份
        只读打开文件
        读取文件内容
        关闭文件
        只写打开文件
        内容写入文件
        关闭文件
    找到后缀名. rfind('.')
'''

# 读文件
# file.read(n)一次读取n字节的内容,不写默认读取全部内容
file = open("1.txt")
buf = file.read()
file.close()
# 按行读取 file.readline() 一次读取一行的内容
# print(buf)
# 写文件 以w方式打开文件,若文件不存在会创建,若文件存在则会覆盖原文件
file = open('a.txt','w')
file.write("hello messi")
file.close()
 # 以a方式打开文件,追加内容,在文件的末尾写入内容,写入也用write
file = open('a.txt','a')
file.write("lionel andres messi")
file.close()
# 读取大文件
while True:
    buf = file.readline()
    if buf:
        print(buf,end=' ')
    else:
        break

# 无换行
while True:
    buf = file.read(4096)
    if buf:
        print(buf, end=' ')
    else:
        break

记录学习~~~

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值