Python的基础学习

第一章

安装以及简单的运用pyCharm

1.编写第一个程序:打出你好世界!!

2.常见会出现的问题

(1)命令提示符的打开:win+R同时按,再输入cmd

(2)命令提示符内,输入python出现‘python’不是内部命令或外命令,也不是可运行的程序或批处理文件

原因:在安装python时没有勾选:add python 3.10 to PATH的选项

(3))命令提示符内出现:无法初始化设备PRN

(4)执行出现SyntaxError:invalid character' "'(U+201C)

3.python解释器:翻译代码,交给计算机运行

解释器的位置:Python的安装目录中一个叫Python.exe的文件

第二章

一、Python的基础知识

字面量:在代码中,被写下来的固定值

常见的6种(数据)类型

1.字符串:

又称文本,由任意数量的字符如中文、英文、各类符号、数字等组成。

在Python中,字符串需要用英文的双引号("")包起来,然后可以得出用引号包起来的都是字符串。如:"黑马程序员"

2.注释:

(1)单行注释:#开头,#右边的所有文字当做说明,不参与代码的运行,起相应代码的解释作用,建议#与注释之间间隔一个空格

(2) 多行注释:''' '''三个单引号或""" """三个双引号

3.变量:

在程序运行时,能储存计算结果或能表示值的抽象概念(就是在程序运行时,记录数据用的)

变量名=变量值

# 定义一个变量,用来记录钱包余额
money=50  
# 通过print语句输出变量记录
print("钱包还有:",money)
# 买了一个冰淇淋,花费10元
money = money-10
print("钱包还剩:",money)

4.查看变量存储的数据类型(type())

name = "黑马程序员"
print(type(name))
print(type(666))
print(type(12.14))
  • 在Python中变量没有类型,变量存储的数据才有类型
5.数据类型的转换

这三个语句都是带有结果的(返回值),可以用print直接输出,也可用变量存储结果值

# 将数字转换为字符串,万物皆可转字符串
num_str = str(111)
print(type(num_str))
# 将字符串转换为数字,字符串的内容需要是数字次啊能转换
num = int("111")
print(type(num))
# 浮点数转换成整数
float_int = int(12.45)
print(type(float_int))
6.标识符:在用户编程时使用的命名名字

标识符命名中,只允许出现:英文、中文、数字、下划线(_)这四类元素

不推荐使用中文,数字不可以开头,可以区分大小写

不可以使用的关键字:同样大小写敏感Type≠type

标识符的规范:见名知意、下划线命名(多个单词用下划线隔开)、英文字符建议全小写

7.运算符

print("1+1 = ",1+1)
print("1-1 = ",1-1)
print("1*1 = ",1*1)
print("1/1 = ",1/1)

num=1
num +=1
print("num +=1",num)
num -=1
print("num -=1",num)
num *=1
print("num *=1",num)
num /=1
print("num /=1",num)
num %=1
print("num %=1",num)
num **=1
print("num **=1",num)
num //=1
print("num //=1",num)#取整除

二、字符串的相关知识

(1)定义方法:
# 单引号定义法
name = '黑马程序员'
print(type(name))
# 双引号定义法
name = "黑马程序员"
print(type(name))
# 三组引号命名法
name = """黑马程序员"""
print(type(name))
# 在字符串内包含双引号
name = '"黑马程序员"'
print(name)
#在字符串内包含单引号
name = "'黑马程序员'"
print(name)
# 使用转译字符“\”解除引号的效用
name = "\"黑马程序员\""
print(name)
name = '\'黑马程序员\''
print(name)
(2)字符串的拼接

# 字符串字面量和字符串变量的拼接,“+”只能用于字符串拼接
name = "黑马程序员"
address = "建材城"
print("我是:" +name+",住宅在:"+address+"")
(3)字符串格式化

# 1.通过占位符的形式,完成数字和字符串的拼接
class_num = 57
avg_salary = 1688
message = "Python大数据学科,北京%s期,毕业条件:%s"%(class_num,avg_salary)
print(message)

num1 = 11
num2 = 11.345
print("数字11宽度限制为5,结果是:%5d" % num1)
print("数字11宽度限制为1,结果是:%1d" % num1)
print("数字11.345宽度限制为7,小数精度2,结果是:%7.2f" % num2)
print("数字11.345宽度不限制,小数精度2,结果是:%.2f" % num2)
# 2.f"{占位}"
name = "传智博客"
set_up_year = 2006
stock_price = 19.99
# f:format
print(f"我是{name},成立于:{set_up_year}年,我今天的股价是:{stock_price}")
#表达式(具有明确结果的代码语句)进行字符串格式化
print("1 * 1 的结果是: %d" %(1 * 1))
print(f"1 * 2 的结果是: {1 * 2}")
print("字符串在Python中的类型名是:%s" %type("字符串"))

三、数据输入(input语句)

(1)input语句的定义

# 1.
print("请告诉我你是谁?")
name = input()
print("Get!!!你是:%s" % name)
# 2.
name = input("请告诉我你是谁?")
print("Get!!!你是:%s" % name)

# 输入数字类型,不管你是什么类型,input默认接受的类型都是字符串,若想转换成其他类型可进行数据类型的转换
num = input("请告诉我你的银行卡密码:")
# 数据类型的转换
num = int(num)
print("你的银行卡密码是:",type(num))

第三章

一、布尔类型和比较运算符

布尔的定义:表达现实生活中的逻辑,即真和假,True表示真(本质上是数字1),False表示假(本质上是数字0)

定义变量存储布尔类型数据:变量名称 = 布尔类型字面量。

result = 10 > 5
print(f"10 > 5的结果是:{result},类型是:{type(resul)}")

比较运算符

# 定义自变量存储布尔类型的数据
bool_1 = True
bool_2 = False
print(f"bool_1变量的内容是:{bool_1},类型是:{type(bool_1)}")
print(f"bool_2变量的内容是:{bool_2},类型是:{type(bool_2)}")
# 比较运算符的使用
# ==
num1 = 10
num2 = 10
print(f"10==10的结果是:{num1 == num2}")
# !=
num1 = 10
num2 = 15
print(f"10!=15的结果是:{num1 != num2}")

name1 = "hero"
name2 = "name"
print(f"hero!=name的结果是:{name1 != name2}")
# >.<.>=,<=
num1 = 10
num2 = 5
print(f"10>5的结果是:{num1 > num2}")
print(f"10<5的结果是:{num1 < num2}")

num1 = 10
num2 = 10
print(f"10>=5的结果是:{num1 >= num2}")
print(f"10<=5的结果是:{num1 <= num2}")

二、if语句的基本格式

if 要判断的条件 :

条件成立时,要做的事情

# 定义变量
age = 18
if age >= 18 :
    print("已经成年啦")
print("时间过得真快")

# 编写输入年龄判断是否成年
# 1.定义变量,并输入
age = input("请输入你的年龄")
# 2.因为input默认输出时为字符串类型,需要转化为数字
age = type(age)
# 3.判断是否成年
if age>=18:
    print("您已成年,需要支付10元门票")
print("祝您玩得愉快")

三、if else语句、if elif else语句

(一)if else语句书写的方法:

age = type(input("请输入你的年龄"))
if age>=18:
    print("您已成年,需要支付10元门票")
else:
    print("您未成年,可以免费游玩")
print("祝您玩得愉快")

#else,不需要判断条件,前面也不需要四个空格作为缩进
(二)if elif else语句书写的方法:

# 定义一个数字
num = 3
# 通过判断获取猜想的数字,通过if和elif的组合进行猜想比较
if int(input("猜想一个数字:"))==num:
    print("恭喜第一次就才对了")
elif int(input("再猜想一个数字:"))==num:
    print("猜对了")
elif int(input("猜错了,再猜一次:"))==num:
    print("恭喜你,在最后一次机会中猜对了")
else:
    print("对不起,猜数字次数已经用完了,很遗憾都猜错了!")

四、判断语句的嵌套

'''只有满足第一个if后才能执行第二个if。嵌套的关键点:在于空格缩进
                              通过缩进,来决定语句的层次关系
if 条件1:
    满足条件去,做的事情1
    满足条件去,做的事情1
    if 条件2:
        满足条件去,做的事情1
        满足条件去,做的事情1
'''
print("欢迎来到黑马动物园")
if int(input("请输入你的身高"))>120:
    print("身高超出限制,不能免费")
    print("但是,如果vip超过3,可以免费")

    if int(input("请输入你的vip等级"))>=3:
        print("恭喜你,vip级别达标,可以免费游玩")
     else:
        print("对不起,vip等级不够,需要付费")
else:
    print("欢迎小朋友免费游玩")


age = 20
year = 3
if age>=18:
    print("你是成年人")
    if age < 30:
        print("年龄达标")
        if year > 2:
            print("恭喜年龄和入职时间都达标,可以领取礼物")
        elif level > 3:
            print("恭喜你年龄和级别达标,可以领取礼物")
        else:
            print("对不起,只有年龄达标不能领取礼物")

    else:
        print("年龄超出,不能领取")

else:
    print("年龄太小,不能领取")
# 1.构件一个随机数字
import random
num = random.randint(1,10)

guess_num = int(input("请输入一个数字"))

# 2.通过判断语句进行数字判断
if guess_num == num:
    print("猜对了")
else:
    if guess_num >num:
        print("数字猜大了")
    else:
        print("数字猜小了")

    guess_num = int(input("请第二次输入一个数字"))

    if guess_num == num:
        print("恭喜你第二次猜对了")
    else:
        if guess_num > num:
            print("数字猜大啦")
        else:
            print("数字猜小啦")

        guess_num = int(input("请第三次输入一个数字"))

        if guess_num == num:
            print("恭喜你第三次猜对了")
        else:
            print("机会用完啦,真遗憾没有猜中")

第四章 Python循环语句的学习

一、while循环的基础语法

'''只要条件满足,会无限循环执行
while 条件:
    条件满足时,做的事情1
    条件满足时,做的事情2
    条件满足时,做的事情3
'''
i = 0
while i<100:
    print("我要过四级")
    i +=1

i = 0
sum = 0
while i<100:
    sum +=i
    i+=1
print(f"1-100的累计和是:{sum}")
# 案例
import random
num = random.randint(1,100)
count = 0

flag = True
while flag:
    guess_num = int(input("请输入你猜测的数字"))
    count +=1
    if guess_num == num:
        print("猜中了")
        flag = False
    else:
        if guess_num > num:
            print("你猜大了")
        else:
            print("你猜小了")
print(f"你一共猜中了:{count}次")

二、while循环的嵌套运用

# 记单词100天,直到考过四级,记单词十每天需要记20个后才开始玩
# 定义 i 为天数,j 每天为记单词的个数

