Python(二):函数、字符串的方法、格式化字符串format()、while循环、for循环、break、continue、pass


前言

包括内置函数,函数的定义与调用,函数的参数,可变长度参数与关键字参数,函数的缺省值;对象方法概念、字符串的方法;格式化字符串format();while循环,for循环,遍历列表,break,continue,pass。


一、函数

1、内置函数

内置函数指的是不需要定义,可以直接使用的函数,python提供了很多的内置函数,比如print(),len(),type(),str(),int()等等

print ("abc")

在这里插入图片描述

2、函数的定义与调用

函数是一段封装的代码,定义之后,调用它则执行,不调用不执行

def fun1():  # 定义函数,函数名全部小写
    print('hello')
    
fun1()  # 调用函数
print(fun1())  # 没有返回值(return)则返回None

在这里插入图片描述

注:调用函数,得到函数的返回值,如果没有返回值(return)则返回None

def fun2():
    return 'hello'

fun2() # hello返回在内存中
print(fun2()) # 打印出fun2()的返回值

在这里插入图片描述

a1 = 100  # 全局变量
def fun3():
    global a2  # 声明a2是一个全局变量
    a2 = 200  # 局部变量,只能由函数调用,声明了global之后是全局变量
    return a2

# print(a2)  # 执行会报错,如果fun3()没有被调用,则a2声明并没有生效
fun3()
print(a2)  # 局部变量不能被外部直接调用

在这里插入图片描述

关于global全局变量可参考:https://blog.csdn.net/songhongchuang/article/details/116647254

3、函数的参数

def sumdata(a, b):  # a,b形式参数,简称形参,命名方式与变量一致,有多个参数时用逗号隔开
    return a + b

print(sumdata(1, 9))  # 实际参数,简称实参
# print(sumdata(1))  # 报错,实参数量小于形参数量
# print(sumdata(1,2,3))  # 报错,实参数量大于形参数量

print(sumdata(a=1,b=9))  # 完整写法
print(sumdata(b=9,a=1))  # 使用完整写法时,参数的位置可以互换
print(sumdata(1,b=9))  # 先简略写法,后完整写法
# print(sumdata(a=1,9))  # 先完整写法,后简略写法,报错

在这里插入图片描述

(1)、函数中可以有多个return

# 写一个函数,返回某数的绝对值
def absolute_value(n):
    if n >= 0:
        return n
        return '这是一个不可达语句'  # 第一个return之后,程序退出了函数,后面的语句是不可达语句
    else:
        return -n

print(absolute_value(18))
print(absolute_value(-18))

在这里插入图片描述

(2)、函数中可以return多个值,有多个返回值时,以元组形式返回

def sumdata2(a, b):
    return a + b, a - b, a * b, a ** b

print(sumdata2(3, 6))

def sumdata2_new(a, b):
    return [a + b, a - b, a * b, a ** b]

print(sumdata2_new(3, 6))  # 列表为一个对象,返回是列表的形式,如果列表外还有对象,返回的则是元组 

在这里插入图片描述

4、可变长度参数与关键字参数

(1)、可变长度参数 *args,允许用户传任意个参数

def fun6(*args):
    return args

print(fun6(100,200,300))  # 如果不传任何形参, 返回空元组()

在这里插入图片描述

  • 解包
def fun6_new1(a,*args):
    return a,*args

print(fun6_new1(100,200,300))

def fun6_new2(a,*args):
    return a,args  # 写args会多一层元组,写*args可以少一层元组

print(fun6_new2(100,200,300))

在这里插入图片描述

  • 旧版python写法,3.7之前版本
def fun6_new(a, *args):
    return (a, *args)


print(fun6_new(100, 200, 300))

在这里插入图片描述

(2)、关键字参数 **kwargs,允许用户输入任意个参数,必须以key=value的格式输入;输出以字典格式显示

def fun9(**kwargs):
    return kwargs

print(fun9(name='德华', age=18))

在这里插入图片描述

5、函数的缺省值

def fun10(a=100,b=98):  # 可以给函数的形参设置缺省值,当用户不输入参数时,以缺省值作为实参的值
    return a+b

print(fun10())  # 用户不输入实参
print(fun10(10))  # 用户输入一个实参,a的值使用用户输入的值,b的值使用缺省值
print(fun10(10,8))  # 用户输入全部的实参,使用用户输入的值,不使用缺省值

在这里插入图片描述

二、对象的方法

1、对象方法概念

(1)、Python中的一切类型的数据都是对象数据方法

(2)、对象数据:

  • 对象所对应的存储的东西,是静态的部分。比如:a = ‘abc123’

(3)、对象方法:

  • 可以看做对象的行为,是动态的部分

  • 对象方法其实就是属于该对象的函数

2、字符串的方法

(1)、isdigit()判断对象是否是纯数字,返回值是布尔型

(2)、isalpha()判断对象是否是纯字母,返回值是布尔型

