@Nagila Hawa: Du hast Recht meine Problembeschreibung war nicht gut.
* Wenn user_input1 = 7,9 ist dann sollte das Ergebnis "s2, 2, 4" sein, d.h. 7 ist die zweite Position in s2 und 9 ist die 4 Position s2
* Wenn user_input2 = 7,12 ist dann sollte das Ergebnis "s2, 2, 5" und "s3, 1, 2" sein, d.h. 7 ist die zweite Position, aber 12 ist nicht in s2 deshalb wird die Endposition auf 5 gesetzt und als nächstes wird s3 betrachtet. Von s3 nehmen wir 1 da es die erste position ist 12 (user input) bekommt eine 2.
Ich habe es versucht mit dict und Tuples, aber leider ist dict nicht sortiert und deshalb bin auf List umgestiegen, aber trotzdem bekomme ich nicht die gewünschte ausgabe:
Code: Alles auswählen
def get_fitting(user_input, input_List):
results_List = []
for s in input_List:
if s[1] <= user_input[0] and s[2] >= user_input[1]:
print("HIT")
s_Length = s[2] - s[1] + 1
start_Pos = abs(s_Length - user_input[0])
end_Pos = abs(s_Length - user_input[1])
results_List.append([s[0], start_Pos, end_Pos])
break
elif s[1] <= user_input[0] and s[2] <= user_input[1]:
s_Length = s[2] - s[1] + 1
start_Pos = abs(s_Length - user_input[0])
end_Pos = s[2]
results_List.append([s[0], start_Pos, end_Pos])
print results_List
if __name__ == '__main__':
inputFile = """s1 1 5
s2 6 10
s3 11 15"""
print inputFile
input_List = []
for line in inputFile.splitlines():
line = line.split('\t')
input_List.append([line[0], int(line[1]), int(line[2])])
print "user input 1"
user_input1 = 7,9
get_fitting(user_input1, input_List)
print "user input 2"
user_input2 = 7,12
get_fitting(user_input2, input_List)
Momentan sieht die Ausgabe wie folgt aus:
Code: Alles auswählen
$ python gff.py
s1 1 5
s2 6 10
s3 11 15
user input 1
HIT
[['s1', 2, 5], ['s2', 2, 4]]
user input 2
[['s1', 2, 5], ['s2', 2, 10]]
Wo könnte der Fehler liegen?