菜农作业:
题目中问题的解决基于Python GitHub Level 2 Quesion 10
Question 10 | |
Level 2 | |
Question: | |
Write a program that accepts a sequence of whitespace separated words as input and prints the words after removing all duplicate words and sorting them alphanumerically. | |
Suppose the following input is supplied to the program: | |
hello world and practice makes perfect and hello world again | |
Then, the output should be: | |
again and hello makes perfect practice world |
题目:删除输入字符串中相同的单词,并对单词进行排序,结果以字符串形式输出,格式与输入相同。
这道题的排序是Question 8 中设置的maopao函数。
已知调用函数使用:import
from Question8 import maopao
但问题是,在Question8中,有多个函数,还有print命令
已知:
if __name__ == "__main__":
函数名()
只有在其他文件中import函数名时,才能调用。如果一个文件中有多个函数,这个命令非常好用。不仅仅适用于函数,变量赋值也可以。
如果引用函数所在py文件中有变量赋值,且未在if __name__ == "__main__"下,那么会被直接执行。
那我不想要这些赋值怎么办?
同理,也一并放在if __name__ == "__main__":下面
(但是要注意顺序!!!)
下面是Question8的代码:
def bidaxiao(str1, str2):
l1 = [len(str1), len(str2)]
for i in range(min(l1)):
if dict[str1[i]] < dict[str2[i]]:
return True
elif dict[str1[i]] == dict[str2[i]]:
continue
else:
return False
return len(str1) < len(str2)
def slipstr(string):
# 将一整串字符串按逗号间隔拆分,
strlist = []
str2 = ""
for str1 in string:
if str1 != ",":
str2 += str1
else:
strlist.append(str2)
str2 = ""
strlist.append(str2)
return strlist
def bidaxiao(str1, str2):
l1 = [len(str1), len(str2)]
for i in range(min(l1)):
if dict[str1[i]] < dict[str2[i]]:
return True
elif dict[str1[i]] == dict[str2[i]]:
continue
else:
return False
return len(str1) < len(str2)
def slipstr(string):
# 将一整串字符串按逗号间隔拆分,
strlist = []
str2 = ""
for str1 in string:
if str1 != ",":
str2 += str1
else:
strlist.append(str2)
str2 = ""
strlist.append(str2)
return strlist
def maopao(strlist):
# 冒泡排序函数
numofstr = len(strlist)
for a in range(numofstr):
for b in range(0, numofstr-a-1):
if strlist[b] > strlist[b + 1]:
strlist[b], strlist[b + 1] = strlist[b + 1], strlist[b]
else:
continue
return strlist
if __name__ == "__main__":
num = input("输入以逗号为间隔的数字,字母,单词进行排序:")
numlist = slipstr(num)
finallist = maopao(numlist)
print(finallist)
if __name__ == "__main__":
bidaxiao()
slipstr()
maopao()
注意顺序。这样只有在Question8下,才会执行第一个if __name__ == "__main__"
这样就可以在Question10中引用了:
from Question8 import maopao
def splitstr(string):
# 将一整串字符串按空格间隔拆分,
strlist = []
str2 = ""
for str1 in string:
if str1 != " ":
str2 += str1
else:
strlist.append(str2)
str2 = ""
strlist.append(str2)
return strlist
string = input("输入一段英文")
alist = splitstr(string)
num = len(alist)
for i in range(-num, -1):
# 从后向前遍历列表
if alist.count(alist[i]) > 1:
# 查找列表中相同内容数量,count函数
# 参数是alist[i]
alist.remove(alist[i])
# 移除
list = alist
finstr = ""
finallist = maopao(list)
# 转化为字符串
for a in finallist:
finstr += a
finstr += " "
print(finstr)