2017-04-21 4 views
2

Erste habe ich eine Textdatei wie ein Spiel von Erraten Ziffern enthält etwas, wo die erste Spalte nur eindeutige ID ist, zweite und dritte SäuleBereich sind für die gues s und vierte ist eine Gruppe Typ:nächstes Element aus der Liste der Liste nach Eingabe

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

der Benutzer aufgefordert wird zu Eingang zwei Versuche, zum Beispiel:

3.1 : 9.9 : 3.2 : 9.8 

wo die ersten beide werden die ersten versuchen, und die dritte und vierte würde die zweite versuchen sein. Bei der obigen Eingabe macht der Code einen Vergleich zwischen dem ersten Versuch und dem zweiten Versuch mit dem Inhalt in der Textdatei.

Beispiel:

Die zuerst versuchen wäre 3,1: 9,9 und gehen Sie mit dem Inhalt der Textdatei zu vergleichen. Die zweite Versuch 3.2: 9.8 auch verglichen werden würde und den Ausgang des Nahgrenze auf die Benutzereingabe erzeugen, die sein würde:

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

Hier ist, was ich versucht habe. Für einen Start habe ich zwei Liste da es nur zwei Sätze von Ziffer pro Zeile in der Datei und Benutzervier Sätze von Ziffern haben, die ich bequem wären übernehmen, wenn ich die Eingabe in zwei Teile gespalten jeweils in einer zu vergleichenden Liste.

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(.... 
    . 
    . 

Ich war die Funktion, um herauszufinden, für den nächsten Bereich nicht in der Lage, wie ich angenommen bin, ob es, wenn die beide Liste ist in der Lage zu vergleichen mit der Tabelle mit dem Inhalt der Datei möglich ist? Meine Methode könnte falsch sein, daher möchte ich mich diesbezüglich beraten lassen.

+1

Es läuft alles auf die Art der Norm (https://en.wikipedia.org/wiki/Norm_(mathematics)) du willst es benutzen (so wie du die Entfernung messen willst). Den Rest hast du herausgefunden, scheint es. –

Antwort

1

Ich habe es nicht getestet, weil ich faul atm bin, aber es sollte in Ordnung sein.

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]) 

Hinweise:

  • Sie sind eine seltsame Format für die Benutzereingabe verwendet wird. Ich würde mit etwas intuitiveren gehen wie 3.1,9.9;3.2,9.8 (unterscheiden zwischen den mittleren und Ruhe-Trennzeichen)
Verwandte Themen