Python 散列类型三以及函数基础

简介: 【10月更文挑战第11天】

【10月更文挑战第11天】
1.数值类型

整型 int 整数 不可以修改的

浮点型 float 带小数点的数字 不可以修改的

布尔型 bool True(真1)、False(假0) 不可以修改的

2.序列类型(索引、切片)

字符串 str 用引号括起来的内容 不可以修改的(存在修改方法,但是会生成新的字符串)

列表 list [元素1,元素2] 可以修改

元组 tuple (元素1,元素2) 不可以修改的

3.散列类型

字典 dict {键:值,键:值} 可以修改

集合 set {元素1,元素2} 可以修改

题目

1.用户登录

如果用户名存在就输入密码,当密码正确的时候就显示登录成功并且退出程序

如果用户名不存在则提示用户注册

判断用户是否存在

存在---输入密码

不存在---提示用户注册

students =[
{'name':'张三','password':123},
{'name':'王五','password':888},
{'name':'赵六','password':456}
]
name=input("请输入用户名:")
for i in students:
    #i存在的是用户的信息字典
    if name==i['name']:
        #对输入的用户名进行判断
        for n in range(1,4):
            #循环3次进行输入密码的操作,如果输入正确直接跳出循环
            pwd=eval(input("请输入密码:"))
            if pwd==i['password']:
                print('登录成功')
                exit()
                #break#只能退出当前所在的循环,就是跳出了里面的循环,还是处于外部循环
            else:
                print(f'密码错误,还剩{3-n}次机会')
    #if name==i['name'] and pwd==i['password'] :
        break
else:#循环正常结束执行,即没有break语句
    print("用户名不存在")

#对于这个程序的话,我们 不管输入什么最后都会打印这个用户名不存在
#我们内循环里面的break仅仅只够我们跳出内部循环
#但是没有跳出外部循环,这就是为什么会打印else的那句话
#那么我们就在外部循环加上一个判断语句,如果条件成立就直接跳出
#那么就不会进行这个循环后面的代码了

#总结,就是break只能退出当前所在的循环,所以在外边循环中我们需要再写一个break跳出外部循环

#对于后面的这个else语句来说
#循环正常结束执行,即没有break语句


#但是我们在内循环break的位置加一个exit()
#我们直接退出这个程序,那么就没有后面else的事了

#如果后面有代码的话,这个exit()影响到了后面代码的执行的话
#那么我们就使用break来跳出
#两个break
students =[
{'name':'张三','password':123},
{'name':'王五','password':888},
{'name':'赵六','password':456}
]
name=input("请输入用户名:")
for i in students:
    #print(i)
    if name in i.values():
        #获取当前字典内的值
        #我们在这里需要用到字典相关的函数--values去获取字典内的值
        #查看当前遍历到的字典有没有我们输入的name
        #print("存在")
        for n in range(3):
            pws=int(input("请输入密码:"))
            if pws==i['password']:
                print("登录成功")
                exit()
            else:
                print(f"密码错误,还剩{3-n}次机会")


else:#循环正常结束才会执行
    print("用户名不存在")
#在这个代码里面只有一个循环
#那么我们在break之后我们就不会触发这个else了,我们直接跳出循环了
#我们这里的break跳出循环是非正常循环的

2.数字重复统计:

'''
数字重复统计:
(1)随机生成1000个整数  
import.random
random.randint
(2)数字的范围[20,100]
(3)升序输出所有不同的数字及每个数字重复的次数
'''
import random
li=[]#创建一个空列表
for i in range(1000):
    num=random.randint(20,100)
    print(num)
    li.append(num)#我们将每次循环产生的数添加到这个列表中

print(li)

#升序输出所有不同的数字---去重(转换为集合),排序(sort)
li1=list(set(li))
#先转换为集合再转换为列表,我们就达到了去重的效果
print(li1)
li1.sort()#默认是从小到大,升序的
print(li1)

#每个数字重复的次数---统计数字出现的次数(序列.count(数据))
for i in li1:#遍历去重的列表
    #进行统计,对没有机芯工去重的列表进行统计
    x=li.count(i)
    print(f'{i}出现了{x}次')

#我们所有的数字已经在li1里面了,而且没有重复的
#那么我们将这个列表作为外循环的条件进行遍历
#然后我们在li这个链表即兴每次遍历的数字的出现次数的计算


