我可以将特定除数值(浮点数)与列表中的特定值(字符串)相关联吗?

Can I correlate specific divisor value (float) to specific value (string) on a list?

我有这个特定的代码,用于首先将特定货币转换为欧元值。 这部分代码已整理:

country = ['CZ', 'PL']
def f(country, value):
    if "PL" in country.upper():
        value2 = value / 3
    elif "CZ" in country.upper():
        value2 = value / 20
    else:
        raise ValueError
    round(value2, 2)
    print('The conversion of ', value1, input1, 'is: ', value2, 'USD \n')

    if value2 >= 20:
        print('ABOVE Clip level - EU PO is required')
        return ('ABOVE Clip level')
    else:
        print('value {} USD matches expected. BELOW Clip level'.format(value2))
        return ('BELOW clip level')


while True:

    input1 = str(input('Enter Currency [CZK or PLN]: '))
    value1 = float(input('Enter Value: '))

    try:
        f(input1, value1)
        break
    except ValueError:
        print('Some error occurred, try again.')

您会注意到检索到的值进入第二个条件:if value2 >= 20:

if value2 >= 20:
print('ABOVE Clip level - EU PO is required')
return ('ABOVE Clip level')
else:
    print('value {} USD matches expected. BELOW Clip level'.format(value2))
    return ('BELOW clip level')

我想实现国家(或货币)与特定值之间的关联。 所以,假设我想要: value2 = 20 作为 country = PL 的限制; value2 = 10 作为 country = CZ 的限制。

我知道这应该以某种方式集成到函数 f 中,但我不知道如何集成。 我试图嵌套它以及单独编写它,但它没有 return 正确的值。 我想我可以创建一个剪辑级别列表,但看起来很混乱。 另一种选择是包含一个 table 对应每个国家的价值,但老实说,我不知道这是否可能。 最后,最后一个选项(我现在正在尝试但似乎仍然不起作用的选项)是在函数 f:

中嵌套一个函数 cliplimit
def cliplimit(cliplim):
    for country in f:
        if country == 'PL':
            cliplim = 20
        elif country == 'CZ':
            cliplim = 10
        else:
            raise ValueError
        round(cliplim,0)
        return cliplim

if value2 >= cliplimit():
    print('ABOVE Clip level - EU PO is required')
    return ('ABOVE Clip level')
else:
    print('value {} USD matches expected. BELOW Clip level'.format(value2))
    return ('BELOW clip level')

到目前为止,我得到的错误与位置参数 cliplim 有关:

line 37, in <module>   f(input1, value1) 
line 23, in f
    if value2 >= cliplimit(): TypeError: cliplimit() missing 1 required positional argument: 'cliplim'

我希望它不会太混乱,但最重要的是我需要为特定的 countries/currencies 分配特定的值以限制剪辑。感谢您的帮助!

您是否尝试过从 cliplimit 函数中删除参数?您实际上并没有使用函数传入的值。

您在第 23 行遇到的错误是因为您没有将值传递给期望值的函数。由于您的函数不需要传入值,您可以删除参数并将其简单地定义为 def cliplimit()

澄清一下,您确实在函数中使用了 cliplim 变量,但没有使用传入的值。因此您需要定义变量并可能将其设置为默认值。

此外,您在迭代中有一个 return 语句,因此您也可以删除循环。我不认为你期望它评估不止一次。我认为您最好将国家代码传递给函数并删除 for country in f

还有一件事...关于原始 f 函数...您不想针对您的国家/地区列表进行条件测试,您想使用传入的国家/地区参数,这样您会更好关闭像 if country.upper() == "PL": 这样的条件 - 你可以不用列表。

不考虑以上所有...如果您只是想为每个国家/地区分配一个 cliplimit 值,然后在需要时查找和使用,请考虑使用字典

cliplims = {"PL" : 20, "CZ" : 30} 
print (cliplims["CZ"])

根据第一个答案的评论和您的原始代码...

仍然需要适当的错误处理

#Take in a country and a Value
#Do the conversion based on country
#Determine need for EU PO based on clip level

cliplims = {"PL" : 20, "CZ" : 30}

def convert(country, value):
    if country.upper() == "PL":
        return round(value / 3, 2)
    elif country.upper() == "CZ":
        return round(value / 20, 2)

def above_cliplim(country, value):
    return value >= cliplims[country]

my_country = str(input("Enter Country: "))
my_value = float(input("Enter Value: "))

converted_value = convert(my_country, my_value)
print('The conversion of', my_value, my_country, 'is:', converted_value, 'USD')

if above_cliplim(my_country, converted_value):
    print('ABOVE Clip level - EU PO is required')
else:
    print('value {} BELOW Clip level'.format(converted_value))