str1 = 'abcdea'
print(str1.isdigit())  # 判断对象是否是纯数字,返回值是布尔型
print(str1.isalpha())  # 判断对象是否是纯字母,返回值是布尔型

在这里插入图片描述

(3)、find(参数) 返回参数在对象中的位置

str1 = 'abcdea'
print(str1.find('a'))
print(str1.find('a',1))  # find(参数1,参数2)从指定位置开始查找
print(str1.find('g'))  # 找不到对象的位置返回-1

在这里插入图片描述

(4)、index(参数) 返回参数在对象中的位置

str1 = 'abcdea'
print(str1.index('a'))
print(str1.index('a',1))  # find(参数1,参数2)从指定位置开始查找
print(str1.index('g'))  # 找不到对象的位置报错

在这里插入图片描述

(5)、strip() 去掉字符串前后的空格,返回去掉空格后的字符串

str2 = '     窗含西岭千秋雪,门泊东吴万里船     '
print(str2.strip())

在这里插入图片描述

  • 1)也可以去掉指定字符
str2_new = '********窗含西岭千秋雪,门泊东吴万里船********'
print(str2_new.strip('*'))

在这里插入图片描述

  • 2)strip只能去掉字符串前后的空格或指定符
str3 = '     两  个  黄  鹂  鸣  翠  柳,一  行  白  鹭  上  青  天     '
print(str3.strip())

在这里插入图片描述

(6)、replace(参数1,参数2) 将字符串中的参数1替换为参数2,返回替换后的字符串

str3 = '     两  个  黄  鹂  鸣  翠  柳,一  行  白  鹭  上  青  天     '
print(str3.replace(' ',''))

在这里插入图片描述

str3_new = '''<p>两个黄鹂鸣翠柳</p>
<p>一行白鹭上青天</p>
<p>窗含西岭千秋雪</p>
<p>门泊东吴万里船</p>'''
print(str3_new.replace('<p>', '').replace('</p>', ''))

在这里插入图片描述

(7)、startswith 检查字符串是否以指定的子字符串开头,返回值是布尔型

# 根据身份证号判断是否是南京的身份证
id_card='320104199909200961'  # 本质是字符串
if id_card.startswith('3201'):
    print('南京的身份证')

在这里插入图片描述

(8)、endswith 检查字符串是否以指定的子字符串结尾,返回值是布尔型

# 判断身份证的最后一位是否是X
id_card='320104199909200961'  # 本质是字符串
if id_card.endswith('X'):
    print('最后一位是X')
else:
    print('不是')

在这里插入图片描述

(9)、split(参数) 以参数为分隔符,切割字符串,返回值是列表

str9 = 'abcdefg'
print(str9.split('d'))

在这里插入图片描述

  • 如果切割符位于首位或末尾,会产生空值
str9_new = 'dabcdefgd'
print(str9_new.split('d'))

在这里插入图片描述

经典案例:写一个号段筛选程序,需求如下
(1)、用户从控制台输入一个手机号,判断出运营商(移动(130-150),联通(151-170),电信(171-190))
(2)、如果用户输入的位数不对,提示用户位数有误,如果用户输入非数字,提示有非法字符

mobile = input('请输入一个手机号:  ')
if not mobile.isdigit():  # 判断用户输入的是否不是纯数字
    print('您输入的不是数字')
else:
    if len(mobile) != 11:  # 判断用户输入的长度是否不是11位
        print('位数不正确')
    else:
        number = int(mobile[0:3])  # 取得手机号的前三位,并转为int型
        if 130 <= number <= 150:
            print('移动')
        elif 151 <= number <= 170:
            print('联通')
        elif 171 <= number <= 190:
            print('电信')
        else:
            print('您输入的手机号不属于任何运营商')

三、格式化字符串 format()

1、格式化字符串

格式化字符串实现的是字符串的拼接,他比普通的拼接更加的简洁高效

a = 100
b = 98
print(str(a)+'+'+str(b)+'='+str(a+b))  # 100+98=198
a = 100
b = 98
print(f'{a}+{b}={a+b}')

在这里插入图片描述

2、format()

(1)、顺序填值

str1 = 'my name is {}, I am {} years old'.format('tom',16)
print(str1)

在这里插入图片描述

(2)、下标填值,内容可以互换顺序或选择相同的值

str1 = 'I am {1} years old, my name is {0}'.format('tom',16)
print(str1)

在这里插入图片描述

(3)、顺序取值与下标取值不可以混用,否则报错

str1 = 'my name is {0}, I am {} years old'.format('tom',16)
print(str1)

在这里插入图片描述

(4)、如果前面的{}数量比后面的参数多,顺序取值会报错,下标取值不报错

# 顺序取值
str1 = 'my name is {}{}, I am {} years old'.format('tom',16)
print(str1)

在这里插入图片描述

# 下标取值
str1 = 'my name is {0}{1}, I am {1} years old'.format('tom', 16)
print(str1)

在这里插入图片描述