#我们需要将元素存储起来
#那么存放多个元素的有什么呢?
#列表、元组(不可修改)、字典(键值对)、集合
#那么最后只有列表和集合方便
#这个题的要求是还要统计重复数字的次数而且保存重复的数字
#那么我们直接将字典排除了
#因为字典是去重的
#那么最后我们就使用列表来对这些数字进行存储

我们在最后统计每个数字出现的次数

我们将每个数字进行去重

然后针对每个数字进行计数

通过这里的代码就会缩短时间

如果我们是对1000个数字一个一个进行遍历的话会很慢的

我们第一步直接将出现的数字缩水显现出来

然后我们再在原先的列表中进行遍历计算这个数字出现的次数

定义函数的语法

def 函数名 :

代码语句

函数的作用:我们把需要反复执行的程序封装起来,制作成一个可以反复调用的工具,这个工具在编程中就叫函数

对于不同情况我们就调用对应的函数,可以减少代码量

简单函数的创建:

#对于函数,函数内的代码前面要有一个缩进,表示这些代码是属于这个函数的
def test():
    print("存款")
    print("取款")
    print("查询")
    print("取卡")

#def是函数创建的一个关键词

注意:函数不会主动进行编译的,需要我们手动进行调用的

下面就是如何对函数的调用

我们在使用函数的时候直接就是函数名()

比如说int()要加括号才能执行

#那么我们在创建好函数之后我们怎么进行函数的使用呢?

#注意:函数不会主动进行编译的,需要我们手动进行调用的

#使用函数(调用函数)---函数名()

#对于这种调用的方法的话,我们之前的print() 和type()
#都是函数,只不过里面的代码我们是不需要写的,之前就写好了的,我们直接调用进行使用就行李科

test()
#这里我们成功调用函数
'''
存款
取款
查询
取卡
'''

使用函数之后我们的代码量就不会出现冗余的现象了

对于用户登录的题目我们是可以用函数的

注册:

#用户注册---reg
def reg():
        name=input("请输入注册的用户名:")
        while True:
            p1=input("请输入密码:")
            p2=input("请再次输入密码:")
            if p1==p2:
                    students.append({'name':name,'password':p1})#p1是字符串我们得进行转换
                    print("注册成功")#那么我们就不用再输入密码了,我们就退出这个循环就行了
                    break
            else:
                print("两次密码要一致")
#直到我们输入正确的密码之后我们就能跳出这个循环了

登录:

#用户登录---log
def log():
    name=input("请输入用户名:")
    for i in students:
    #i存在的是用户的信息字典
        if name==i['name']:
            #对输入的用户名进行判断
            for n in range(1,4):
                #循环3次进行输入密码的操作,如果输入正确直接跳出循环
                pwd=input("请输入密码:")
                if pwd==i['password']:
                    print('登录成功')
                     #exit()
                    break#只能退出当前所在的循环,就是跳出了里面的循环,还是处于外部循环
                else:
                    print(f'密码错误,还剩{3-n}次机会')
        if name==i['name'] and pwd==i['password'] :
            break
    else:
        print("用户名不存在,请先注册")

那么我们在实现用户的登录和注册时候的场景就是下面这样的:

如果我们输入的没有注册的话就会提示我们进行注册的操作

#对于用户登录和用户注册我们是可以封装为两个函数的
students =[
{'name':'张三','password':'123'},
{'name':'王五','password':'888'},
{'name':'赵六','password':'456'}
]
#用户登录---log
def log():
    name=input("请输入用户名:")
    for i in students:
    #i存在的是用户的信息字典
        if name==i['name']:
            #对输入的用户名进行判断
            for n in range(1,4):
                #循环3次进行输入密码的操作,如果输入正确直接跳出循环
                pwd=input("请输入密码:")
                if pwd==i['password']:
                    print('登录成功')
                     #exit()
                    break#只能退出当前所在的循环,就是跳出了里面的循环,还是处于外部循环
                else:
                    print(f'密码错误,还剩{3-n}次机会')
        if name==i['name'] and pwd==i['password'] :
            break
    else:
        print("用户名不存在,请先注册")