i = 0 
j = 0 
while i<=100:
    print(f"今天是记单词的第{i}天,继续记单词")

    #内循环
    while j <=20:
        print(f"今天记的第{j}个单词")
        j += 1
    print(f"我记完了{j-1}个单词")
    i += 1
print(f"坚持的第{i-1}天,四级成功过关")

若想print输出的语句不换行,可以:print("语句",end='')

\t:制表符,可用于表示多行对齐

# 打印九九乘法表
i = 1
while i<=9:
    j = 1
    while j<=i:
        print(f"{j}*{i}={j*i}\t",end='')
        j += 1
    i +=1
    print()

三、for循环的基础语法

1. for循环

for 临时变量 in 待处理数据集:

循环满足条件时执行的代码

# for循环就是将字符串的内容依次输出,所以for循环也叫做遍历循环
name = "itheima"
for x in name:
    # 将name的内容,挨个取出赋予x临时变量
    # 就可以在循环体内对x进行处理
    print(x)

无法定义循环条件,只能被动去除数据处理

要注意,循环内的语句,需要有空格缩进

name = "itheima is a brand of itcast"
# 定义一个变量统计a的个数
i=0
for x in name:
    if x == "a":
        i+=1
print(f"被统计的字符串中有{i}个a")

2. range语句

(1)range(num)获取一个从0开始的数字序列(不含num本身):

range(5)取得的数据是:[0,1,2,3,4]

(2)range(num1,num2)获取一个从num1开始到num2的数字序列(不含num2本身):range(5,10)取得的数据是:[5,6,7,8,9]

(3)range(num1,num2,step)获取一个从num1开始到num2结束的数字序列(不含num2本身)数字之间的步长,以step(默认为1)为准:

range(5,10,2)取得的数据是:[5,7,9]

# 1到100(不含100本身)范围内有多少个偶数
i = 0
for x in range(1,100):
    if x%2==0:
        i += 1
print(f"一共有{i}个偶数")
3.for循环的临时变量

作用域:循环内

这种限定是规范的限定,而是非强制性的限定,不遵守也能正常运行,但是不建议,如果需要访问临时变量,可以预先在循环外去定义它

四、for循环的嵌套应用

# 编写每天都记单词,直到记完为止;每次记单词的流程是记20个单词然后休息
i = 0
for i in range(1,101):
    print(f"今天是记单词的第{i}天,加油,继续坚持")
    #为了记完单词,每天需要记20个
    for j in range(1,21):
        print(f"这是记的第{j}个单词")
    print("今天的单词记完了,可以休息了")

print(f"第{i}天后,3601个单词全部记完啦!")



# 打印九九乘法表
for i in range(1,10):
    for j in range(1,i+1):
        print(f"{j}*{i} = {j *i}\t",end=' ')
        j+=1
    i+=1
    print()

五、循环中断:break和continue

1.continue循环

上面的示例只执行语句1,2,4,不执行语句3

continue只中断所在语句的循环

2.break循环

遇到break后直接跳出全部循环,执行循环以外的语句

# break跳出循环
for x in range(1,6):
    print("语句1")
    for y in range(1,5):
        print("语句2")
        break
        print("语句3")
    print("语句4")
# 只执行语句1,2,4循环



# 发工资案例
import random
i = 1
money = 10000
for i in range(1,21):
    num = random.randint(1, 10)
    if num < 5:
        print(f"你好员工{i},你的绩效为{num},低于5,不发工资,下一位")
        continue
    if money >=1000:
        money -=1000
        print(f"你好员工{i},你的绩效为{num},工资发放1000元,公司还剩{money}元")
    else:
        print(f"你好员工{i},公司还剩{money}元,工资不足,下月发放")

第五章 函数

认识函数

1.函数的定义:

函数:组织好的,可以重复使用的,用来实现特定功能的代码段

'''参数和返回值不需要时可以省略
def 函数名(传入参数):
    函数体
    return 返回值
'''
def say_hi():
    print("你好啊")
# 调用函数
say_hi()

函数的传入参数:

# 运用函数完成加法
# 在以下代码中先执行add(5,6),再重新按照顺序执行,也就是说先执行被调用的函数
def add(x,y):
    result = x+y
    print(f"{x}+{y}的计算结果为:{result}")
add(5,6)

 def chushi(x):
    print("请出示你的健康码。体温测量中")
    if x <= 37.5:
        print(f"你的体温为{x},不需要隔离")
    else:
        print(f"你的体温为{x},需要隔离")
chushi(36)
2.函数的返回值:

def check(m,n):
    result = m + n
    return result

i = check(5,8)
print(i)
# 当在函数中执行到return语句时,它会默认函数执行完毕,就不再执行后面的语句,所以在编写代码的时候记得将return放在函数的最后
3. None类型:

# 无return语句的函数返回值
def say_hi():
    print("你好呀!")
    
result = say_hi()
print(f"无返回值函数,返回的内容是:{result}")
print(f"无返回值函数,返回的内容类型是:{type=(result)}")
#主动返回none的函数
def say_hi2():
    print("你好呀!")
    return None

result = say_hi2()
print(f"无返回值函数,返回的内容是:{result}")
print(f"无返回值函数,返回的内容类型是:{type=(result)}")
#None用于if判断
def chec_age(age):
    if age > 18:
        return "SUCCESS"
    else:
        return None
