我有一个文本文件,其中包含一个猜数字游戏,其中第一列只是唯一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(....
.
.
我无法找出最接近范围的函数,因为我假设两个列表是否可以与包含文件内容的表进行比较是否可行?我的方法可能有误,所以我想为此寻求建议。
答案 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
(区分中间和后面的分隔符)