아래 코드는 입력 된 문자열 (수학 표현식)을 사용하고 find 함수를 사용하여 "*/+ -"에서 연산자 중 하나를 찾고 이에 따라 문자열을 구분합니다 .파이썬 : 찾기 기능을 순서대로 사용하지 않음
def splitting1(z):
for operators in "*/+-":
if operators in z:
position1= z.find(operators)
position2= z.rfind(operators)
text_before_operators= (z[:position1]).strip()
text_after_operators= (z[(position1+1):(position2)]).strip()
return text_before_operators,text_after_operators
내 문제는 내가 같은 3/5*7
로 입력 된 표현이있는 경우 다음 position1
먼저 /
을 발견하기 전에 *
을 찾을 것입니다. 코드에서 'position1'을 가장 왼쪽 연산자와 연관 시키길 원합니다. for/in 함수를 사용할 때 연산자 우선 순위를 생략 할 수 있습니까? 그렇지 않다면 우선 순위를 생략 할 수있는 더 나은 문자열 조작기가있을 것입니다.
참고 z는 입력입니다. 그리고 모호성이 발생하는 경우 입력은 두 명의 연산자로 제한됩니다.
참고 : 연산자는 모듈 이름이므로 해당 함수에서 사용하는 것은 나쁜 습관으로 간주 될 수 있습니다. –
고마워요, 나쁜 변화가 있어요. – SeesSound
수학 표현식을 평가하려는 경우, 이것이 완료된 방법이 아닙니다. 입력을 순차적으로 읽고 토큰 (숫자, 연산자)으로 분리하고 토큰을 shunting 야드 또는 하향식과 같은 구문 분석 알고리즘을 사용하여 올바른 "위치"에 놓습니다. – georg