我甚至不知道从哪里开始描述这个问题。
我听了很多音乐,而且我在尝试排名时发现了这些音乐。所有这些专辑,除非你在列表中一次比较两个(哪个是更好的x或y),否则可能很难。有点像你在验光师的问题"看起来更好,一两个?"
我想要做的是找到一个已经存在的程序,或者获取一个程序的代码:
a)允许您输入大量项目列表
b)沿着这条线进行比较并一次比较两个,记录每个选择的响应
c)打印出最终结果列表,通过您在编号列表中的选择显示您排名最高的那个。
我几乎没有经验编码,这个问题/请求对于谷歌搜索来说太笨重了,所以现在我来这里。
答案 0 :(得分:1)
这里基本上有三个问题需要解决。
从用户收集列表。
从列表中生成成对组合的详尽列表。
从用户处收集每对的首选项。
使用每对的首选项在列表中强制执行订单。
前三个问题相当简单,但第四个问题是很多数学讨论和出版的主题。
以下是 python3 的简单骨骼脚本。
#!/bin/python3
# Part 1 get the list from the user.
items = []
item = "..."
while(item!=""):
item = input("enter item name or type enter to continue:")
if(item!=""):
items.append(item)
# Part 2 make combinations from list
def combinations(aList):
done = []
result = []
for k in aList:
done.append(k)
for k2 in aList:
if not(k2 in done):
result.append((k,k2))
return(result)
toRank = combinations(items)
# Part 3 get rankings for combinations
preferences = {}
for k in toRank:
choice = "2"
while not(choice in ["0","1"]):
choice = input("0:"+k[0]+"\t"+"1:"+k[1]+"\n")
preferences[k] = choice
# Part 4 rank list based on rankings
# This part is not straight forward but for the purposes of the example
# we will simply put things in order based on how many times they were
# chosen in a head on head comparison.
wins = {k:0 for k in items}
for k in preferences:
wins[k[int(preferences[k])]]+=1
from operator import itemgetter
rankedList = sorted(wins.items(), key=itemgetter(1))
rankedList.reverse()
#Print The final result
resultText = ""
for k in rankedList:
resultText+=str(k)+"\n"
with open("restultFile.txt","w") as outFile:
outFile.write(resultText[:-1])
这是最低可行产品。它完全是骨干,但它的存在允许早期用户确定应该将哪些规格纳入下一代产品。编写代码就是定义可获得的增量。从小处开始积累。
如果您有兴趣学习编程,我建议您将第一个目标设为“hello world”(编写一个将文本“hello world”放在屏幕上的程序),而提供的示例是在python3中,您现有的HTML经验可能使JS成为您开始学习的最佳语言。
编辑:输出打印到文件“restultFile.txt”,而不是打印到终端。
答案 1 :(得分:0)
你去,
#Written for user ECHtoplasm
# Author: Ubdussmad <mailto:ubdussmad@gmail.com>
import operator
data = []
parent = dict()
def take_inputs():
stop = False
while stop == False:
z=raw_input('Enter the name of the album or enter 0 if finished: ')
if z == '0':
stop=True
else:
data.append(z)
parent[z] = 0
def compare(data):
for i in data:
temp = data[:]
temp.remove(i)
for j in temp:
z=raw_input('Is album %s better than album %s (y/n): '% (i,j))
if z.lower() == 'y':parent[i] += 1
#This loop runs for len(data)^2 - len(data)
def main():
take_inputs()
compare(data)
ranks = sorted(parent.items(), key=operator.itemgetter(0))
print '\n ------Rankings in ascending order are...-------'
for i in ranks:
print i[0]
main()
它有点清洁版本并使用Python2.7,所使用的模块是内置的&#39;与其他答案相比,它有点不同,但仍使用相同的概念!