2017-04-11 51 views
4

嗨,我想知道我是否可以收拾我的代碼比我有更好的。更好的使用.replace和.strip的方法?蟒蛇

基本上答案將使用x.strip()x.strip("£")x.replace(",")然後x = float(x) * 1.18圖轉換成歐元是像x = "£1,094.99 " 林。

沒有辦法讓這個更有效?我是新手,所以我只是想知道。

回答

7

一個很好的一個班輪我經常用的就是這個:

x = ''.join([c for c in x if c in '1234567890.']) 

因此,像這樣:

x = "$1,094.99" 
x = ''.join([c for c in x if c in '1234567890.']) 
print x 

會給你的輸出:

1094.99 

然後你可以像你一樣使用你的float(x)* 1.18。我覺得這是一個很好的方法,因爲它是一些強大的。流浪的角色和美元符號而不是英鎊符號不應該阻止它的工作。

+0

請問你的代碼工作的第一線? – alienware13user

+0

@ alienware13user它基本上查看字符串x(c中的c用於x)中的所有字符,以及該字符是否在字符串'1234567890'中。那麼它會返回該字符。否則會跳過它。 – Scheme

+0

啊謝謝 - 我知道我不打算評論謝謝。但由於:P – alienware13user

5

你可以取代它爲「」

float(data.replace(',','').replace('£',''))*1.18 
+0

這個答案也很好,我認爲如果你想確保只有英鎊和逗號被替換,但是如果你想去掉任何貨幣符號則更糟。另外我想象一些人會發現替換語法比「x for x in ...」更容易閱讀 – Scheme

1

雖然它沒有使用.split,但我總是找問題要搶(在這種情況下的數字)所有非分隔符串,值得使用正則表達式。你只需要找到非白色或'。'

import re 
x = "£1,094.99 " 
number = float(''.join(re.findall('\w+|\.',s))) 
euro = number * 1.18 
0

爲此,您可以用優雅和re模塊decimal,像這樣:

# -*- coding: utf-8 -*- 
from re import sub 
from decimal import Decimal 
x = "£1,094.99" 
value = Decimal(sub(r'[^\d.]', '', x)) 
print(value) 
value_euro = float(value) * 1.18 
print(value_euro) 

這將導致:

1094.99 
1292.0882