创建Python函数

2024-06-03 00:55:24 发布

您现在位置: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它应该返回'rable(4)'、'糜烂有限'、'15'、'、'、'、'、'、'

  • 如果我输入了无效代码,它应该只返回黑色

  • 最后,如果输入了一个非标称代码,则应在输出列表的位置0、1、3、4处返回该代码的含义,并在位置2和5处用空格作为值。


Tags: 代码类别关键土地nonclimatetownprotected
2条回答

我不确定我是否正确地解释了你的问题。通常,您可以创建@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...}

非常复杂,您将编写一个庞大的组合列表,而且在维护方面效率不高,因为您硬编码了许多组合,一个小小的更改可能会导致重新编写所有组合!你知道吗

在不完全了解您的用法的情况下,这看起来是一个很好的Python字典场景:

table = {
    '1': 'Arable',
    'c': 'Climate',
    'e': 'Erosion',
    # etc.
}

table['e']

输出:

'Erosion'

也就是说,问题似乎没有得到很好的界定。输入“15”可能会被解释为1,然后是5,而不是唯一的15,并且鉴于您当前的输入,应该没有办法区分。如果从定义良好的一组不同的输入文字开始,就更容易了。你知道吗

相关问题 更多 >