#用户注册---reg
def reg():
        name=input("请输入注册的用户名:")
        while True:
            p1=input("请输入密码:")
            p2=input("请再次输入密码:")
            if p1==p2:
                    students.append({'name':name,'password':p1})#p1是字符串我们得进行转换
                    print("注册成功")#那么我们就不用再输入密码了,我们就退出这个循环就行了
                    break
            else:
                print("两次密码要一致")
#直到我们输入正确的密码之后我们就能跳出这个循环了


while True:
    n=input('1.登录   2.退出   3.提出\n请输入你要操作的内容')
    if n =='1':
        log()
    elif n=='2':
        reg()
    elif n=='3':
        print("退出")
        break
    else:
        print("请输入正确的序号")

对于里面的while True

我们采用的是死循环,只要我们回答对了就跳出这个死循环

位置参数

函数参数包括形参和实参

实参就是我们传到函数的参数就是叫实参

形参就是函数用来接受我们传来的实参而创建的参数就是形参

形参:变量名,写在定义函数时的括号里面

实参:数据,写在调用函数时的括号里

传参:实参的数据给到形参的变量名

实参是写在调用函数的括号里面的哦

加法函数的创建:

#现在我们定义一个加法的函数

def Add(a,b):

    print(a+b)

a=int(input("输入a:"))
b=int(input("输入b:"))

Add(a,b)

如果我们不传实参的话是会报错的

对于参数的话,我们实参和形参必须一一对应

image.png

关键字参数

函数名(形参=实参)

#我们这里直接指定好参数
print(sep='\t',end='\n')

#指定传参,这样就可以不用一一对应了
Add(b=100,a=10)

就是我们直接在调用函数的时候我们直接规定好参数的大小

那么我们就调用的时候就不需要参数一一对应上了

默认参数

作用:再调用函数时,默认参数没有传递值,就会使用我们设定好的默认值

'''
#默认参数
'''
def 函数名(形参=默认值,......):
    函数体

