Python学习——练习5

目录

1、求第n项的斐波那契数列的值(n>=1)

2、不死的兔子

3、找出重复的整数

4、写一个方法,计算列表所有偶数下标元素的和(注意返回值)

5、请使用函数完成选择、冒泡、插入三种排序

6、根据完整的路径从路径中分离文件路径、文件名及扩展名

7、获取字符串中汉字的个数

8、将字母全部转换为大写或小写

9、根据标点符号对字符串进行分行

10、去掉字符串数组中每个字符串的空格

11、日期格式转换

12、字符串的逆排序并输出

13、一句英文的逆序输出

14、从如下请求地址中提取出用户名和域名

15、敏感词替换

16、判断一个字符串是否为另一个字符串的子串【分别使用find()  、index()方法】

17、随机生成无数字的全字母的字符串

18、判定一个字符串中既有数字又有字母

19、字符串内的字符排序(只按字母序不论大小写)

20、判断一个字符是否是回文字符串(面试题)


1、求第n项的斐波那契数列的值(n>=1)

def fibonacci(n):
    '''
    返回第n个斐波那契数列值
    '''
    if n < 1:
        print('n必须是大于等于1的整数!')
        return
    elif n == 1 or n == 2:
        return 1
    return fibonacci(n-1) + fibonacci(n-2)


if __name__ == '__main__':
    n = int(input('请输入整数n(n>=1):'))
    print(f'第{n}项斐波那契数列的值为:{fibonacci(n)}')

结果:


2、不死的兔子

有一对刚刚出生的兔子,兔子可以经过四个月,可以长大称为成年的兔子,可以生育新的兔子,假设成年兔子,每个月生一对小兔子,问,第n个月共有多少对兔子(假设兔子不死)

def rabbit(n):
    '''
    该函数用于求解如下问题:
    有一对刚刚出生的兔子,
	兔子可以经过四个月,可以长大称为成年的兔子,可以生育新的兔子,
	假设成年兔子,每个月生一对小兔子,问,第n个月共有多少对兔子(假设兔子不死)
    '''
    if n < 0:
        print('n必须大于等于0!')
        return
    elif n >= 0 and n <= 3:
        return 1
    return rabbit(n-1) + rabbit(n-4)

if __name__ == '__main__':
    n = int(input('请输入月份n:'))
    print(f'第{n}个月共有{rabbit(n)}对兔子')

结果:


3、找出重复的整数

给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数

def repeat(ls):
    '''
    该函数用于求解如下问题:
    给定一个包含n+1个整数的数组nums,其数字在1到n之间(包含1和n),
	可知至少存在一个重复的整数,假设只有一个重复的整数,请找出这个重复的数
    '''
    temp = 0
    for i in range(len(ls)):
        temp ^= i ^ ls[i]
    return temp

if __name__ == '__main__':
    ls = [1,2,3,4,5,6,7,4]
    print(f'{ls}中重复的数为:{repeat(ls)}')

结果:


4、写一个方法,计算列表所有偶数下标元素的和(注意返回值)

def sum_even(ls):
    '''
    计算列表所有偶数下标元素的和
    '''
    sum_even = 0
    for i in range(0,len(ls),2):
        sum_even += ls[i]
    return sum_even

if __name__ == '__main__':
    ls = [1,2,3,4,5,6,7,8,9]
    print(f'{ls}中所有偶数下标元素的和为:{sum_even(ls)}')

结果:


5、请使用函数完成选择、冒泡、插入三种排序

def selection_sort(ls):
    '''
    选择排序法
    '''
    for i in range(len(ls)):
        index_min = i
        for j in range(i+1,len(ls)):
            if ls[index_min] > ls[j]:
                index_min = j
        ls[index_min],ls[i] = ls[i],ls[index_min]
    return ls

def bubbling_sort(ls):
    '''
    冒泡排序法
    '''
    for i in range(len(ls)):
        for j in range(len(ls)-i-1):
            if ls[j] > ls[j+1]:
                ls[j],ls[j+1] = ls[j+1],ls[j]
    return ls

def insert_sort(ls):
    '''
    插入排序法
    '''
    for i in range(1,len(ls)):
        key = ls[i]
        j = i - 1
        while j >= 0 and key < ls[j]:
            ls[j+1] = ls[j]
            j -= 1
        ls[j+1] = key
    return ls

