2017-10-28 235 views
2
if bool(re.search(r'\d', oz)) == 1: 
     pounds, ounces = oz.split(':') 
     pounds = float(pounds) 
     ounces = float(ounces) 
     pounds = pounds * 16 
     oz = pounds + ounces 
     oz = float(oz) 
     print(oz) 
    else: 
     print("You must enter a digit\n") 
     main() 

因此,當我使用split將用戶輸入分割爲lb和oz時,輸入變爲一個字符串。是否有任何類型的整數和浮點數的分裂函數?這種做法似乎有點陰暗。什麼是更清潔,更優雅的處理方式?尋找一個python.split()類型的函數,將其轉換爲浮點數

回答

3

試試這個:

pounds, ounces = map(float, oz.split(':')) 

map實際應用功能上指定的迭代在這種情況下是oz.split(':')

2

我會用一個list-comprehension

pounds, ounces = [float(i) for i in oz.split(':')] 

這是相同的效率,你的代碼,而只是長得整齊,我覺得更清潔的個人。這也可能是更多如果由於某種原因將會有更多: s在oz字符串(我說更多因爲unpacking將需要修改)。


作爲一個側面說明,你可以填滿你code的是整體的一部分爲one-liner,如果你沒有足夠的pounds通過16乘這將是非常整齊的用sumgenerator。這並不是說這是不可能的(下面),但它取決於你喜歡什麼!

oz = float(a[:a.index(":")]) + float(a[a.index(":")+1:]) * 16 
1

你的代碼是正確的。至少轉換爲浮動很好。有一堆問題是無關緊要的 - 你認爲字符串是number:number,你稱之爲盎司磅(pounds = pounds * 16這些不再是磅)等等。

轉換爲浮動,一如既往,沒問題。

+0

同意你的評估。我打算清理它。這是清理它的一部分,因爲它現在很粗糙。 :) –