2014-12-23 5 views
-1

문자열의 구조와 형식을 유지하면서 문자열의 모든 숫자에 다른 숫자를 곱하는 방법이 필요합니다. 할 수 있습니까? 예를 들어파이썬에서 형식을 동일하게 유지하면서 문자열의 모든 숫자를 스케일하는 방법은 무엇입니까?

:이 문자열을 감안할 때

my_var = """Cat, 5, kg 

Dog, 10, kg 

Human, 50, kg""" 

, 나는 다른 변수에 저장 다른 번호 5, 10, 50를 곱 할 수 있어야합니다.

multiplier = 2.0/10 # or 0.2 

그래서 나는 새로운 문자열을 만들 multipliermy_var를 사용하려면 :

"""Cat, 1, kg 

Dog, 2, kg 

Human, 10, kg""" 

이 나는 ​​것 다음 사용자에게 출력.

도움이 될 것입니다!

+2

객체 지향 솔루션으로 float로 변경되었습니다. 각 문자열을'name','mass','units' 속성을 가진'Animal' 객체로 비 직렬화하십시오; 각 동물의 질량에'2/10'을 곱합니다. 그런 다음 문자열로 다시 직렬화하십시오. – Kevin

+1

먼저 한 줄을보십시오. 'Cat, 5, kg'문자열을 만들고 쉼표로 변환하는 방법 (https://docs.python.org/2/library/stdtypes.html#str.split), 변환 방법 [int] (https://docs.python.org/2/library/functions.html#int)를 사용하여 정수로 변환하고 [ ','.join (values)]을 사용하여 다시 가입하십시오 (https : //docs.python .org/2/library/stdtypes.html # str.join). –

+0

@Kevin ['namedtuple']에 대한 [documentation] (https://docs.python.org/2/library/collections.html#collections.namedtuple) (https://stackoverflow.com/questions/2970608/what) -are-named-tuples-in-python) 도움이 될 것입니다. –

답변

1

사용자 정의 대체 기능이있는 정규 표현식은 작업에 적합합니다.

문자열의 모든 숫자를 찾아서 정수로 변환하고 일부 산술 연산을 수행 할 수 있습니다. 그런 다음 이전 텍스트를 바꾸기 위해 문자열로 다시 변환해야합니다.

import re 

text = ''' 
Cat, 5 kg 
Dog, 10 kg 
Human, 50 kg 
'''.strip() 

def divide_numbers(s, n): 
    def sub(m): 
     return str(int(m.group(0))//n) 
    return re.sub('[0-9]+', sub, s) 

print(divide_numbers(text, 5)) 

고양이, 1kg
개 2kg
인간 10kg

소수부 여기 사방 폐기된다는 통지를 수행. // (정수 구분) 대신 int/ 대신 float을 사용할 수 있습니다.

여기 정규 표현식의 또 다른 흥미로운 점은 일부 숫자 만 일치 시키도록 패턴을 고급화 할 수 있다는 것입니다. 여기에서 우리는 " kg" 다음에 만 번호와 일치하고, 난 아마 여기에 좋은 것입니다 언급

def divide_numbers(s, n): 
    def sub(m): 
     return str(float(m.group(1))/n) 
    return re.sub('([0-9]+) kg', sub, s) 
+0

정말 고마워요! 이것은 효과가 있었지만, 코드를 어떻게 만들 수 있는지에 대한 설명을 해줄 수 있다면 가능합니다. 표현식을 만들 수 있고이 코드 내의 비트와 조각을 이해할 수 있기 때문에 코드가 어떻게 작동 하는지를 설명 할 수 있습니다. m.group (0) 및 re.sub 및 "([0-9] +) kg", sub, s와 같은 특정 단어가 코드 내에서 의미하는 것 – Mohamed

+0

@Mohamed http://docs.python.org/ library/re.html –

관련 문제