ls = [23,5,12,67,64,87,3,1,2,28]
print(f'原列表为:{ls}')
print(f'选择排序法排序后的列表为:{selection_sort(ls)}')
print(f'冒泡排序法排序后的列表为:{bubbling_sort(ls)}')
print(f'插入排序法排序后的列表为:{insert_sort(ls)}')

结果:


6、根据完整的路径从路径中分离文件路径、文件名及扩展名

import os.path

def separate_path(path):
    '''
    该函数用于将完整路径分离为文件路径、文件名及其扩展名并输出打印
    '''
    tmp = os.path.basename(path)
    ls = tmp.rsplit(".",1)
    print(f'文件路径:{os.path.dirname(path)}')
    print(f'文件名:{ls[0]}')
    print(f'文件扩展名:{ls[1]}')

if __name__ == "__main__":
    path = input('请输入要分离的完整文件路径:')
    separate_path(path)

结果:


7、获取字符串中汉字的个数

def isChinese(strings):
    '''
    该函数用于统计一个字符串中的汉字个数
    '''
    count_ch = 0
    for ch in strings:
        if '\u4e00' <= ch <= '\u9fa5':
            count_ch += 1
    return count_ch

if __name__ == "__main__":
    strings = input('请输入一个字符串以统计其汉字个数:')
    print(f'\'{strings}\'中的汉字个数有{isChinese(strings)}个')

结果:

8、将字母全部转换为大写或小写

def shift(string):
    '''
    该函数用于将字符串中的字母全部转换为大写或小写
    '''
    string_up = string.upper()
    string_low = string.lower()
    print(f'字符串:{string}')
    print(f'全部转换为大写:{string_up}')
    print(f'全部转换为小写:{string_low}')

if __name__ == '__main__':
    string = input('请输入一个字符串:')
    shift(string)

结果:


9、根据标点符号对字符串进行分行

def enter(fh,string):
    '''
    该函数用于根据指定的标点符号对指定字符串进行换行并输出
    '''
    tmp = string.split(f'{fh}')
    for i in range(len(tmp)):
        print(tmp[i])

if __name__ == '__main__':
    string = input('请输入一段带有标点符号的字符串:')
    fh = input('请输入换行标志符号:')
    enter(fh,string)

结果:


10、去掉字符串数组中每个字符串的空格

def cls_space(strings):
    '''
    该函数用于清除字符串数组中每个字符串的空格
    '''
    for i in range(len(strings)):
        strings[i] = strings[i].replace(' ','')
    return strings

if __name__ == '__main__':
    strings = input('请输入多个字符串(用英文逗号间隔):').split(',')
    print(f'您输入的字符串数组:{strings}')
    print(f'清除空格后的字符串数组:{cls_space(strings)}')

结果:

11、日期格式转换

让用户输入一个日期格式如“2008/08/08”,将 输入的日期格式转换为“2008年-8月-8日”

def swich_date(one_date):
    '''
    将输入的日期格式“年/月/日”转换为“xx年-xx月-xx日”
    '''
    tmp = one_date.split('/')
    print(f'{tmp[0]}年-{int(tmp[1])}月-{int(tmp[2])}日')

if __name__ == '__main__':
    one_date = input('请输入“年/月/日”格式的日期:')
    swich_date(one_date)

结果:


12、字符串的逆排序并输出

接收用户输入的字符串,将其中的字符进行逆序排序并输出,如“cabed”→“edcba”

def sort_reverse(str_0):
    '''
    该函数用于将字符串逆序排序
    '''
    tmp = list(str_0)
    tmp.sort(reverse=True)
    str_1 = ''.join(tmp)
    return str_1

if __name__ == '__main__':
    str_0 = input('请输入一个英文字符串:')
    print(f'您输入的字符串为:{str_0}')
    print(f'逆序排序后的字符串为:{sort_reverse(str_0)}')

结果:

13、一句英文的逆序输出

接收用户输入的一句英文,将其中的单词以逆序输出,“hello c sharp”→“sharp c hello”

def sentence_reverse(sentence):
    '''
    该函数用于将一句英文逆序输出,如“hello c sharp”→“sharp c hello”
    '''
    tmp = sentence.split(' ')
    tmp.reverse()
    senrence = ' '.join(tmp)
    return senrence

if __name__ == '__main__':
    sentence = input('请输入一句英文:')
    print(f'逆序输出:{sentence_reverse(sentence)}')

结果:


14、从如下请求地址中提取出用户名和域名

http://www.163.com?userName=admin&pwd=123456

# 从url地址中提取出用户名和域名

