So auf einem dorky wenig arbeite ich algorithm-- den Punkt davon ist sehr langweilig. Alles was ich wissen will ist warum ich den Buchstaben "D" an den Ausgang am Terminal angehängt habe.Alien-Invasion von Python-Code im Terminal - (?, Warum es die Buchstaben D mit dem Ausgang anhängt)
Wenn die Antwort ist 1, es gibt mir 1D zurück. Wenn die Antwort 2 ist, spuckt sie 2D usw. aus. Warum?
Ich glaube nicht, dass viel mit dem Code zu tun hat. Der Code ist unten, wenn du denkst. Es könnte damit zu tun haben, wie ich den Eingabestream beende, indem ich Strg + D (Mac) drücke. Es gibt mir nicht 1^D, es gibt mir 1D. Warum?
if __name__ == '__main__':
input = sys.stdin.read()
n, *data = map(int, input.split())
segments = list(map(lambda x: Segment(x[0], x[1]), zip(data[::2], data[1::2])))
points = optimal_points(segments)
print(int(len(points)))
for p in points:
print(p, end=' ')
Es sagt im Grunde, bla bla bla, bekommen eine Liste von Nummern aus dem Eingangsstrom/Terminal, wie folgt aus:
3
1 3
2 5
3 6
und tun dies, um es:
def is_between(num_to_check, start, end):
return num_to_check >= start and num_to_check <= end
def optimal_points(segments):
end_first_segements = sorted(segments, key=attrgetter('end'))
count = 1
i = 1
current_end = end_first_segements[i -1 ].end
next_seg = end_first_segements[i]
end_points=[current_end]
while i <len(end_first_segements):
s = next_seg.start
e = next_seg.end
if(is_between(current_end, s, e)):
try:
i += 1
next_seg = end_first_segements[i]
except IndexError:
break;
else:
try:
count +=1
end_points.append(next_seg.end)
next_seg = end_first_segements[i+1]
current_end = next_seg.end
except IndexError:
break;
return end_points
Sehen Sie, es gibt nichts im Code, der sagt, "hey, Sie sollten den Buchstaben D ohne Grund an den Ausgang anhängen".
Ich halte dies auch in anderen kleinen Programmen zu sehen, ich auch getan habe. Also ich denke, es hat mit der Terminal-Verse irgendeinen Code zu tun, den ich schreibe. Gedanken?
Die gesamte Py-Datei:
# Uses python3
import sys
from collections import namedtuple
from operator import attrgetter
Segment = namedtuple('Segment', 'start end')
def is_between(num_to_check, start, end):
return num_to_check >= start and num_to_check <= end
def optimal_points(segments):
end_first_segements = sorted(segments, key=attrgetter('end'))
count = 1
i = 1
current_end = end_first_segements[i -1 ].end
next_seg = end_first_segements[i]
end_points=[current_end]
while i <len(end_first_segements):
s = next_seg.start
e = next_seg.end
if(is_between(current_end, s, e)):
try:
i += 1
next_seg = end_first_segements[i]
except IndexError:
break;
else:
try:
count +=1
end_points.append(next_seg.end)
next_seg = end_first_segements[i+1]
current_end = next_seg.end
except IndexError:
break;
return end_points
if __name__ == '__main__':
input = sys.stdin.read()
n, *data = map(int, input.split())
segments = list(map(lambda x: Segment(x[0], x[1]), zip(data[::2], data[1::2])))
points = optimal_points(segments)
print(int(len(points)))
for p in points:
print(p, end=' ')
ich nicht wiedergeben kann. Ich bekomme '^ D \ n1 \ n3' von Ihrer Beispieleingabe. Sie sollten versuchen, eine andere Methode zum Lesen der Eingabe zu verwenden. Das '^ D' wird immer angezeigt, wenn Sie Strg + D drücken. –
Ich würde vorschlagen, das Programm auf ein minimales Beispiel zu reduzieren, das das Verhalten zeigt, das Ihnen hilft Leute diagnostizieren irgendwelche Probleme. Leider habe ich keinen Zugriff auf einen Mac und kann das Problem nicht reproduzieren. Siehe eine mögliche Lösung in meiner Antwort ... – Gavin
@MorganThrapp "Das^D wird immer angezeigt, wenn Sie Strg + D drücken." Das ist nicht genau, wenn Sie Strg + D in verschiedenen Kontexten drücken. Dieses Problem einer dieser Kontexte –