2016-05-10 9 views
1

У меня есть следующие классы землепользования и каждый из них имеет ключевоеСоздание функции Python

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 
  • Я хочу создать функцию, которая позволяет мне называть несколько значений т.е. если я вошел в 4e15 он должен вернуть «пахотные (4)», «эрозии ограничено», «15», «», «», «»

  • Если я ввел неверный код он должен просто вернуть черноту

  • Наконец, если введен один из не номинальных кодов, значение этого кода должно быть возвращено в позициях 0, 1, 3, 4 в списке выходных данных, а пробелы - как значения в позициях 2 и 5.

+0

что вы пробовали до сих пор? .. plz опубликовать код, это поможет людям ответить !! – San

ответ

2

Без полного понимания вашего использования, это выглядит как хороший сценарий для словаря Python:

Выходы:

'Erosion' 

Тем не менее, похоже, проблема не определена. Ввод «15» может быть интерпретирован как 1, а затем 5, а не как уникальный 15, и не должно быть никакого способа дифференцировать данные, которые у вас есть в настоящее время. Это будет проще, если вы начнете с четко определенного набора различных входных литералов.

0

Я не уверен, правильно ли я правильно понял ваш вопрос. Как правило, вы можете создать таблицу словарей, как упомянуто @Jameson. Но для разбора выражения 4e15 без разделителей, разделяемых между символами, ваша функция будет ограничена вашим набором вариантов, представленных в вашем коде, и технически непрактична для больших масштабов, но работает для небольших (ограниченных). Итак, позвольте мне показать общие пути для достижения этой цели:

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'] 

Эта функция разбирает только один одиночный символ за вход строки, если ввести строку "15" он будет пытаться получить значение "1" из словаря, а затем "5", нет струна "15" в целом!

С разделительным способом это будет более практичным, удобным в обслуживании и работе. Например:

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'] 

Как вы можете видеть, если вход 1 и 5, это "15", когда анализируется, в отличие от предыдущей версии. Другой вариант - перечислить все комбинации, которые пользователь может ввести, но какая утомительная работа! Например:

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

Очень сложный и вы будете писать огромный список комбинаций и не эффективен, когда дело доходит до технического обслуживания, потому что вы жестко закодированы множество комбинаций, небольшое небольшое изменение может привести к ПЕРЕУСТАНОВКАМ записывая все комбинации снова!

+0

Я извиняюсь во всем этом извините. Так что сначала я создам словарь, тогда я бы использовал второй раздел «def gat_vals2»? – Ray

+0

# Словарь для различных классов LUC и подклассов LUC_dict = { 'estu': 'Эстуарии', 'лед': 'Ice', # Скелет и Псевдо-код для нашей функции в этом упражнении защиту decode_LUC (input_string) #split входной строки на два (при необходимости) #loop через две строки: # Проверяет ли состоять только из символов алфавита строки, если так: #look до строки непосредственно # верните декодированную строку #otherwise: #look вверх часть s строки отдельно # собрать декодированные части в lis #return the list – Ray

+0

@Ray "Итак, сначала я создаю словарь, тогда я бы использовал второй раздел' 'def gat_vals2 '' 'Да, вы 'd создайте словарь с вашими значениями, например, 'klasses = {key: class, key: class, ...}'. Было бы лучше, если бы вы разместили исходный вопрос здесь, если он доступен. Я лично не понимаю всю картину вашего вопроса. Но, говоря о функциях, которые я написал специально 'get_vals2', вы можете передать любой ключ, разделенный разделителем, например:' {1: 'a', 2: 'b'} ', если вы передаете строку' "1,2 "к функции. Он даст вам значения ключей 1 и 2 соответственно. – direprobs