python编程练习(小甲鱼)第16-20课

本文深入探讨了Python编程中的关键概念,包括数据类型转换、列表操作、迭代器使用、函数定义与调用、字符串处理、关键字参数应用及自定义函数实现。通过实例演示了如何进行高效编程,如水仙花数的查找、子字符串统计、回文联判断及字符串统计分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.将可迭代对象转化为列表,元组,字符串的内置函数

list() tuple() str()

2.区分reverse()和reversed(),为什么用法不一样

reverse()是python中列表的一个内置函数,用于将列表中的数据翻转
reversed(list)是python自带的一个方法,也就是一个类,返回的是一个将序列翻转后的迭代器,需要遍历

list1 = [1,2,3]
list1.reverse()#对列表list1翻转,无返回值
print(list1)#[3,2,1]
print(reversed(list1))#<list_reverseiterator object at 0x000001A79DA98630>类型变成迭代器

3.几个迭代器函数

list1 = [1,2,3]
for each in reversed(list1):
    print(each,end = ' ')#3 2 1

zip()依次返回各个参数组成的元组

list1 = [1,3,5,7,9]
list2 = [2,4,6,8,10]
for each in zip(list1, list2):
    print(each)
(1, 2)
(3, 4)
(5, 6)
(7, 8)
(9, 10)

enumerate():枚举,生成由每个元素索引值和元素组成的元组

str1 = "abcd"
for each in enumerate(str1):
    print(each)
(0, 'a')
(1, 'b')
(2, 'c')
(3, 'd')

4.python3的print()相关

print(*objects, sep=’ ‘, end=’\n’)
objects – 输出对象
sep --用来间隔多个对象,默认值是一个空格,可改变。
end – 用来设定以什么结尾。默认值是换行符 \n,我们可以换成其他字符串。
输出默认换行,想要不换行可以设置 end =’’ end =’ ’ end =’,'等

a = [1,2,3,4]
for each in a:
    print(each)#默认换行输出
for each in a:
    print(each,end = '')#不换行无间隔输出1234
print()#print起换行作用
for each in a:
    print(each,end = ' ')#不换行间隔输出1 2 3 4
for each in a:
    print(each,end = ',')#不换行以,间隔输出1,2,3,4
#间隔符设置
str1 = 'I';str2 = 'love';str3 = 'you'
print(str1,str2,str3,sep='.')#I.love.you

5.编写一个函数power()模拟内建函数pow(),即power(x, y)为计算并返回x的y次幂的值

def power(x,y):
    num = x ** y
    return num
print(power(2,2))

6.编写一个函数,利用欧几里得算法求最大公约数,例如gcd(x, y)返回值为参数x和参数y的最大公约数

def gcd(x,y):
    if x >= y:
        if x % y == 0:
            return y
        else:
            return 1
    elif y % x == 0:
        return x
    else:
        return 1
print(gcd(6,12))

7.编写一个将十进制转换为二进制的函数,要求采用“除2取余”的方式,结果与调用bin()一样返回字符串形式

def DectoBin(num):
    temp = []
    result = ''#空字符串
    while num:
        x = num % 2  #除2取余,逆序排列
        num = num // 2 #floor除
        temp.append(x)#在列表末尾添加元素
    while temp:
        result += str(temp.pop())#pop([index=-1])移出列表中的一个元素,默认最后一个元素,并且返回该元素的值
    return result
print(DectoBin(30))

8.关键字参数,函数在调用的时候,带上参数的名字去指定具体调用的是哪个参数

def SaySome(name, words):
        print(name + '->' + words)
SaySome(words='让编程改变世界!', name='小甲鱼')

9.使用help()查看函数的参数

print(help(print))
Help on built-in function print in module builtins:
print(...)
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file:  a file-like object (stream); defaults to the current sys.stdout.
sep:   string inserted between values, default a space.
end:   string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
None

10.编写一个符合以下要求的函数:

(a) 计算打印所有参数的和乘以基数(base=3)的结果
(b) 如果参数中最后一个参数为(base=5),则设定基数为5,基数不参与求和计算。

注:

函数参数前* 和**,都是用来将任意个数的参数导入到python函数中,* 表示以元组的形式导入参数,** 表示以字典的形式导入参数
字典形式d = {key1 : value1, key2 : value2 }

def sum(*params,base=3):#基数默认值3
    result = 0
    for i in params:
        result += i
    result *= base
    print('结果为:', result)
sum(1, 2, 3, 4, 5)
sum(1, 2, 3, 4, 5, base=5)

11.题目要求:如果一个3位数等于其各位数字的立方和,则称这个数为水仙花数。例如153 =1^3 + 5^3 + 3^3 ,因此153是一个水仙花数。编写一个程序,找出所有的水仙花数。

def shuixianhua():
    print('水仙花数为:',end = '')
    for i in range(100,1000):
        baiwei = i // 100
        shiwei = (i // 10)%10
        gewei = i % 10
        a = baiwei ** 3 + shiwei ** 3 +gewei ** 3
        if a == i:
            print(a,end = ' ')
shuixianhua()
print()

12.编写一个函数findstr(),该函数统计一个长度为2的子字符串在另一个字符串中出现的次数。例如:假定输入的字符串为"You cannot improve your past, but you can improve your future. Once time is wasted, life is wasted.",子字符串为"im",函数执行后打印“子字母串在目标字符串中共出现3次”。

def findstr():
    mu = input('请输入字符串:')
    zi = input('请输入子字符串:')
    count = 0
    if zi not in mu:
        print('未在目标字符串中找到子字符串')
    else:
        for i in range(len(mu)):
            if zi[0]==mu[i] and zi[1]==mu[i+1]:
                count += 1
        print('子字符串在目标字符串中共出现 %d 次' %count)#参数格式化输出整数
findstr()

13.编写一个函数,判断传入的字符串参数是否为“回文联”(回文联即用回文形式写成的对联,既可顺读,也可倒读。例如:上海自来水来自海上)

def huiwen():
    str1 = input('请输入字符串:')
    list1 = list(str1)
    list2 = list(reversed(list1))
    if list1 == list2:
        print(str1,'是回文联')
    else:
        print(str1,'不是回文联')
huiwen()

14.编写一个函数,分别统计出传入字符串参数(可能不只一个参数)的英文字母、空格、数字和其它字符的个数

def tongji(*param):#以元组的形式导入字符串
    length = len(param)
    for i in range(length):
        count_word ,count_num,count_spa,count_oth= 0,0,0,0
        for j in param[i]:
            if j.isalpha():#检测字符串是否由字母组成
                count_word += 1
            elif j.isspace():
                count_spa += 1
            elif j.isdigit():
                count_num += 1
            else:
                count_oth += 1
        print('第 %d 个字符串共有:英文字母 %d 个,数字 %d 个,空格 %d 个,其他字符 %d 个'
               % (i + 1, count_word, count_num, count_spa, count_oth))
tongji('I love you123', 'I love you', 'iloveyou123')
#第 1 个字符串共有:英文字母 8 个,数字 3 个,空格 2 个,其他字符 0 个
#第 2 个字符串共有:英文字母 8 个,数字 0 个,空格 2 个,其他字符 0 个
#第 3 个字符串共有:英文字母 8 个,数字 3 个,空格 0 个,其他字符 0 个
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值