result = chec_age(16)
if not result:
    # 进入if表示result是None值,也就是False
    print("未成年,不可进入")
    
#None永贵声明无初始内容的变量
name = None
4.函数的说明文档
# 定义函数,进行文档说明
def add(x,y):
    """
    add函数可以接受两数相加的功能(对函数进行总体解释)
    :param x:形参x表示相加的其中一个数字
    :param y:形参y表示相加的另一个数字
    :return:表示两数相加的结果
    """
    result = x + y
    print(f"两数相加的结果是:{result}")
    return result

add(5,6)# 接触可以出现一个方框进行解析
5.函数的嵌套调用

定义:一个函数的里面又调用了另外的函数

在函数a中调用了另外的一个函数b,那么先把函数b中的任务都执行完之后才会回到上次函数a执行的位置

6.变量的作用域

定义:变量的作用域指的是变量的作用范围(变量在哪里可用,在哪里不可用)

主要分为两类:局部变量金和全局变量

局部变量:定义在函数体内部的变量,即只在函数体内部生效

# 局部变量的演示
def testA():
    
    #定义局部变量
    num = 100
    print(num)
    
testA()  # 输出100
print(num) # 报错:name 'num' is not defined
# 变量a是定义在·testA·函数内部的变量,在函数外部访问则立即报错
# 局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。(出了函数体局部变量就不能使用)

全局变量:在函数体内、外部都能生效的变量

# 定义全局变量
num = 100
def testB():
    print(num) # 访问全局变量num,并打印变量num存储的数据
    
def testC():
    print(num) # 访问全局变量num,并打印变量num存储的数据
    
testB() # 100
testC() # 100

global关键字

作用:让函数内部定义的变量变为全局变量

num = 100
def A():
    print(num)
    
def C():
    global num # 设置内部定义的变量为全局变量
    num = 200 # 局部变量
    print(num)
    
A() # 结果为100
C() # 结果为200
print(f'全局变量num = {num}') # 结果为200
# 实战
money = 500000
name = None
# 要求输入客户姓名
name = input("请输入你的姓名:")
# 定义查询的函数
def query(show_header):
    if show_header:
      print("-----------查询余额---------------\n")
    print(f"{name},您好!您的余额为:{money}元")
# 定义取款函数
def saving():
    global money # money在函数内部定义为全局变量
    num = int(input("请输入您的存款金额"))
    money += num
    print("--------------存款----------------\n"
          f"{name},您好!您的存款为{num}元成功\n"
          f"{name},您好!您的余额{money}为\n")

    # 调用query函数查询
    query(False)

# 定义取款函数
def get_money():
    global money
    num = int(input("请输入您的取款金额"))
    money -= num
    print("--------------取款----------------\n"
          f"{name},您好!您的存款为{num}元成功\n"
          f"{name},您好!您的余额为{money}元\n")
    # 调用query函数查询
    query(False)

# 定义主菜单函数
def main():
    print("-----------------------主菜单---------------------------")
    print(f"{name},您好!欢迎来到黑马银行ATM,请选择你需要办理的业务:")
    print("查询余额\t【请输入1】")
    print("取款\t\t【请输入2】")
    print("存款\t\t【请输入3】")
    print("退出\t\t【请输入4】")
    return input("请输入你的选择:")

# 设置无限循环,确保程序不退出
while True:
    keyboard_input = main()
    if keyboard_input == "1":
        query(True)
        continue  # 通过continue继续下一次循环,一进来就是主菜单
    elif keyboard_input == "2":
        saving()
        continue
    elif keyboard_input == "3":
        get_money()
        continue
    else:
        print("程序退出啦")
        break

第六章

一、数据容器

概念:一种可以容纳多份数据的数据类型,容纳的每一份数据称之为1个元素,每一个元素,可以是任意类型的数据,如字符串、数字、布尔

Python中的数据容器:list(列表)、tuple(元组)、str(字符串)、set(集合)、dict(字典),他们各有各的特点,但都满足可容纳多个元素的特性。

二、list(列表)
1.认识列表

#定义一个列表
["itheima","itcast","python"]
print(my_list)
print(type(my_list))

my_list = ["ithenima",666,True]
print(my_list)
print(type(my_list))
# 可以正常运行,说明列表可以装任意类型的数据,最后都是列表类型

# 定义一个嵌套列表
my_list = [[1,2,3,4],[5,6,7,8]]
print(my_list)
print(type(my_list))
2.列表的下标索引:

3.嵌套列表的下标索引:
# 通过下标索引取出对应位置的数据
my_list = ["tom","list","Rose"]

# 通过下标索引取出对应位置的数据
print(my_list[0])
print(my_list[1])
print(my_list[2])

# 错误示范,取出超过下标索引的数据会报错
print(my_list[3])

# 通过下标索引取出数据(反向取出)
print(my_list[-1])
print(my_list[-2])
print(my_list[-3])

# 取出嵌套列表元素
my_list = [[1,2,3,],[4,5,6]]
my_lisy[0][1] #取出的是2
print(my_list[0][1])
4.列表的常用操作,增删改查
# 演示数据容器之间:list列表的常用操作
mylist = ["itheima","itchange","itgcxy"]
# 1.1查找某元素在列表内的下标索引
index = mylist.index("itchange")
print(f"itchange在列表中的下标索引值是:{index}")

# 1.2如果查找元素不存在,会报错
index = mylist.index("hello")
print(f"itchange在列表中的下标索引值是:{index}")

