第五章习题

1、将一个正整数分解质因数
算法:
n从2开始除,如果能被2整除,继续从2开始除,如果不能被2整除,除数依次加1,继续判断能否整除,如果能整除再从2开始除
能整除就加入结果列表,更新n的值,且重置除数为2

def prime_factor(n):
    result = []
    divisor = 2
    while n != 1:
        if n % divisor == 0:
            result.append(divisor)
            n = n // divisor
            divisor = 2
        else:
            divisor += 1
    return result

print(prime_factor(24))
print(prime_factor(30))
print(prime_factor(100))

在这里插入图片描述
2、一个字符串中,分别输出奇数坐标字符或偶数坐标字符,奇数坐标的一行,偶数坐标的一行

s = "abcdefgh"
print("奇数坐标的字符:",s[1::2])
print("偶数坐标的字符:",s[0::2])

在这里插入图片描述
3、统计字符串中的字母、数字、其他字符个数

s = "alkjjjsdfs111! @#A"
letter_num = 0
digit_num = 0
other_num = 0
for i in s:
    if i.isalpha():
        letter_num += 1
    elif i.isdigit():
        digit_num += 1
    else:
        other_num += 1

print("字母:",letter_num)
print("数字:",digit_num)
print("其他:",other_num)

在这里插入图片描述
4、有一个已经排好序的列表。现输入一个数,要求按原来的规律将它插入列表中

sorted_num_list = list(range(1,20,2))
insert_num = int(input("please input a number to insert:"))
for i in range(len(sorted_num_list)):
    if insert_num <= sorted_num_list[i]:
        sorted_num_list.insert(i,insert_num)
        break
else:
    sorted_num_list.append(insert_num)

print(sorted_num_list)

在这里插入图片描述
5、统计名字列表中,各名字的首字母在名字列表中出现的次数

name_list = ["slh","rob","hu","roni","zhangsan","lisi"]
first_letter_list = list(map(lambda x:x[0],name_list))
first_letter_dict = {}
for i in first_letter_list:
    if first_letter_dict.get(i) is None:
        first_letter_dict[i] = 1
    else:
        first_letter_dict[i] += 1

print(first_letter_dict)

在这里插入图片描述
6、字符替换
1)读入一个字符串
2)去掉字符串的前后空格
3)如果字符串包含数字则1替换成a,2替换成b,3替换成c,以此类推
4)将字符串使用空格进行切分,存到一个列表,然后使用*号连接,并输出
5)把这些功能封装到一个函数里面,把执行结果作为返回值

import string
def parse_string():
    s = input("please input a string:").strip()
    rule = s.maketrans('123456789','abcdefghi')
    s = s.translate(rule)
    return "*".join(s.split())

print(parse_string())

在这里插入图片描述
7、找出字符串中出现次数最多的字符,并输出其出现的位置

s = "adsfdsfasadsafasfddssf"
str_dict = {}
result = []
letter = ""
for v in s:
    if str_dict.get(v) == None:
        str_dict[v] = 1
    else:
        str_dict[v] += 1

for k,v in str_dict.items():
    if str_dict[k] == max(str_dict.values()):
        letter = k

for i in range(len(s)):
    if s[i] == letter:
        result.append(i)

print("出现次数最多的字符:%s,出现位置:%s" %(letter,result))

在这里插入图片描述
8、找出一段句子中最长的单词及其索引位置,以字典返回字符串

s = "the people republic of china!hhhhhhhh"
import string
for i in s:
    if i in string.punctuation:
        s = s.replace(i," ")

result_dict = {}
length = len(sorted(s.split(),key=len)[-1])#最长的字符串的长度
max_length_list = []#存放最长的字符串
for word in s.split():
    if len(word) == length:
        max_length_list.append(word)

for word in max_length_list:
    result_dict[word] = s.index(word)

print(result_dict)

在这里插入图片描述
9、字母游戏
“Pig Latin”是一个英语儿童文字改写游戏,整个游戏遵从下述规则:
(1). 元音字母是‘a’、‘e’、‘i’、‘o’、‘u’。字母‘y’在不是第一个字母的情况下,也被视作元音
字母。其他字母均为辅音字母。例如,单词“yearly”有三个元音字母(分别为‘e’、‘a’和最后一个
‘y’)和三个辅音字母(第一个‘y’、‘r’和‘l’)。
(2). 如果英文单词以元音字母开始,则在单词末尾加入“hay”后得到“Pig Latin”对应单词。例如,“ask”
变为“askhay”,“use”变为“usehay”。(同上)
(3). 如果英文单词以‘q’字母开始,并且后面有个字母‘u’,将“qu”移动到单词末尾加入“ay”后得到
“Pig Latin”对应单词。例如,“quiet”变为“ietquay”,“quay”变为“ayquay”。
(4). 如果英文单词以辅音字母开始,所有连续的辅音字母一起移动到单词末尾加入“ay”后得到“Pig Latin”
对应单词。例如,“tomato”变为“omatotay”, “school” 变为“oolschay”,“you” 变为
“ouyay”,“my” 变为“ymay ”,“ssssh” 变为“sssshay”。
(5). 如果英文单词中有大写字母,必须所有字母均转换为小写。
输入格式:
一系列单词,单词之间使用空格分隔。
输出格式:
按照以上规则转化每个单词,单词之间使用空格分隔。
输入样例:
Welcome to the Python world Are you ready
输出样例:
elcomeway otay ethay ythonpay orldway arehay ouyay eadyray

s = "Welcome to the Python world Are you ready"
s = s.lower()
word_list = s.split()
for i in range(len(word_list)):
    if word_list[i][0] in "aeiou":
        word_list[i] = word_list[i] + "hay"
    elif word_list[i][:2] == "qu":
        word_list[i] = word_list[i][2:] + word_list[i][:2] + "ay"
    elif word_list[i][0] not in "aeiou":
        for j in range(1,len(word_list[i])):
            if word_list[i][j] in "aeiou" or word_list[i][j] == "y":
                word_list[i] = word_list[i][j:] + word_list[i][0:j] + "ay"
                break

print(" ".join(word_list))

在这里插入图片描述
10、实现字符串的upper、lower以及swapcase方法

def upper(s):
    result = ""
    for i in s:
        if i >="a" and i <= "z":
            result += chr(ord(i)-32)
    return result

print(upper("abc"))

def lower(s):
    result = ""
    for i in s:
        if i >="A" and i <= "Z":
            result += chr(ord(i)+32)
    return result

print(lower("ABCdef"))

def swapcase(s):
    result = ""
    for i in s:
        if i >="A" and i <= "Z":
            result += chr(ord(i)+32)
        elif i >="a" and i <= "z":
            result += chr(ord(i)-32)
    return result

print(swapcase("ABCdef"))

在这里插入图片描述
11、实现字符串的find方法

def find(s,sub,start=None,end=None):
    if start == None:
        start = 0
    if end == None:
        end = len(s)
    sub_length = len(sub)
    for i in range(start,end):
        if s[i:i+sub_length] == sub:
            return i
    return -1

print(find("abcd","bc"))
print(find("abcd","bc",1))
print(find("abcd","bc",1,3))
print(find("abcd","b1"))

在这里插入图片描述
12、实现字符串的isalpha方法

def isalpha(s):
    for i in s:
        if not ((i >= "a" and i <= "z") or (i >="A" and i <= "Z")):
            return False
    return True

print(isalpha("ABCd"))
print(isalpha("ABCd1"))

在这里插入图片描述
13、实现字符串的isdigit方法

def isdigit(s):
    for i in s:
        if i not in "0123456789":
            return False
    return True

print(isdigit("8887"))
print(isdigit("88q7"))

在这里插入图片描述
14、实现字符串的isalnum方法

def isalnum(s):
    for i in s:
        if not ((i >= "a" and i <= "z") or (i >="A" and i <= "Z") or (i in "0123456789")):
            return False
    return True

print(isalnum("abh89"))
print(isalnum("abh89!"))

在这里插入图片描述
15、实现字符串的join方法

def join(seq,join_str=None):
    if join_str == None:
        join_str = ""
    result = ""
    for i in seq:
        result += (i + join_str)
    if join_str == "":
        return result
    return result[:-1]

print(join(["a","b","c"]))
print(join(["a","b","c"],"*"))

在这里插入图片描述
16、实现字符串的replace方法
17、实现字符串的split方法
18、实现字符串的strip方法
算法:
分别从开头和结尾开始遍历字符是否是要滤掉的字符
是的话,删除,利用 列表副本删除

def strip(s,strip_str=None):
    if strip_str == None:
        strip_str = "\n\t\r\f"

    lst = list(s)
    lst_copy = lst[:]
    for i in lst:
        if i in strip_str:
            lst_copy.remove(i)
        else:
            break
    for i in lst[::-1]:
        if i in strip_str:
            lst_copy.remove(i)
        else:
            break
    return "".join(lst_copy)

print(strip(" \t\r\n\fabc\t\r\n\f"))
print(strip("####**abc########*","#*"))

在这里插入图片描述
19、报数问题:有n个人围成一圈,顺序排号。从第一个人开始报数(从1到3报数)
,凡报到3的人退出圈子,问最后留下的是原来第几号的那位

20、由单个字母组成的list,从键盘读入两个整数m、n(n>m),打印出list[m,n]之间
的字母能组成的所有n-m+1位不同的字符串

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值