2016-05-10 17 views
1

Ich habe folgende Landnutzungsklassen und sie haben jeweils ein SchlüsselErstellen einer Python-Funktion

1, 2, 3, 4, = [Arable] 

5, 6, 7, = Non arable 

8 = Protected 

c = Climate 

e = Erosion 

s = Soil 

w = Wetness 

estu= Estuaries 

ice = Ice 

lake = Lake 

quar = quarries/mines 

rive = River 

town = town/urba 
  • Ich möchte eine Funktion erstellen, die mich mehrere Werte dh aufrufen können, wenn ich in eingegeben 4e15 zurückgeben 'Acker (4)' sollte 'Erosion begrenzt', '15', '', '', ''

  • Wenn ich einen ungültigen Code eingegeben sollte es nur Schwarzen zurückkehren

  • Schließlich, wenn einer der nicht nominalen Codes eingegeben wird, sollte die Bedeutung dieses Codes in den Positionen 0, 1, 3, 4 in der Ausgabeliste zurückgegeben werden, mit Leerzeichen als Wert in den Positionen 2 und 5.

+0

was hast du bisher versucht ?? .. plz poste den code, es wird den leute helfen zu antworten !! – San

Antwort

2

Ohne Ihre Nutzung vollständig zu verstehen, sieht es wie ein gutes Szenario für einen Python-Wörterbuch:

Ausgänge:

'Erosion' 

Das scheint, das Problem ist nicht klar definiert. Die Eingabe von '15' könnte als 1 interpretiert werden und dann als 5, nicht als eine eindeutige 15, und es sollte keine Möglichkeit zur Unterscheidung geben, wenn die Eingabe, die Sie gerade haben, gegeben ist. Es wird einfacher, wenn Sie mit einer klar definierten Menge von unterschiedlichen Eingabe-Literalen beginnen.

0

Ich bin mir nicht sicher, ob ich deine Frage richtig interpretiert habe. Im Allgemeinen können Sie eine Dictionary-Tabelle als @Jameson erwähnt erstellen. Aber um den Ausdruck ohne Trennzeichen zu analysieren, würde die Trennung zwischen den Zeichen Ihre Funktion auf Ihre Auswahlmöglichkeiten beschränken, die in Ihrem Code zur Verfügung gestellt wird, und technisch nicht praktisch für größere Maßstäbe, funktioniert aber für kleinere (begrenzte). Lassen Sie mich also allgemeine Wege zeigen, um dieses Ziel zu erreichen:

def get_vals(vals, table): 
    res = []   
    for x in vals: 
     res.append(table.get(x, 'error')) # Or anything instead of error for invalid inputs 
    return res 

>>> table = {'a':'test1', 'b':'test2'} 
>>> get_vals('ab', table) 
['test1', 'test2', 'error', 'error'] 

Diese Funktion parst nur ein einzelnes Zeichen pro Eingabe einer Zeichenfolge, wenn Sie Zeichenfolge eingeben "15" es wird versuchen, den Wert "1" aus dem Wörterbuch zu holen und dann "5", nicht String "15" als Ganzes!

Mit dem Begrenzer Weg wird dies praktischer, einfacher zu pflegen und zu arbeiten. Zum Beispiel:

def get_vals2(vals, table, delimiter = ','):  # Default: split string with comma or whatever 
    res = [] 
    for x in vals.split(delimiter): 
     res.append(table.get(x, 'error')) 
    return res 

>>> get_vals2('1,a,15,b', table) 
['error', 'test1', 'error', 'test2'] 

Wie Sie sehen können, wenn Sie Eingang 1 und 5, es sind "15" wenn analysiert, im Gegensatz zu der früheren Version. Eine andere Option wäre, alle Kombinationen aufzulisten, die der Benutzer eingeben kann, aber was für eine mühsame Arbeit! Zum Beispiel:

table = {'4e15': your values, 'e415': your values, '415e': your values, continuing with others as well...}

Sehr komplex und Sie haben eine riesige Liste von Kombinationen schreiben und nicht effizient, wenn es um Wartung, da Sie viele Kombinationen hartcodiert, eine kleine kleine Änderung in Wieder- führen könnte schreibe alle Kombinationen wieder!

+0

Ich bin ein Amature bei all dem tut mir leid. Also zuerst würde ich ein Wörterbuch erstellen, dann würde ich den zweiten Abschnitt "def gat_vals2" verwenden? – Ray

+0

# Ein Wörterbuch für die verschiedenen LUC Klassen und Unterklassen LUC_dict = { 'estu': 'Estuaries', 'Eis': 'Ice', # Skeleton und Pseudo-Code für unsere Funktion in dieser Übung def decode_LUC (input_string) #split die Eingabezeichenfolge in zwei (falls erforderlich) #LOOP durch die beiden Strings: #check ob die Zeichenkette nur aus alphabetischen Zeichen bestehen, wenn dies der Fall: die Zeichenfolge direkt #look up #zurückgeben der decodierten Zeichenkette #otherwise: #look up part s der Saite getrennt # die decodierten Teile in eine lis zusammenfügen #die Liste zurückgeben – Ray

+0

@Ray "Also zuerst würde ich ein Wörterbuch erstellen, dann würde ich den zweiten Abschnitt" 'def gat_vals2 'verwenden?' "Ja, du Erstellen Sie ein Dictionary mit Ihren Werten, zum Beispiel "klasses = {key: class, key: class, ...}". Es wäre besser gewesen, wenn Sie die ursprüngliche Frage hier gepostet hätten, wenn sie verfügbar wäre. Ich persönlich bekomme nicht das ganze Bild Ihrer Frage. Aber wenn ich über die Funktionen spreche, die ich speziell 'get_vals2' gepostet habe, können Sie einen beliebigen Schlüssel mit einem Trennzeichen übergeben, zum Beispiel: '{1: 'a', 2: 'b'}' wenn Sie den String '" 1,2 "' zur Funktion. Es gibt Ihnen die Werte der Tasten 1 und 2. – direprobs