'''
def func(name,sex='男'):
    print(f'我是{name},性别:{sex}')

func("小黑")
#我是小黑,性别:男

#我们在这个函数的调用的时候我们只传了name"小黑"
#并没有传性别,因为我们性别在这个函数体中已经是默认的了

func("小美",'女')
我是小美,性别:女

对于默认参数的话,我们一开始在函数体里面已经设定好了他的值

后面我们调用这个函数的时候我们是不需要传这个默认参数的大小的

因为这个参数已经有值了,我们就不需要进行传递了

但是我们如果传了默认参数的值的话,我们就采用的是我们传的值

就像上面

小美是女生,我们的默认性别是男生,那么我们将性别女传上去,那么打印出来的就是“我是小美,性别:女”

对于函数中存在默认参数的看法

不传这个参数就是使用默认参数

但是如果传了参数的话,就是使用我们传的参数

对于函数参数的位置的话,我们需要先定义这个位置参数,然后定义默认参数

因为如果先定义默认参数的话,那么我们不传参的情况下位置参数就没有进行定义,就是会报错的

反正就是默认参数放在后面

image.png

不定长参数

不定长参数也叫可变参数,用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。

不定长参数 用于不确定调用时传递的实参个数

对于不定长参数的话,我们分为元组不定长和字典不定长

元组不定长---*args

#元组不定长---*args
def funa(*args):
    print(args)#传入的数据全部存放在args中

funa()
#()
#我们不传参的话那么就是打印一个括号

#我们这里args前面加上*,就像是之前的变量前面加上*就能接受所有剩余的数据
#就像拆包一样

funa(1)
#(1,)
#我们传参1
#我们这里打印出来的就是一个元组类型的数据

#我们这个就是将传入的实参全部接受,以元组的方式进行保存
#不管传多少都是不会进行报错的

#这个不定长的参数就是保障了我们不知道参数个数的情况下降参数进行保存下来

那么数据是存储在元组里面

字典不定长---**kwargs

#字典不定长---**kwargs
#我们传入的数据以字典的方式进行存放
#字典{}
def funb(**kwargs):
    print(kwargs)

funb()
#以关键字传参---形参(键)==实参(值)
funb(name="小敏",age=18)
#{'name': '小敏', 'age': 18}

#格式就是函数名字(键1=值1,键2=值2)

格式就是函数名字(键1=值1,键2=值2)

image.png

参数顺序

参数顺序:必备参数、默认参数、不定长参数

我们是一点要按照这种顺序进行定义的

不然是会出现报错的

参数的拆包

参数的拆包存在两种形式的

一种就是通过变量依次进行赋值

第二种就是直接在元组的前面加上*直接对这个元组进行拆包的操作

然后将拆包的结果当做实参传到函数里面

#定义一个元组
t=(1,2,3)
def func(a,b,c):
    print(a,b,c,sep='\t')

#我们现在想让这个元组内的数据以实参的形式传到函数里面,那么该怎么操作呢?

#我们是可以使用拆包这个知识点
#拆包是存在两种形式的
#第一种:以变量的形式进行接收数据
'''
我们用变量的形式将这个元组内的数据依次进行接收
然后将这些变量以实参的形式传到这个函数里面
'''
x,y,z=t
func(x,y,z)
#1    2    3
#第二种:用*号进行接收
'''
在元组的名字前面加上*用于这个拆包,以实参的形式传到函数里面进行后续的操作
'''
func(*t)
#1    2    3

print(t)
#(1, 2, 3)

print(*t)
#1 2 3

#我们对元组进行拆包的操作之后我们就得到元组内的每个数据了
相关文章
|
1月前
|
搜索推荐 Python
利用Python内置函数实现的冒泡排序算法
在上述代码中,`bubble_sort` 函数接受一个列表 `arr` 作为输入。通过两层循环,外层循环控制排序的轮数,内层循环用于比较相邻的元素并进行交换。如果前一个元素大于后一个元素,就将它们交换位置。
130 67
|
24天前
|
Python
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
Python中的函数是**一种命名的代码块,用于执行特定任务或计算
47 18
|
16天前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
43 8
|
19天前
|
数据可视化 Python
以下是一些常用的图表类型及其Python代码示例,使用Matplotlib和Seaborn库。
通过这些思维导图和分析说明表,您可以更直观地理解和选择适合的数据可视化图表类型,帮助更有效地展示和分析数据。
60 8
|
25天前
|
Python
Python中的函数
Python中的函数
38 8
|
1月前
|
监控 测试技术 数据库
Python中的装饰器:解锁函数增强的魔法####
本文深入探讨了Python语言中一个既强大又灵活的特性——装饰器(Decorator),它以一种优雅的方式实现了函数功能的扩展与增强。不同于传统的代码复用机制,装饰器通过高阶函数的形式,为开发者提供了在不修改原函数源代码的前提下,动态添加新功能的能力。我们将从装饰器的基本概念入手,逐步解析其工作原理,并通过一系列实例展示如何利用装饰器进行日志记录、性能测试、事务处理等常见任务,最终揭示装饰器在提升代码可读性、维护性和功能性方面的独特价值。 ####
|
1月前
|
Python
Python中的`range`函数与负增长
在Python中,`range`函数用于生成整数序列,支持正向和负向增长。本文详细介绍了如何使用`range`生成负增长的整数序列,并提供了多个实际应用示例,如反向遍历列表、生成倒计时和计算递减等差数列的和。通过这些示例,读者可以更好地掌握`range`函数的使用方法。
54 5
|
1月前
|
Python
在 Python 中实现各种类型的循环判断
在 Python 中实现各种类型的循环判断
34 2
|
1月前
|
测试技术 数据安全/隐私保护 Python
探索Python中的装饰器:简化和增强你的函数
【10月更文挑战第24天】在Python编程的海洋中,装饰器是那把可以令你的代码更简洁、更强大的魔法棒。它们不仅能够扩展函数的功能,还能保持代码的整洁性。本文将带你深入了解装饰器的概念、实现方式以及如何通过它们来提升你的代码质量。让我们一起揭开装饰器的神秘面纱,学习如何用它们来打造更加优雅和高效的代码。
|
1月前
|
中间件 Docker Python
【Azure Function】FTP上传了Python Function文件后,无法在门户页面加载函数的问题
通过FTP上传Python Function至Azure云后,出现函数列表无法加载的问题。经排查,发现是由于`requirements.txt`中的依赖包未被正确安装。解决方法为:在本地安装依赖包到`.python_packages/lib/site-packages`目录,再将该目录内容上传至云上的`wwwroot`目录,并重启应用。最终成功加载函数列表。