# 2.修改特定位置的元素值
mylist[0] = "快乐"
print(f"列表被修改元素值后,结果是:{mylist}")

# 3.在指定的位置添加元素
mylist.insert(1,"best")
print(f"列表插入元素后结果是:{mylist}")

# 4.在列表的尾部追加'''单个'''新元素
mylist.append("黑马程序员")
print(f"列表追加一个元素后结果是:{mylist}")

# 5.在列表的尾部追加'''一批'''元素
mylist2 = [1,2,3]
mylist.extend(mylist2)
print(f"列表追加一批元素后结果是:{mylist}")

# 6.删除制定下标索引的元素(2种方法)
mylist = ["itheima","itchange","itgcxy"]
# 6.1 放法1:del 列表[下标]
del mylist[0]
print(f"列表删除指定下标索引元素后结果是:{mylist}")
# 6.2 方法2:列表.pop(下标)
mylist = ["itheima","itchange","itgcxy"]
elenent = mylist.pop(0)
print(f"通过列表删除指定下标索引元素后结果是:{mylist},取出的元素是:{elenent}")

# 7.删除某元素在列表中匹配的元素,只能删掉出现的第一个符合的元素
mylist =["itheima","itchange","itgcxy","itheima","itchange"]
mylist.remove("itheima")
print(f"列表remove方法移除元素后,列表的结果是:{mylist}")

# 8.清空全部列表
mylist.clear()
print(f"列表被清空了,结果是:{mylist}")

# 9.统计某一个元素的数量
mylist =["itheima","itchange","itgcxy","itheima","itchange"]
count = mylist.count("itheima")
print(f"列表中itheima的数量是:{count}")

# 10.统计列表中一共有多少个元素
mylist =["itheima","itchange","itgcxy","itheima","itchange"]
count = len(mylist)
print(f"列表中一共有:{count}个元素")

三、列表的遍历
# 演示对list列表循环,使用while循环

def list_while_fun():
    '''
    使用while循环遍历列表的演示函数
    :return: None
    '''
    my_list = ["传智教育","黑马程序员","Python"]
    # 循环控制变量通过下标索引来控制,默认:0
    # 每一次循环将下标索引变量+1
    # 循环条件:下标索引变量 < 列表的元素数量
    
    # 定义一个变量用来标记列表下标
    index = 0
    while index < len(my_list):
        # 通过index变量取出对应下标元素
        element = my_list[index]
        print(f"列表的元素:{element}")
        
        # 至关重要的一步
        index += 1

def list_for_fun():
    '''
    使用for循环遍历列表的演示函数
    :return: None
    '''
    my_list = [1,2,3,4,5,6]
    # for 临时变量 in数据容器
    for element in my_list:
        print(f"列表的元素有:{element}")
        
list_for_fun()

四、数据容器
1.元组

# 演示tuple元组的定义和操作
t1 = ("hello",True)
t2 = ()
t3 = tuple()

print(f"t1的类型是:{type(t1)},内容是:{t1}")
print(f"t2的类型是:{type(t2)},内容是:{t2}")
print(f"t3的类型是:{type(t3)},内容是:{t3}")

# 定义一个单个元组
# 如果只有单个元素就需要在单个元素的后面加“,”,才能表示元组,如果不加,输出的结果类型将是str
t4 = ("hello",)
print(f"t4的类型是:{type(t4)},内容是:{t4}")
# 元组的嵌套
t5 = ((1,2,3),(4,5,6))
print(f"t5的类型是:{type(t5)},内容是:{t5}")

# 通过下标索引去取出内容
num = t5[1][2]
print(f"从嵌套元组中取出的数据是:{num}")

# 元组的操作:index查找方法
t6 = ("传智教育","黑马程序员","Python")
index = t6.index("黑马程序员")
print(f"在元组t6中查找黑马程序员的下标是:{index}")
# 元组的操作:count统计方法
t7 = ("传智教育","黑马程序员","Python","传智教育","黑马程序员","Python")
num = t7.count("黑马程序员")
print(f"在元组t7中统计黑马程序员的数量有:{num}")
# 元组的操作:count统计方法
t8 = ("传智教育","黑马程序员","Python","传智教育","黑马程序员","Python")
num = len(t8)
print(f"t8元组中的元素有:{len(t8)}个")
# 元组的遍历:while
index = 0
while index < len(t8):
    print(f"元组中的元素有:{t8[index]}")
    # 至关重要
    index += 1

# 元组的遍历:for
for element in t8:
    print(f"2元组元素有:{element}")

元组的内容是固定的,不需要修改

# 定义一个元组
t9 = (1,2,["itheima","itcast"])
print(f"t9的内容是:{t9}")
t9[2][0] = "传智教育"
t9[2][1] = "黑马程序员"
print(f"t9的内容是:{t9}")

2.字符串

my_str = "itheima and itcast"
# 通过下标索引字符串
value = my_str[2]
value = my_str[-16]
print(f"从字符串{my_str}中取下标为2的元素值是:{value},取下下标为-16的元素,值是:{value2}")

# index方法:查
value = my_str.index("and")
print(f"从字符串{my_str}中查找and,起始下标是:{value}")
# replace方法:替换
new_my_str = my_str.replace("it","程序")
print(f"字符串{my_str}进行替换后得到:{new_my_str}")
# split方法:分割
my_str = "itheima and itcast"
my_str_list = my_str.split(" ")
print(f"字符串{my_str}进行切割后得到:{my_str_list},类型是:{type(my_str_list)}")
# strip()方法:去掉前、后空格
my_str = "  itheima and itcast  "
new_my_str = my_str.strip() # 不传入参数去除收尾空格
print(f"字符串{my_str}被strip后,结果:{new_my_str}")

