输入时从列表列表中获取最接近的元素

时间:2017-04-21 14:44:08

标签: python

我有一个文本文件,其中包含一个猜数字游戏,其中第一列只是唯一ID 第二和第三列 范围 第四类型:

a:6.5:10.2:G1
b:2.4:11.7:G2
c:3.1:9.7:G1
d:4.6:8.7:G3

用户将提示输入两次尝试,例如:

3.1 : 9.9 : 3.2 : 9.8

前两个将是第一次尝试,而第三次将是第二次尝试 >。根据上面的输入,代码将在第一次尝试和第二次尝试之间与文本文件中的内容进行比较。

示例:

首次尝试 3.1:9.9 并继续与文本文件中的内容进行比较。 第二次尝试3.2:9.8 也会进行比较并产生最近范围的输出到用户输入,这将是:

output = 3.1 , 9.7 (from the text file, without the id and type)

这是我尝试过的。首先,创建了两个列表,因为文件用户中只有每行两位数四组数字我认为如果我将输入分成两个在一个列表中进行比较,这将是方便的。

guess = input("Enter your guess:")  #Ex: 3.1:9.9:3.2:9.8
List1 = []                          # [3.1,9.9]
List2 = []                          # [3.2,9.8]
separateStr = guess.split(':')
floatInput = [float(i) for i in separateStr]

List1,List2 = floatInput[:2],floatInput[2:]

openFile = open('__.txt')
table = []                  #Created a list to contain the contents
for line in openFile:
    contents = line.strip().split(':')
    table.append(contents)

def getClosest(l):
    for i in range(....
    .
    .

我无法找出最接近范围的函数,因为我假设两个列表是否可以与包含文件内容的表进行比较是否可行?我的方法可能有误,所以我想为此寻求建议。

1 个答案:

答案 0 :(得分:1)

我没有测试它,因为我很懒,但应该没问题。

def get_closest(test, my_table):
    min_dist = 10e5
    pos = None
    for i, data in enumerate(my_table):
        dist = ((test[0] - data[0])**2 + (test[1] - data[1])**2)**0.5  # euclidean norm
        if dist < min_dist:
            pos = (i, data)
            min_dist = dist
    return pos

openFile = open('__.txt')
table = []
for line in openFile:
    table.append(line.strip().split(':')[1:3])  # only the numbers

user_input = input("Enter your guess:")  # Ex: 3.1:9.9:3.2:9.8
floatInput = list(map(float, user_input.split(':')))
guesses = [floatInput[:2], floatInput[2:]]
for guess in guesses:
    winner = get_closest(guess, table)
    print(winner[1])

注意:

  • 您正在为用户输入使用奇怪的格式。我会选择更直观的东西,比如3.1,9.9;3.2,9.8(区分中间和后面的分隔符)