簡體   English   中英

如何在沒有if語句的情況下在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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM