尝试创建一个类似眼科医生考试的程序(或找到已有的程序)

时间:2017-08-05 05:05:53

标签: list input printing rank

我甚至不知道从哪里开始描述这个问题。

我听了很多音乐,而且我在尝试排名时发现了这些音乐。所有这些专辑,除非你在列表中一次比较两个(哪个是更好的x或y),否则可能很难。有点像你在验光师的问题"看起来更好,一两个?"

我想要做的是找到一个已经存在的程序,或者获取一个程序的代码:

a)允许您输入大量项目列表
b)沿着这条线进行比较并一次比较两个,记录每个选择的响应
c)打印出最终结果列表,通过您在编号列表中的选择显示您排名最高的那个。

我几乎没有经验编码,这个问题/请求对于谷歌搜索来说太笨重了,所以现在我来这里。

2 个答案:

答案 0 :(得分:1)

这里基本上有三个问题需要解决。

  1. 从用户收集列表。

  2. 从列表中生成成对组合的详尽列表。

  3. 从用户处收集每对的首选项。

  4. 使用每对的首选项在列表中强制执行订单。

  5. 前三个问题相当简单,但第四个问题是很多数学讨论和出版的主题。

      

    以下是 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;与其他答案相比,它有点不同,但仍使用相同的概念!