(5)、如果前面的{}数量比后面的参数少,不报错

str1 = 'my name is {}'.format('tom',16)
print(str1)

在这里插入图片描述

(6)、补齐 {:n} 表示补齐到n位,超过n位不做限制,字符串默认左对齐,数字默认右对齐

str1 = 'my name is {:10}, I am {:10} years old'.format('tom',16)
print(str1)

在这里插入图片描述

(7)、修改对齐方式 {:<n}左对齐 {:>n}右对齐 {:^n}居中对齐

str1 = 'my name is {:>10}, I am {:<10} years old'.format('tom',16)
print(str1)

在这里插入图片描述

(8)、补0。数字在左侧补零

str1 = 'my name is {:10}, I am {:>010} years old'.format('tom',16)
print(str1)

在这里插入图片描述

(9)、python3.6以后可以用f’'格式化字符串

name = '天乐'
age = 21
print(f'Your name is {name:<10},your age is {age:>10}')

在这里插入图片描述

四、循环语句

在这里插入图片描述

1、while循环

while循环实现从1打印到10

i = 1
while i <= 10:  # while后面跟一个布尔表达式,如果结果为True,则执行循环内的语句,如果结果为False,则循环结束
   print(i)
   i += 1  # i自增长1

在这里插入图片描述

2、for循环

for循环实现1打印到10

for i in range(1,11):  # range(起始值,终止值,步长) 包含起始值,不包含终止值,步长缺省值为1
   print(i)

在这里插入图片描述

  • 1)如果有明确的循环次数,可以用for循环,遍历的时候也可以用for循环,如果循环次数不确定,可以用while循环

打印20以内的奇数

#  方案1:
for i in range(1,20,2):
   print(i)

#  方案2:
for i in range(1,20):
   if i % 2 == 1:
      print(i)

#  方案三:
i = 1
while i <= 20:
   print(i)
   i += 2

在这里插入图片描述

打印10到1的值

for i in range(10,0,-1):
   print(i)

在这里插入图片描述

计算1到100的累加和

sum = 0
for i in range(1,101)
   sum += i
print(sunm)

在这里插入图片描述

  • 2)for循环可以不写起始值,不写时,起始值为0
for i in range(10):
   print(i)

3、遍历列表

list1 = ['关羽','张飞','赵云','马超','黄忠']

#  直接变量
for one in list1:
   print(one)
   
#  下标变量
for i in range(len(list1)):
   print(list1[i])

在这里插入图片描述

4、break;continue;pass

(1)、break:终止循环

for i in range(1, 4):
    print(f'第{i}次外层循环')
    for j in range(1, 4):
        if j == 3:
            break  # 终止内层循环
        print(f'第{i}次外层循环中的第{j}才内层循环')

在这里插入图片描述

(2)、continue:跳出当次循环

for i in range(1, 4):
    print(f'第{i}次外层循环')
    for j in range(1, 5):
        if j == 3:
            continue  # 当j等于3时,跳出当次循环,执行下一次循环
        print(f'第{i}次外层循环中的第{j}次内层循环')

在这里插入图片描述

(3)、pass:占位符,防止语法错误

pass语句的出现是为了保持程序结构的完整性

for i in range(1, 5):
    if i == 2:
        pass  # 占位符,防止语法错误
    print(i)

在这里插入图片描述

(4)、循环语句也可以有else语句,当循环中没有出现break,则循环运行完成之后执行else中的语句

for i in range(1, 5):
    if i == 2:
        break
        # continue
        # pass  # 占位符,防止语法错误
    print(i)
else:
    print('循环运行完毕!')

在这里插入图片描述

for i in range(1, 5):
    if i == 2:
        # break
        continue
        # pass  # 占位符,防止语法错误
    print(i)
else:
    print('循环运行完毕!')

在这里插入图片描述

for i in range(1, 5):
    if i == 2:
        # break
        # continue
        pass  # 占位符,防止语法错误
    print(i)
else:
    print('循环运行完毕!')

在这里插入图片描述

  • 1)\r:光标回到行首
import time  # 加载时间模块

for i in range(10,0,-1):
   print(f'\r倒计时{i}秒',end='')  # \r 光标回到行首
   time.sleep(1)  # 程序等待1秒
else:
   print('\r倒计时结束')
  • 2)print()函数的sep参数,每个参数之间间隔的字符
print(1,2,3,4,5,sep='//')

在这里插入图片描述

  • 3)print()函数的end参数,打印结束时默认加一个换行符,缺省值end=‘\n’
print(1, end='')
print(2, end='')

在这里插入图片描述

经典案例:打印九九乘法表

for i in range(1, 10):  # 控制第二个数值每行加1
    for j in range(1, i + 1):  # 控制第一个数值在一行一直自增长,直到和第二个数值一样大
        print(f'{j}*{i}={i * j}\t', end='')  # \t 每次打印间隔一个制表符距离
    print()

在这里插入图片描述


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鹿快跑~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值