my_str = "12itheima and itcast21"
new_my_str = my_str.strip("12")
print(f"字符串{my_str}被strip后,结果:{new_my_str}")
# 统计字符串中某字符串出现的次数:count
my_str = "12itheima and itcast21"
count = my_str.count("it")
print(f"字符串{my_str}中it出现的次数是:{count}")
# 统计字符串的长度:len()
num = len(my_str)
print(f"字符串{my_str}的长度是:{num}")

课后习题:

答案:

# 字符串课后练习
my_str = "itheima and itcast"
# 统计字符串内有多少个“it”字符
num = my_str.count("it")
print(f"字符串{my_str}中有:{num}个it字符")
# 将字符串内的空格,全部替换为:“|”
new_my_str = my_str.replace(" ","|")
print(f"{my_str}被替换空格后,结果为:{new_my_str}")
# 并按照“|”进行字符串的分割,得到列表
new_my_str_list = new_my_str.split("|")
print(f"{new_my_str}被分割后的字符串为:{new_my_str_list}")
3.数据容器(序列)的切片

注意:我们对序列的操作不会影响序列本身,而是会得到一个新的序列。因为元组、字符串都是不可修改的

# 对list进行切片,从1开始,4结束,步长为1
my_list = [0,1,2,3,4,5,6]
result = my_list[1:4] # 步长默认为1,所以可以省略不写
print(f"结果1:{result1}")
#对tuple切片,从头开始,到最后结束,步长为1
my_tuple = (0,1,2,3,4,5,6)
result2 = my_tuple[:]
print(f"结果2:{result2}")
# 对str切片,从头开始,到最后结束,步长为2
my_str = "01234567"
result3 = my_str[::2]
print(f"结果3:{result3}")
# 对str切片,从头开始,到最后结束,步长为-1
my_str = "01234567"
result4 = my_str[::-1]
print(f"结果4:{result4}")
# 对列表进行切片,从3开始,到1结束,步长为-1
my_list = [0,1,2,3,4,5,6]
result5 = my_list[3:1:-1]
print(f"结果5:{result5}")
# 对元组进行切片,从头开始,到尾结束,步长为-2
my_tuple = (0,1,2,3,4,5,6)
result6 = my_tuple[::-2]
print(f"结果6:{result6}")

练习:

有字符串:"万过薪月,员序程马黑来。nohtyP",请使用学过的知识,得到”黑马程序员“

可参考:倒序字符串,切片取出,然后倒序

split分隔“,”replace替换“来”为空,倒序字符串

my_str = "万过薪月,员序程马黑来,nohtyP"
# 倒序字符串,切片取出
result1 = my_str[::-1][9:14]
print(f"方式一结果:{result1}")
#切片取出
result2 = my_str[5:10][::-1]
print(f"方式二结果:{result2}")
#split分离“,”replace替换“来”为空,倒序字符串
result3 = my_str.split(",")[1].replace("来","")[::-1]
print(f"方式三结果:{result3}")
4.数据容器:set(集合)

上述特性有局限,他们都支持重复。如果场景需要对内容做去重点处理,列表,元组,字符串就不方便了,而集合最主要的特征就是不支持元素的重复,相当于自带去重功能,且集合的内部是无序的

# 定义集合(集合不能重复,内容是无序的)
my_set = {"传智教育","黑马程序员","itheima","传智教育","黑马程序员","itheima","传智教育","黑马程序员","itheima"}
my_set_empty = set()  # 定义的空集合
print(f"my_set的内容是:{my_set},类型是:{type(my_set)}")
print(f"my_set_empty的内容是:{my_set_empty},类型是:{type(my_set_empty)}")

# 添加元素:add
my_set.add("Python")
my_set.add("传智教育") # 添加后会被去重
print(f"添加后的元素为:{my_set}")

# 移除元素:remove
my_set.remove("黑马程序员")
print(f"my_set移除黑马程序员后,结果是:{my_set}")

# 随机取出元素:pop
my_set = {"传智教育","黑马程序员","itheima"}
element = {f"集合被取出的元素是:{element},取出后元素为:{my_set}"}

# 清空集合:clear
my_set.clear()
print(f"集合被清空啦,结果是:{my_set}")

# 取2个集合的差集:difference(集合2)
set1 = {1,2,3}
set2 = {1,6,7,8}
set3 = set1.difference(set2)
print(f"取出差集后的结果是:{set3}")
print(f"取差集后原有set1的内容:{set}")
print(f"取差集后原有set2的内容:{se2}")

# 消除2个集合的差集:difference_updata(集合2)
set1 = {1,2,3}
set2 = {1,6,7,8}
set1.difference_updata(set2)
print(f"消除差集后,集合1的结果:{set1}")
print(f"消除差集后,集合2的结果:{set2}")

# 2个集合合并为一个:union,不会修改已有集合,只能得到新的集合
set1 = {1,2,3}
set2 = {1,6,7,8}
set3 = set1.union(set2)
print(f"2个集合合并后的结果:{set3}")
print(f"合并后集合1:{set1}")
print(f"合并后集合2:{set2}")

