From 39e7d06a24ed5fee0dce1eca8c2697395d08cb96 Mon Sep 17 00:00:00 2001 From: yangpengflag <38930516+yangpengflag@users.noreply.github.com> Date: Mon, 14 Jan 2019 18:23:13 +0800 Subject: [PATCH] commit homework --- reg_utils.py | 102 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ to_goat_latin.py | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 148 insertions(+) create mode 100644 reg_utils.py create mode 100644 to_goat_latin.py diff --git a/reg_utils.py b/reg_utils.py new file mode 100644 index 0000000..47ad059 --- /dev/null +++ b/reg_utils.py @@ -0,0 +1,102 @@ +import re + +class Regular: + def __init__(self, strs): + self.strs = strs + + # 方法能够匹配出所有的数字 + def get_numbers(self): + reg = "\d" + reg_reslt = re.findall(reg, self.strs) + print(reg_reslt) + return reg_reslt + + # 方法能够匹配出所有的邮箱 + def get_emails(self): + reg = "\d{9}@[a-z]*\.com" + reg_reslt = re.findall(reg, self.strs) + print(reg_reslt) + return reg_reslt + + # 方法可以匹配出所有的ip + def get_ips(self): + reg = r'(?<![\.\d])(?:(?:25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(?:25[0-5]|2[0-4]\d|[01]?\d\d?)(?![\.\d])' + reg_reslt = re.findall(reg, self.strs) + print(reg_reslt) + return reg_reslt + + # 方法能够匹配出所有的电话号码,电话包含座机和移动电话,座机要考虑区号3位或4位,号码要考虑7位或8位 + def get_phone_numbers(self): + reg = "13[0-9]\d{8}|14[5,7]\d{8}|15[0-3,5-9]\d{8}|17[0-3,5-8]\d{8}|18[0-9]\d{8}|166\d{8}|19[8-9]\d{8}" + reg1 = "0\d{2,3}\-\d{7,8}" + reg2 = "(?:13[0-9]\d{8}|14[5,7]\d{8}|15[0-3,5-9]\d{8}|17[0-3,5-8]\d{8}|18[0-9]\d{8}|166\d{8}|19[8-9]\d{8})|(?:0\d{2,3}\-\d{7,8})" + reg_reslt = re.findall(reg2, self.strs) + print(reg_reslt) + return reg_reslt + + # 方法能够匹配出所有的url,url可以以http开头、https开头、ftp开头 + def get_urls(self): + reg = "(?:http|https|ftp)\://[w]{3}\.[a-z0-9]*\.com" + reg_reslt = re.findall(reg, self.strs) + print(reg_reslt) + return reg_reslt + + +class SortUtils: + + # def __init__(self,list_strs,order_method): + # self.list_strs = list_strs + # self.order_method = order_method + + def sort(self,list_strs, order_method): + if order_method == "bubble": + SortUtils.__bubble_sort(list_strs) + if order_method == "quick": + SortUtils.__quick_sort(list_strs, 0, len(list_strs)-1) + + def __bubble_sort(self,list_strs): + for i in range(len(list_strs) - 1): + for j in range(len(list_strs) - 1 - i): + if list_strs[j] > list_strs[j + 1]: + list_strs[j], list_strs[j + 1] = list_strs[j + 1], list_strs[j] + print(list_strs) + print(list_strs) + return list_strs + + def __quick_sort(self,liststrs,start_index,end_index): + print(liststrs) + if start_index < end_index: # 如果角标左侧小于右侧则开始排序,否则退出 + basic, i, j = liststrs[start_index], start_index, end_index + + while i < j: # 保证左侧的index一定比右侧的小 + + while i < j and basic <= liststrs[j]: # 基准值比j(右侧)小,那么该值不做任何运算 + j -= 1 # 角标左移 + while i < j and basic >= liststrs[i]: # 基准值比i(左侧)大,那么该值不做任何运算 + i += 1 # 角标右移 + + liststrs[i], liststrs[j] = liststrs[j], liststrs[i] + print("i=" + str(i) + "&&&" + "j=" + str(j) + "$$$" + "sort_list=" + str(liststrs)) + + liststrs[i], liststrs[start_index] = liststrs[start_index], liststrs[i] + SortUtils.__quick_sort(liststrs, start_index, i - 1) + SortUtils.__quick_sort(liststrs, i + 1, end_index) + + + + +if __name__ == "__main__": + s_number = "my mumber is 18268194892 and my email address is 289965734@qq.com,and my ip address is 192.168.1.1 and 255.666.555.222 and my url is https://www.weekfan.com and my phone home_number is 0734-6838533 and 020-85071966" + + regular = Regular(s_number) + regular.get_numbers() + regular.get_emails() + regular.get_ips() + regular.get_urls() + regular.get_phone_numbers() + + l = [10, 6, 9, 18, 20, 5, 7, 15, 14, 18, 19] + sorttest = SortUtils() + sorttest.sort(l, "bubble") + sorttest.sort(l, "quick") + diff --git a/to_goat_latin.py b/to_goat_latin.py new file mode 100644 index 0000000..83e779a --- /dev/null +++ b/to_goat_latin.py @@ -0,0 +1,46 @@ +# 给定一个由空格分割单词的句子 S。每个单词只包含大写或小写字母。 +# +# 我们要将句子转换为 “Goat Latin”(一种类似于 猪拉丁文 - Pig Latin 的虚构语言)。 +# +# 山羊拉丁文的规则如下: +# +# 如果单词以元音开头(a, e, i, o, u),在单词后添加"ma"。 +# 例如,单词"apple"变为"applema"。 +# +# 如果单词以辅音字母开头(即非元音字母),移除第一个字符并将它放到末尾,之后再添加"ma"。 +# 例如,单词"goat"变为"oatgma"。 +# +# 根据单词在句子中的索引,在单词最后添加与索引相同数量的字母'a',索引从1开始。 +# 例如,在第一个单词后添加"a",在第二个单词后添加"aa",以此类推。 +# 返回将 S 转换为山羊拉丁文后的句子。 + +# 示例 1: +# +# 输入: "I speak Goat Latin" +# 输出: "Imaa peaksmaaa oatGmaaaa atinLmaaaaa" +# 示例 2: +# +# 输入: "The quick brown fox jumped over the lazy dog" +# 输出: "heTmaa uickqmaaa rownbmaaaa oxfmaaaaa umpedjmaaaaaa overmaaaaaaa hetmaaaaaaaa azylmaaaaaaaaa ogdmaaaaaaaaaa" + + +def to_goat_latin(s): + vowel = ['a', 'e', 'i', 'o', 'u'] + words = s.split() + print(words) + for i in range(len(words)): + if words[i][0].lower() in vowel: # 如果单词以元音开头(a, e, i, o, u),在单词后添加"ma"。 + words[i] = words[i]+"ma" + words[i] = words[i] + "a" * (i + 1) # 根据单词在句子中的索引,在单词最后添加与索引相同数量的字母'a',索引从1开始 + else: # 如果单词以辅音字母开头(即非元音字母),移除第一个字符并将它放到末尾,之后再添加"ma" + words[i] = words[i][1:len(words[i])] + words[i][0] + "ma" + words[i] = words[i] + "a"*(i+1) # 根据单词在句子中的索引,在单词最后添加与索引相同数量的字母'a',索引从1开始 + + + + print(" ".join(words)) + +s = "I speak Goat Latin" +to_goat_latin(s) +ss = "The quick brown fox jumped over the lazy dog" +to_goat_latin(ss) \ No newline at end of file -- libgit2 0.26.0