<p>在<a href="https://drive.google.com/file/d/1F5FIuAy_g7sC_2wTprqg3EF_m_JXEreL/view" rel="nofollow noreferrer">your code</a>中有大量的重复。基本上,对于两个目的地(以及以后可能添加的任何其他目的地),获取下一列火车的整个代码是相同的,应该移动到一个函数中。你知道吗</p>
<pre><code>def get_next_train(params):
res =requests.get(base, params=params)
parsed_json = res.json()
#Zeiten aus parsed_json extrahieren
time_strings = [d["from"]["prognosis"]["departure"]
for d in parsed_json["connections"]]
#String, um Zeiten in time_strings nach ISO 8601 zu parsen
iso_format = "%Y-%m-%dT%H:%M:%S%z"
# Time Strings zu datetime Objekten konvertieren
times = [datetime.strptime(ts, iso_format)
for ts in time_strings if ts is not None]
# Checken, ob times leer sind
if not times:
return None # CHANGE: return None if no times found
#Zeitzone der ersten zeit in Times speichern
tz = times[0].tzinfo
#jetztige Zeit mit Zeitzone tz, Mikrosekunden löschen
nowtime = datetime.now(tz).replace(microsecond=0)
# Checken, ob Time_1 noch in der Zukunft ist. Wenn ja, diese Zeit als Time_luz speichern
time = min(t for t in times[0:3] if t > nowtime) # CHANGE: use min
return time, time - nowtime
</code></pre>
<p>然后,您可以获得两个目的地的结果,并在<code>filter</code>之后获得<code>min</code>结果,即<code>None</code>,然后只需检查该min是否为<code>None</code>(默认值)。你知道吗</p>
<pre><code>res_luz = get_next_train(params_luz)
res_hitz = get_next_train(params_hitz)
res = min(filter(None, (res_luz, res_hitz)), default=None)
if res is not None:
time, diff = res
print ("Next train", time, ", in", str(diff))
else:
print("Service nicht verfügbar")
</code></pre>
<hr/>
<p>更新:似乎是傍晚时分,<code>nowtime</code>之后可能没有列车发车,导致<code>min</code>引发异常。您可以通过如下提供另一个<code>default</code>并在本例中返回<code>None</code>来解决这个问题。你知道吗</p>
<pre><code>time = min((t for t in times if t > nowtime), default=None)
return (time, time - nowtime) if time is not None else None
</code></pre>
<hr/>
<p>更新:如果你想知道下一列火车的目的地(有意义的…),你可以从参数中得到它,并返回它与时间和差异</p>
<pre><code> return time, time - nowtime, params["to"]
</code></pre>
<p>然后打开包装并打印:</p>
<pre><code>if res is not None:
time, diff, dest = res
print ("Next train to %s at %s (in %s)" % (dest, time, diff))
</code></pre>