python测试(7-8)

1.控制input的输入类型

在python中如果想要求用户在输入时使用特定的数据类型,可以直接在input前加上数据类型

例如:

b = int(input("请输入相关内容:"))
print(type(b))

结果:

请输入相关内容:

int

这样input的数据类型就是被设置成为了整型

input如果不做任何的修饰,默认的是字符串str类型

2.range

当数据有很多很多个时,一个一个输入会很麻烦,这时就需要用到range

例如想要打印5000次某个数据,就不用一条一条去写,直接用range:

for c in range(5000):
    print(f"正在执行代码{c}")

这样得到的结果就会从0-4999(从0开始的)

还有一种表示方式:

for c in range(0,5000):
    print(f"正在执行代码{c}")

与切片比较相似,也是取左不取右,0-4999

如果想得到1-5000(都取到):

for c in range(1,5001):
    print(f"正在执行代码{c}")

range 的形式与切片比较类似

range[start,end,step] step为步长

例如:

or c in range(1,5,2):
    print(f"{c}")
    print(type(c))

结果:

1
<class ‘int’>
3
<class ‘int’>

3.while循环

while和if是一脉相承的,但是在判断条件并进行打印时,满足if只会打印一次,而只要满足while的条件,就会一直打印下去

例如:

a = 18
if a < 19 :
    print('嘻嘻')
a = 18
while a < 19 :
    print('嘻嘻')

if只会打印一遍 嘻嘻 ,而while会一直打印 嘻嘻 ,因为18一直满足小于19的条件

为了阻止while一直打印下去,可以给while里面加条件,所以说while一般都是跟条件的

a = 18
while a < 19 :
    print('嘻嘻')
    a = a+1

这样打印出来的结果就是一边 嘻嘻

因为当18进去后满足条件,进去后加一,于是变成19,19就不符合小于19的这个条件,就会跳出循环

while循环还有一种表示方式:

a = 18
while True :
    print('嘻嘻')
    if a <15:
        break
    a = a-1

该表达式就是说明不管什么条件都能进去,因为恒为True

当不断减小直到小于15时,循环就会停止

4.for循环案例

对列表中的每一个元素进行了相同的的操作

将列表中不同的数据类型全部转化成字符串类型,并且依旧用列表来表示

a = [2,6,'a','8',1]
b =[]
for c in a :
    new_c = str(c)
    b.append(new_c)
print(b)

结果:

[‘2’,‘6’,‘a’,‘8’,‘1’]

因为要用一个列表表示,而且列表里面的数据都是新的,所以要重新定义一个列表b,将列表a中的每一个数据转化成str后,再添加到b中去,最后打印出b

有一种方式更加简便 ,叫做列表推导式:

a = [2,6,3,1]
c = [str(e) for e in a]
print(c)

直接定义一个新的变量c,用列表的形式,前面写想要转变的方式,后面写for循环,最后将其打印出来

如果进行平方操作也是一样

a = [2,6,3,1]
b =[]
for c in a :
    new_c = c*c
    b.append(new_c)
print(b)

[4,36,9,1]

用列表推导式:

a = [2,6,3,1]
c = [e*e for e in a]
print(c)

5.函数

定义一个函数并且调用会方便很多,并且会容易修改

不用函数的缺点:

太繁琐,要不停的粘贴复制

修改麻烦

重复代码

可读性不好

例如定义一个洗衣机的系统,但是不使用函数:

print("打开盖子")
print("把衣服放进去")
print("放洗衣粉")
print("关掉盖子")
print("启动")

这些是洗衣的步骤,没有调用函数

如果使用多次,就要复制粘贴多次,所以很繁琐

当使用了多次,代码就有很多的重复

代码很多,当去查看的时候就必须要全部看完才能确定是洗衣服的步骤,所以造成可读性差

当发现代码有问题时,比如洗衣机进行改革,可以省略一些步骤,一个就要删除几步,如果被大量使用,就要一个一个去修改,工程量很大,就造成了修改麻烦

函数的使用包括定义函数和调用函数:

定义函数:

def 函数名称():

函数体 #即调用函数时会执行的代码

调用函数:

函数名称()

def washing():
    print("打开盖子")
    print("把衣服放进去")
    print("放洗衣粉")
    print("关掉盖子")
    print("启动")

washing()
washing()

这就是使用了函数之后的代码

调用的时候也很方便

函数必须先定义后调用

函数的名称定义的规则和变量名称一样,但是函数名在英语中通常是一个动词,而变量名通常是一个名词

6.函数的返回值

具体的一个函数的返回值怎么得到?通过return 后面的值

返回值就是指函数最终得到的结果,而这个结果可以被函数外部接收

def add():
    a = 1+3
    return a
x = add()
print(x)

结果:4

定义一个名为add的函数,return后面的值就是这个函数的返回值,相当于函数最终的结果,用x接收这个结果,并将结果打印出来

如果:

def add():
    a = 1+3
    return 6
x = add()
print(x)

结果:6

因为是用x接收的函数的结果即返回值,而返回值是根据return后面的值来确定,后面是6,所以结果是6

如果:

def add():
    a = 1+3
    
x = add()
print(x)

结果:None

因为没有return,所以就没有返回值,外界得不到,于是就输出None

print和return不冲突:

def add():
    a = 1+3
    print('哈哈')
    return a
x = add()
print(x)

先打印 哈哈 ,后面打印返回值4

易错点:

判断result和a输出结果是否相同:

a = [2,3,4]
result =a.append(5)
print(a)
print(result)

结果:

[2, 3, 4, 5]
None

显然,两者的结果是不相同的,append用法相当于函数,而因为没有return ,所以并没有返回值,只是代表在a中加入5,所以打印result得到的结果是None。在此处经常容易出错,误以为result得到的结果和a一样,实际是不一样的

在一个函数中,return是函数结束的标志,当函数运行到return就会停止

def add():
    a = 1+2
    return a
    print('哈哈哈')

x = add()
print(x)

结果:3

当调用函数add时,返回值为3,遇到return后,函数中return后面的代码就不会再执行了

从上述角度写两个甚至多个return是没有意义的,但是在不同分支中的return就有他的作用:

def add():
    a = 1+2
    if a>4:
        return 6
    else:
        return a

x = add()
print(x)

结果:3

7.函数的参数

如果函数中没有变量,函数里面给定的数据是固定的,当数值发生变化时就不方便,所以会使用到参数

参数包括形参和实参

形参:代表形式参数,在定义时候的变量

实参:代表实际参数,在调用的时候,变量的值

形参和实参是配对的

例如:

def add(b):
    a = 5
    return a+b
print(add(3))

结果:8

上述函数中b为形参,相当于一个变量,值是可以通过实际情况去改变的

a为实参,是a这个变量的值,是不可以在函数外部改变的

如果:

def add():
    a = 5
    return a+b
print(add(3))

或者

def add(a):
    return a+b
print(add(3))

都是会报错的,因为给的变量都不全。第一个,返回a+b,就需要有a和b,而只定义了a,没有b。第二个,只定义了a,没有b

关于位置参数:
def add(a,b):
    return a+b
print(add(3,4))

结果:7

位置参数即函数定义时括号内的参数位置必须与后面调用时一致,a对应3,b对应4,不会说随便对应,并且定义时函数里的参数有多少,调用时的数量就必须要一致,不能多也不能少

def add(a,b,c):
    return a+b
print(add(3,4))

定义时有三个,调用只有两个,所以会报错

def add(a,b,c):
    return a+b
print(add(3,4,9))

结果:7

定义和调用的数量一致,就算c对返回值起不到作用也没有关系,并不会报错

关键字参数:

关键字参数就是在调用函数时,在数据前面加上关键字,代表这个数据的意义。并且这个关键字是形参的名称,如果不是形参的名称就会报错,无法一一对应