# 统计集合元素数量:len()
set1 = {1,2,3,4,5,6,1,2,3,4,5,6}
num = len(set1)
print(f"集合内元素的数量有:{num}个")  # 只能识别出6个。因为集合会去重

# 集合的遍历
set1 = {1,2,3,4,5,6}
for element in set1:
    print(f"集合的元素有:{element}")

课后练习:

有如下的列表对象:

my_list = ['黑马程序员','传智教育','黑马程序员','传智博客','itheima','itcast','itheima','itcast','best']

请:1.定义一个空集合

2.通过for循环进行遍历列表

3.在for循环中将列表的元素添加至集合

4.最终得到元素去重后的集合对象,并打印输出

5.数据容器:dict(字典、映射)

(1)字典的基础定义:与集合一样同样使用{},不过存储的元素是一个个的键值对,如下面的语法

# 定义字典字面量
{key:value,key:value,........,key:value}
# 定义字典自变量
my_dict = {key:value,key:value,........,key:value}
# 定义空字典
my_dict = {}
my_dict = dict()
# 定义字典
my_dict1 = {王力宏:99,周杰伦:88,林俊杰:77}
# 定义空字典
my_dict2 = {}
my_dict3 = dict()
print(f"字典1的内容是:{my_dict1},类型是:{type(my_dict1)}")
print(f"字典2的内容是:{my_dict2},类型是:{type(my_dict2)}")
print(f"字典3的内容是:{my_dict3},类型是:{type(my_dict3)}")

# 定义重复key字典
my_dict1 = {王力宏:99,王力宏:88,林俊杰:77}
print(f"重复key的字典是:{my_dict1}")     # 字典与集合一样,不允许重复,且若重复会自动去重

# 从字典中基于key获取value
my_dict1 = {王力宏:99,周杰伦:88,林俊杰:77}
score = my_dict["王力宏"]
print(f"王力宏的考试成绩为:{score}")

# 定义嵌套字典,字典的key和value可以是任意数据类型(key不可为字典)
stu_score_dict = {
    "王力宏":{
        "语文":77,
        "数学":66,
        "英语":99
    },
    "周杰伦":{
         "语文":99,
         "数学":33,
         "英语":88
    },
    "林俊杰",{
         "语文":88,
         "数学":66,
         "英语":77
    }
}
print(f"学生的考试信息是:{stu_score_dict}")
# 从嵌套字典中获取数据
score = stu_score_dict["周杰伦"]["语文"]
print(f"周杰伦的语文信息是:{score}")

(2)字典的常用操作

my_dict = {王力宏:99,周杰伦:88,林俊杰:77}
# 新增元素
my_dict["张信哲"] = 66
print(f"字典经过新增元素后,结果:{my_dict}")

# 更新元素
my_dict["周杰伦"] = 33
print(f"字典经过更新元素后,结果:{my_dict}")

# 删除元素
score = my_dict.pop["周杰伦"]
print(f"字典中被移除了一个元素,结果是:{my_dict},周杰伦的考试分数是:{score}")

# 清空字典
my_dict.clear()
print(f"字典被清空了,结果是:{my_dict}")

# 获取全部的key值
my_dict = {王力宏:99,周杰伦:88,林俊杰:77}
keys = my_dict.keys()
print(f"字典中的全部keys是:{keys}")

# 遍历字典
# 方式一:通过获取全部的key来遍历
for key in keys:
    print(f"字典的key是:{key}")
    print(f"字典的vaule是:{my_dict[key]}")    
#方式二:直接对字典进行for循环
for key in my_dict:
     print(f"2字典的key是:{key}")
     print(f"2字典的vaule是:{my_dict[key]}")    

# 统计字典的元素数量:len()
num = len(my_dict)
print(f"字典中有:{num}个元素")

课后作业:

答案:

# 组织字典记录数据
info_dict = {
    "王力宏":{
        "部门":"科技部",
        "工资":3000,
        "级别":1
    },
    "周杰伦":{
         "部门":"市场部",
         "工资":5000,
         "级别":2
    },
    "林俊杰":{
         "部门":"市场部",
         "工资":7000,
         "级别":3
    },
    "张学友":{
         "部门":"科技部",
         "工资":4000,
         "级别":1
    },
    "刘德华":{
         "部门":"市场部",
         "工资":6000,
         "级别":2
    }
}

print(f"对员工进行升职加薪前的结果:{info_dict}")

# for循环遍历字典
for key in info_dict:
    # if条件判断符合条件的员工
    if info_dict[name]["级别"] == 1:
        # 升职加薪的操作
        # 获取员工的信息字典
        employee_info_dict = info_dict[name]
        #修改员工信息
        employee_info_dict["级别"] = 2
        employee_info_dict["工资"] += 1000
        #将员工的信息变更为info_dicet
        info_dict[name] = employee_info_dict

# 输出结果
print(f"对员工进行升职加薪的结果:{info_dict}")
6.数据容器的对比

7.数据容器的通用操作

my_list = [1,2,3,4,5]
my_tuple = (1,2,3,4,5)
my_str = "abcdefg"
my_set = {1,2,3,4,5}
my_dict = {"key":1,"key2":2,"key3":3,"key4":4,"key5":5}
# len元素的个数
print(f"列表,元素的个数是:{len(my_list)}")
print(f"元组,元素的个数是:{len(my_tuple)}")
print(f"字符串,元素的个数是:{len(my_str)}")
print(f"集合,元素的个数是:{len(my_set)}")
print(f"字典,元素的个数是:{len(my_dict)}")

