[英]How do i calculate the percentage increase or decrease in a list of values with python
[英]How to compute a percentage increase/decrease multiplier in python without if statements
我有一種情況,用戶輸入一個正值,0或負值,分別代表增加百分比,沒有變化或減少百分比。 示例:2.5表示“增加2.5%”,-3表示“減少3%”。 將此用戶稱為輸入的數字U。
我需要在python中將U應用於某個數字X,也就是說,將U中指定的百分比增加/減少應用於X,以得出X可能更改的值。
我可以看到執行此操作的一種方法是檢查U並得出可以乘以X的乘數,例如
if U == 0:
multiplier = 1
elif U > 0:
multiplier = U/100.0 + 1
else:
multiplier = (100 - (U * -1.0))/100.0
然后,我可以得出X的新值:X = X *乘數。
最后,具有挑戰性的部分: 是否有一種方法可以得出乘法器而不像我上面那樣使用多個if語句?
我問的原因是因為我實際上必須編寫一小段必須包含在一行中的python代碼(它將通過exec()動態執行),因此我無法使用代碼塊。
任何想法,將不勝感激! 麥可
您只需要使用除法的分配屬性:
multiplier = 1 + U/100.0
這實際上就是您的代碼所做的 。 您只是將a的三個分支分開, if
這樣做完全相同。 讓我們從原始代碼中逐步進行一些簡單的數學運算:
if U == 0:
multiplier = 1
elif U > 0:
multiplier = U/100.0 + 1
else:
multiplier = (100 - (U * -1.0))/100.0
if U == 0:
multiplier = 1 + 0 #sum 0 for convenience
elif U > 0:
multiplier = 1 + U/100.0 #swap order of addition
else:
multiplier = (100 + U)) / 100.0 #multiplying by -1 is just changing the sign
if U == 0:
multiplier = 1 + U/100.0 # since U is 0 in this branch, U/100.0 == 0
elif U > 0:
multiplier = 1 + U/100.0
else:
multiplier = 1 + U/100.0 # distributive property of division
由於三個分支的執行代碼相同,因此沒有if
:
multiplier = 1 + U/100.0
if和else實際上可以在一行的表達式中使用: x = a if b else c
。 但是,您不能使用elif,因此必須首先重構代碼,以使其不使用它們:
if U == 0:
multiplier = 1
else:
if U > 0:
multiplier = U/100.0 + 1
else:
multiplier = (100 - (U * -1.0))/100.0
這減少到
if U == 0:
multiplier = 1
else:
multiplier = U/100.0 + 1 if U > 0 else (100 - (U * -1.0))/100.0
減少到
multiplier = 1 if U == 0 else (U/100.0 + 1 if U > 0 else (100 - (U * -1.0))/100.0)
從技術上來說,凱文的答案是完全正確的,但僅從數學角度來看,您的代碼就可以大大簡化。
您無需對此數學運算執行if-then-else檢查。 考慮輸入“ -3”:在您的代碼中,該代碼將進入第三個塊,其值為(100-(-3 * -1.0))/ 100.0 =(100-3.0)/ 100.0 = 0.97。
這等效於進入第二個塊的值U,其值為(-3 / 100.0)+1 = -0.03 +1 = 0.97。
現在考慮輸入0:無論進入哪個塊,“乘數”值都將為1。
因此,將您的代碼設為:
multiplier = 1 + (U / 100.0)
就會被設置。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.