def add(a,b):
    return a+b
print(add(a=1,b=1))  #关键字参数

结果:2

他相对于位置参数,对应关系更加明显,位置参数还需要一个个去对应,当数据比较多的时候就会比较麻烦。

如果关键字不是形参的名称:

def add(a,b):
    return a+b
print(add(x=1,b=1))

结果:

image-20230905164519890

因为形参内没有一个名为x的参数,所以会报错

关键字参数里面的参数是可以交换位置的,和位置参数有一定的区别,不需要一个一个去对应,因为关键字参数在调用的时候就已经明确知道了哪个数字对应哪个,而位置参数只能通过位置关系来判断

def add(a,b,c):
    return a+b
print(add(b=1,c=5,a=6))

结果:7

判断以下代码是否会报错:

def add(a,b,c):
    return a+b
print(add(1,c=5,a=6))

结果:

image-20230905170614542

会报错,因为该代码既使用了位置参数又使用了关键字参数。1代表的是a的值,然而后面又对应给了一个a的值,a就有了两个值,就会报错

判断以下代码是否会报错:

def add(a,b,c):
    return a+b
print(add(3,b=4,c=5))

结果:7

该代码和上一个代码一样,既有位置参数又有关键字参数,该地的3就是对应a,也没有别的问题,所以并不会报错,得到的答案为7。

判断以下代码是否会报错:

def add(a,b,c):
    return a+b
print(add(b=3,4,c=5))

结果:

image-20230905171746891

默认参数:

默认参数就是指在定义函数的时候,给指定的形式参数一个默认的值,在函数调用的时候可以不传这个值,在调用的时候也可以对这个参数进行修改

优点:假如在函数定义的时候,参数很多的情况下,在对函数进行定义的时候可以不传那么多参数,使用默认的值。而且在需要对数据进行修改的时候可以直接修改,结果会以修改后的数据为准

判断以下代码:

def add(a=3,b=6):
    return a+b
print(add())

结果:9

a和b用的都是默认参数的数值

def add(a=3,b):
    return a+b
print(add(b=3))

结果:报错

因为在函数定义中,有默认值的参数必须在没有默认参数的后面

在函数定义中,带有默认值的参数必须放在没有默认值的参数之后

def add(a=3,b=10,c=1):
    return a+b
print(add(a=5))

结果:15

因为指定的a的值可以替换掉原来定义时a的默认参数

位置参数在写的时候,必须写在关键字参数和默认参数的前面,不然会报错!

函数的不定长参数:

函数的不定长参数分为两种:位置参数的不定长参数和关键字参数的不定长参数

位置参数的不定长参数一般是在函数进行定义的时候加上*和名称,打印得到的结果是以元组的形式。而关键字参数的的不定长参数是在定义的时候加上**和名称,打印的结果是以字典的形式。不传任何数据就是空元组、空字典

def add(*a,**b):
    print(a)
    print(b)
add()

结果:

()

{}

没有传任何的数据,所以得到的是空元组和空字典

如果既有位置参数的不定长参数又有关键字参数的不定长参数,那么位置参数的不定长参数要放在关键字参数之前,并且在调用的时候,位置参数的不定长参数也要在关键字参数的不定长参数之前

def add(*a,**b):
    print(a)
    print(b)
add(wyj='zhubajie',wmd='dameinv')

结果:

()
{‘wyj’: ‘zhubajie’, ‘wmd’: ‘dameinv’}

def add(*a,**b):
    print(a)
    print(b)
add(1,2,3,4,5,6,wyj='zhubajie',wmd='dameinv')

结果:

(1, 2, 3, 4, 5, 6)
{‘wyj’: ‘zhubajie’, ‘wmd’: ‘dameinv’}

ps:如何写一个函数:

先写函数的名称

在函数体中写入函数运行所需要的代码

考虑函数应该返回什么

考虑参数有哪些,哪些数据是可以变的,而哪些数据是不能变的,能变的可以当作形参,不可变的就做实参

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值