url = 'http://www.163.com?userName=admin&pwd=123456'

ls = url.split('?')
domain = ls[0].split('/')[2]
ls_1 = ls[1].split('&')
username = ls_1[0].split('=')[1]
print(f'域名:{domain}')
print(f'域名:{username}')

结果:

15、敏感词替换

让用户输入一句话,判断这句话中有没有邪恶,如果有邪恶就替换成这种形式然后输出,如:“老牛很邪恶”,输出后变成”老牛很**”

sentence = input('请输入一句话(‘邪恶’是敏感词汇):')
ls = sentence.split('邪恶')
if len(ls) == 1:
    print('该句中没有敏感词‘邪恶’')
else:
    print('**'.join(ls))

结果:


16、判断一个字符串是否为另一个字符串的子串【分别使用find()  、index()方法】

str_a = input('请输入字符串a:')
str_b = input('请输入字符串b:')

# 使用find()方法:
flag = str_a.find(str_b)
if flag == -1:
    print('字符串b不是字符串a的子串')
else:
    print('字符串b是字符串a的子串')

# 使用index()方法:
try:
    flag = str_a.index(str_b)
except ValueError:
    print('字符串b不是字符串a的子串')
else:
    print('字符串b是字符串a的子串')

结果:

17、随机生成无数字的全字母的字符串

import random

def random_letter():
    '''
    随机生成无数字的全字母的字符串
    '''
    ls = []
    str_max = int(input('请输入随机字符串长度的最大值:'))
    str_len = random.randint(1,str_max)
    for i in range(str_len):
        ls.append(chr(random.randint(ord('a'),ord('z'))))
    strs = ''.join(ls)
    return strs

if __name__ == '__main__':
    print(random_letter())

结果:


作业18:随机生成带数字和字母的字符串

import random

def random_letter():
    '''
    随机生成字母a-z
    '''
    letter = chr(random.randint(ord('a'),ord('z')))
    return letter

def random_num09():
    '''
    随机生成数字0-9
    '''
    num = random.randint(0,9)
    return num


if __name__ == '__main__':
    ls = []
    str_max = int(input('请输入随机字符串长度的最大值:'))
    str_len = random.randint(1,str_max)
    for i in range(str_len):
        flag = random.randint(0,1)
        if flag == 0:
            ls.append(str(random_num09()))
        else:
            ls.append(random_letter())
    strs = ''.join(ls)
    print(strs)

结果:


18、判定一个字符串中既有数字又有字母

def num_alpha(strs):
    '''
    判定一个字符串中既有数字又有字母
    '''
    flag_num = 0
    flag_alpha = 0
    for i in strs:
        if i.isdigit() == True:
            flag_num = 1
            break
    for i in strs:
        if i.isalpha() == True:
            flag_alpha = 1
            break
    if flag_num == 1 and flag_alpha == 1:
        return True
    else:
        return False

if __name__ == '__main__':
    strs = input('请输入一个字符串:')
    if num_alpha(strs) == True:
        print('该字符串中既有数字又有字母')
    else:
        print('该字符串不满足既有数字又有字母')

结果:


19、字符串内的字符排序(只按字母序不论大小写)

def alp_sort(strs):
    '''
    该函数将字符串内的字符排序(不论字母大小写)
    '''
    ls = list(strs)
    ls_upper = []
    for i in range(len(strs)):
        if ls[i].isalpha:
            if ls[i].isupper():
                ls_upper.append(ls[i])
                ls[i] = ls[i].lower()
    ls.sort()
    for i in ls_upper:
        flag = ls.index(i.lower())
        ls[flag] = ls[flag].upper() 
    strs = ''.join(ls)
    return strs

if __name__ == '__main__':
    strs = input('请输入一段字符串:')
    print(f'排序后的字符串(不论字母大小写):{alp_sort(strs)}')

结果:


20、判断一个字符是否是回文字符串(面试题)

如:"1234567654321"、 "上海自来水来自海上"

def isHuiWen(strs):
    '''
    该函数用于判断一个字符是否是回文字符串
    '''
    ls_1 = list(strs)
    ls_2 = list(strs)
    ls_2.reverse()
    if ls_1 == ls_2:
        print('该函数是回文字符串')
    else:
        print('该函数不是回文字符串')

if __name__ == '__main__':
    strs = input('请输入一个字符串:')
    isHuiWen(strs)

结果:

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

俗人不俗鸭

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

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

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

打赏作者

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

抵扣说明:

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

余额充值