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位不同的字符串