2017-04-11 48 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