2016-04-17 5 views
1

, was ich brauche Hilfe auf, um die Stationen immer an die nächste Station in der Liste zu ändern, wenn der Benutzer 3. drücktIch brauche Hilfe Start dieses Radioprogramm

class Radio: 
def __init__(self): 
    self.stations=["STATIC","97.2", "99.6", "101.7", "105.3", "108.5"] 
    self.stationStart=self.stations[0] 
def seekNext(self): 
    self.stationsStart 

es bei statischen beginnt ich will es jeden einzelnen zu ändern und dann von vorn beginnen again.I versuchte so etwas wie dieses

stations=["STATIC","97.2", "99.6", "101.7", "105.3", "108.5"] 
a =input("enter 3 to seek next") 
while a !="0": 
    if a =="3": 
     print(stations[-1]) 

ich am Ende nur die letzte Station bekommen kann nicht herausfinden, wie der Rest der Stationen aufzulisten.

+0

Die Verwendung negativer Indizes mit Listen erfolgt in umgekehrter Reihenfolge, also -1 ist das letzte Element, -2, vorletzte und so weiter. – marienbad

Antwort

2

Es gibt ein paar vernünftige Möglichkeiten zu tun, was Sie wollen.

Am einfachsten wäre es, wenn Sie in Ihrer Klasse einen Index in Ihre Liste speichern und nicht direkt in ein Listenelement. Auf diese Weise können Sie den Index erhöhen und wickeln Sie es um den % Modul Operator:

class Radio: 
    def __init__(self): 
     self.stations=["STATIC","97.2", "99.6", "101.7", "105.3", "108.5"] 
     self.station_index = 0 

    def seek(self): 
     print("Currently tuned to", self.stations[self.station_index]) 
     print("Seeking...") 
     self.station_index = (self.station_index + 1) % len(self.stations) 
     print("Now tuned to", self.stations[self.station_index]) 

A „schicker“, und möglicherweise mehr Pythonic Weg, um das Problem zu lösen, würde die cycle Generator vom itertools Modul zu benutzen, in die Python-Standardbibliothek. Es gibt einen Iterator zurück, der die Werte aus Ihrer Liste liefert, beginnend am Ende. Obwohl Sie normalerweise nur mit Iteratoren in for Schleifen umgehen, ist es einfach, die iterator protocol von Hand zu verwenden. In unserem Fall wollen wir nur next auf der Iterator anrufen, um den nächsten Wert zu erhalten:

import itertools 

class Radio: 
    def __init__(self): 
     self.stations = itertools.cycle(["STATIC","97.2", "99.6", "101.7", "105.3", "108.5"]) 
     self.current_station = next(self.stations) 

    def seek(self): 
     print("Currently tuned to", self.current_station) 
     print("Seeking...") 
     self.current_station = next(self.stations) 
     print("Now tuned to", self.current_station) 
1
index = 0 

if a=="3": 
    index = (index+1)%6 
    print(stations[index]) 
+0

Die Verwendung von '' len (stations) '' anstelle von '' 6'' wäre allgemeiner. – zegkljan

-2

Definieren Sie eine Variable in init mit der tatsächlichen Position „self.pos = 0“, und diese Funktion aufrufen, wenn Sie erforderlich

+2

Dies erhöht den Zähler nur in dem Fall, dass er das Ende erreicht hat. – zegkljan