我可以将特定除数值(浮点数)与列表中的特定值(字符串)相关联吗?
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))
我有这个特定的代码,用于首先将特定货币转换为欧元值。 这部分代码已整理:
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:
中嵌套一个函数 cliplimitdef 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))