# max最大元素
print(f"列表,最大的元素的个数是:{max(my_list)}")
print(f"元组,最大的元素的个数是:{max(my_tuple)}")
print(f"字符串,最大的元素的个数是:{max(my_str)}")
print(f"集合,最大的元素的个数是:{max(my_set)}")
print(f"字典,最大的元素的个数是:{max(my_dict)}")
# main与上max相同的用法

# 类型转换:容器转元组
print(f"列表转列表的结果是:{list(my_list)}")
print(f"元组转列表的结果是:{list(my_tuple)}")
print(f"字符转列表的结果是:{list(my_str)}")
print(f"集合转列表的结果是:{list(my_set)}")
print(f"字典转列表的结果是:{list(my_dict)}")

# 类型转换:容器转字符串
print(f"列表转字符串的结果是:{str(my_list)}")
print(f"元组转字符串的结果是:{str(my_tuple)}")
print(f"字符串转字符串的结果是:{str(my_str)}")
print(f"集合转字符串的结果是:{str(my_set)}")
print(f"字典转字符串的结果是:{str(my_dict)}")

# 类型转换:容器转集合
print(f"列表转集合的结果是:{tuple(my_list)}")
print(f"元组转集合的结果是:{tuple(my_tuple)}")
print(f"字符串转集合的结果是:{tuple(my_str)}")
print(f"集合转集合的结果是:{tuple(my_set)}")
print(f"字典转集合的结果是:{tuple(my_dict)}")

# 类型转换:容器转容器
print(f"列表转容器的结果是:{set(my_list)}")
print(f"元组转容器的结果是:{set(my_tuple)}")
print(f"字符串转容器的结果是:{set(my_str)}")
print(f"集合转容器的结果是:{set(my_set)}")
print(f"字典转容器的结果是:{set(my_dict)}")

my_list = [1,5,4,6,2,3]
my_tuple = (1,5,4,6,2,3)
my_str = "bcagdef"
my_set = {1,5,4,6,2,3}
my_dict = {"key":1,"key2":2,"key3":3,"key4":4,"key5":5}
# 进行容器的正向排序
print(f"列表对象的排序结果是:{sorted(my_list)}")
print(f"元组对象的排序结果是:{sorted(my_tuple)}")
print(f"字符串对象的排序结果是:{sorted(my_str)}")
print(f"集合对象的排序结果是:{sorted(my_set)}")
print(f"字典对象的排序结果是:{sorted(my_dict)}")
# 进行容器的反向排序
print(f"列表对象的排序结果是:{sorted(my_list),reverse=True}")
print(f"元组对象的排序结果是:{sorted(my_tuple),reverse=True}")
print(f"字符串对象的排序结果是:{sorted(my_str),reverse=True}")
print(f"集合对象的排序结果是:{sorted(my_set),reverse=True}")
print(f"字典对象的排序结果是:{sorted(my_dict),reverse=True}")

8.字符串大小比较

字符串是按位比较的,也就是一位位进行对比,只要一位大那么整体就大

都是比较字符串的码值,也就是ASCll码

# abc比较大小
print(f"abd大于abc,结果:{'abd'>'abc'}")
# key1比较key2
print(f"key1大于key2,结果:{'key2'>'key1'}")

第七章 函数进阶

一、函数多返回值

# 演示使用多个变量,接收多个返回值
def test_reutrn():
    return 1,"hello",True

x,y,z = test_return()
print(x)
print(y)
print(z)
二、函数多种传参方式

def user_info(name,age,gender):
    print(f"姓名是:{name},年龄是:{age},性别是:{gender}")
user_info('小民',20,'男')  
# 关键字参数,可以不按照参数的定义传参
user_info(name='笑笑',age='10',gneder='女')
user_info('甜甜',age='5',gneder='女')
# 缺省参数,默认参数必须写在最后
def user_info(name,age,gender='男'):
    print(f"姓名是:{name},年龄是:{age},性别是:{gender}")
    
user_info('小天',13)
user_info('小填',18,gender='男')

# 位置不定长,*号
# 不定长定义的形式参数会作为元组存在,接收不定长数量的参数传入
def_user_info(*args):
    print(f"*args参数的类型是:{type(args),内容是:{args}}")

user_info(1,2,3,'小民','男孩')
# 关键字不定长,**号
def_user_info(**kwargs):
    print(f"*args参数的类型是:{type(kwargs),内容是:{kwargs}}")

user_info(name='小王',age=11,gender='男孩')

三、匿名函数
1.函数作为参数传递

# 定义一个函数,接收另一个函数作为传入参数
def test_func(compute):
    result = compute(1,2)
    print(f"computer函数的数据类型是:{type(computer)}")
    print(f"计算结果:{result}")
    
# 定义一个函数,准备作为参数传入另一个函数
def compute(x,y):
    return x + y

# 调用,并传入函数
test_func(compute)

# 函数本身是可以作为参数,传入另一个函数中进行使用的;将函数传入的作用在于:传入计算逻辑,而非传入数据
2. lambda匿名函数

# 定义一个函数,接受其他函数输入
def test_func(compute):
    result = compute(1,2)
    print(f"计算结果:{result}")
# 通过lambda匿名函数的形式,将匿名函数作为参数传入
test_func(lambda x,y:x + y) #不可以通过回车写多行

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值