디시인사이드 갤러리

갤러리 이슈박스, 최근방문 갤러리

갤러리 본문 영역

[📚정보] 파이썬 계산기(2): 토큰 리스트를 위한 준비

신촌우왕87갤로그로 이동합니다. 2022.05.17 14:43:50
조회 157 추천 1 댓글 3
														


신촌우왕 소개


수학자, 작곡가, 요가수행자







파이썬 계산기 프로젝트(2):

토큰 리스트를 위한 준비



사용자가 수식문자열을 입력하면

숫자, 연산자, 함수명 등으로 각각을 분리할 필요가 있다.


이를테면 수식문자열 s = "2+39*5"에서

토큰으로 분리하면 다음과 같다.

2, +, 39, *, 5






하지만 사용자는 우리가 생각하는 대로 간단히 입력해주지 않는다.


키보드를 이용하여 입력하지만,

수학을 배우면서 습관화된 수식을 작성한다.


예를들면 괄호를 ()만 사용하는 것이 아니라

{}, [] 등을 사용할 수도 있다.


공백을 불규칙하게 사용할 수도 있다.

s = "2+3*5"처럼 입력할 수도 있고

s = "2 + 3 * 5"처럼 입력할 수도 있고

s = "{2 + (3 * 5)}"처럼 입력할 수도 있다.


사용자가 어떻게 입력하든

간단한 입력 형식으로 전환할 필요가 있으며,

간단한 입력 형식으로 전환한 후

토큰으로 분리하는 것이 좋다.





불필요한 요소 제거하기



[모든 공백 제거]

실제 계산 시, 공백은 불필요하므로 모두 제거한다.

s = s.replace(" ", "")


[괄호를 중괄호로 통일하기]

중괄호, 대괄호를 모두 중괄호로 바꾼다.

s = s.replace("{", "(")

s = s.replace("}", ")")

s = s.replace("[", "(")

s = s.replace("]", ")")


[단항연산자 -를 이항연산자로 전환하기]

2-3에서 -는 이항연산자이지만

-3+2에서 -는 단항연산자이다.

그러나 -3+2 = 0-3+2로 바꾸면 -는 이항연산자가 되면서 계산 결과값은 변하지 않는다.

보통 여는 괄호 다음에 이러한 경우가 빈번하게 발생할 수 있다.

(수식 맨 앞에 괄호가 없으면서 -가 있는 경우는 나중에 앞에 0을 붙일 예정이다.)

s = s.replace("(-", "(0-")


[단항연산자 +를 제거하기]

2+3에서 +는 이항연산자이지만

+2-3에서 +는 단항연산자이다.

그러나 +2-3 = 2-3으로 바꾸어도 계산 결과값은 변하지 않는다.

보통 여는 괄호 다음에 이러한 경우가 빈번하게 발생할 수 있다.

(수식 맨 앞에 괄호가 없으면서 +가 있는 경우는 나중에 제거할 것이다.)

s = s.replace("(+", "(")


[power: 멱승]

키보드를 이용하여 2의 3승을 입력할 때

2**3 혹은 2^3으로 입력한다.


^로 통일시킨다.

(비트 연산은 제공하지 않기로 한다.)

s = s.replace("**", "^")


[나머지 연산자: %]

7을 3으로 나누었을 때 나머지만 취하면 1이다.

7 % 3 = 1

그러나 %는 사실 함수 수준의 우선순위를 가진다.

따라서 %를 대응하는 명시적인 함수명으로 바꿔준다.

s = s.replace("%", "mod")


수학에서는 7 ≡ 1 (mod 3)으로 표기하지만

mod(7, 3) = 1처럼 함수화해서 나타낼 수도 있을 것이다.


그러나 mod가 함수이면서 이항연산자처럼 보이도록 하기 위해

mod(7, 3) 대신에 (7)mod(3)처럼 입력받도록 교육시켰다고 가정하자.


물론 직접 입력받은 % 연산자는 mod로 변환한다.

즉 7 % 3이 7 mod 3으로 바뀌는 셈이다.


[몫 연산자: //]

7을 3으로 나누었을 때 몫만 취하면 2이다.

7 // 3 = 2


나머지 연산자의 경우와 마찬가지로

몫 연산자 또한 함수 수준의 우선순위를 가져야 한다.


// 대신 moq라는 함수명으로 대체하여 계산에 이용하기로 한다.

s = s.replace("//", "moq")





viewimage.php?id=3da4c42eeadc&no=24b0d769e1d32ca73deb81fa1bd8233c4c604f2f148310b599b41b33653cc20a795c59ca78d2ed5386bb156a5590066f5b7d17d52c0550d3b359464e4bee2fafc725aa52






얼추 준비가 된 것 같다.


이제 수식문자열에서 토큰을 분리하여

토큰 리스트에 담아 리턴하게 될 예정이다.





추천 비추천

1

고정닉 1

0

댓글 영역

전체 댓글 0
본문 보기

하단 갤러리 리스트 영역

왼쪽 컨텐츠 영역

갤러리 리스트 영역

갤러리 리스트
번호 말머리 제목 글쓴이 작성일 조회 추천
- 설문 영포티룩도 멋지게 소화할 것 같은 40대 스타는? 운영자 25/10/27 - -
- AD 할로윈 슈퍼위크~!! 운영자 25/10/23 - -
1600 🔎질문 ㅏ... [3] xxx04079(1.229) 22.05.17 138 0
1598 🔎질문 전역변수에 대한 질문입니다... [4] ㅇㅇ(36.39) 22.05.17 136 0
1597 🔎질문 도움! xxx04079(1.229) 22.05.17 101 0
1596 🔎질문 1씩 증가하는 count 함수 예시좀. [2] xxx04079(1.229) 22.05.17 112 0
1595 🔎질문 리스트에서 문열과 숫자를 입력하려면 어떻게해야해요? [2] ㅇㅇ(59.8) 22.05.17 102 0
1593 🔎질문 tkinter 질문 [4] ㅇㅇ(121.175) 22.05.17 144 0
📚정보 파이썬 계산기(2): 토큰 리스트를 위한 준비 [3] 신촌우왕87갤로그로 이동합니다. 22.05.17 157 1
1587 📚정보 파이썬 계산기(1): "2+3*5=" 연산자 우선순위 [3] 신촌우왕87갤로그로 이동합니다. 22.05.16 188 1
1586 일반 아 소문자 중간에 대문자 치기 존나 힘드노 [2] 키메라(112.148) 22.05.16 100 0
1585 🔎질문 주피터노트북 도와주세요ㅠ [6] .(1.239) 22.05.16 166 0
1584 🔎질문 밑에 글썼던사람인데 이런식으로 하고싶음 [8] ㅇㅇ(203.252) 22.05.16 115 0
1583 🔎질문 파린이 주사위 하나만 알려줄사람 [2] ㅇㅇ(203.252) 22.05.16 98 0
1582 🔎질문 대학 과제 질문 했던거 텍스트 판 xxx04079(1.229) 22.05.16 94 0
1581 🔎질문 대학 기초 파이썬 과젠데 도와주세요 [5] xxx04079(1.229) 22.05.16 497 0
1580 🔎질문 이게 뭔 뜻인가요 [4] ㅇㅇ(58.126) 22.05.15 139 0
1579 📚정보 if ~ elif ~ else: 쉽게 구현하기 [3] 신촌우왕87갤로그로 이동합니다. 22.05.15 239 0
1577 🔎질문 궁금해요잉 [4] ㅇㅇ(58.126) 22.05.15 95 0
1575 🔎질문 아까 글 올렸던 대학생 입니다 [6] dd(221.138) 22.05.14 143 0
1574 🔎질문 이게 뭔뜻인가요 [5] ㅇㅇ(58.126) 22.05.14 110 0
1573 💡답변 221.138 게이야 내코드는 어떻노? 키메라(112.148) 22.05.14 107 0
1572 🔎질문 파이썬 초보 질문 [2] ㅇㅇ(221.159) 22.05.14 118 0
1571 🔎질문 대학생 과제 도움 요청 부탁드립니다.. [3] dd(221.138) 22.05.14 203 0
1570 🔎질문 파이썬 파일 실행 질문 ㅇㅇ(180.65) 22.05.14 141 0
1564 🔎질문 나도 도권처럼 코인만들어서 부자될려면 [3] ㅇㅇ(165.132) 22.05.14 149 0
1563 🔎질문 파이썬 조건 여러개인 조건문 [2] ㅇㅇ(168.188) 22.05.13 128 0
1562 🔎질문 이거 무슨 뜻인지 알려주셈.. [5] ㅇㅇ(165.132) 22.05.13 149 0
1560 🔎질문 이거 풀 수 있는 고수있습니까 [8] ㅇㅇ(165.132) 22.05.13 145 0
1559 🔎질문 실수인 값을 1씩 더한 5개의 요소를 가진 리스트를 만들고 싶은데 왜.. [5] ㅇㅇ(221.151) 22.05.13 122 0
1557 🔎질문 퍼리썬 소멸자 작동시킬려면 del 써야됨? [3] 키메라(211.36) 22.05.13 106 0
1555 💡답변 (180.69)님 보고 계시나요? 이거 참고해보세요 [5] ㅇㅇ(223.38) 22.05.12 215 0
1554 일반 대학생을 위한 인싸되는 과제코드 작성 라이브러리 뿌립니다 키메라(112.148) 22.05.12 112 0
1553 🔎질문 대학생 파이썬 실습 좀 도와주세여.... ㅠㅠ [8] ㅇㅇ(180.69) 22.05.12 201 0
1552 📚정보 파이싼으로 가능한 짓 [3] ㅇㅇ(118.45) 22.05.12 197 1
1551 🔎질문 파이썬 리스트 질문 [6] 개밥도둑(211.105) 22.05.11 147 0
1550 일반 변수 이름 좀 성의있게 쓰셈 [8] 라댜갤로그로 이동합니다. 22.05.11 256 0
1549 🔎질문 [float] float 함수 질문 [19] ㅇㅇ(168.188) 22.05.11 183 0
1548 🔎질문 이 코드 왜 오류나는지 알려주실분..ㅠㅠㅠㅠ [4] dd(211.36) 22.05.11 133 0
1542 🔎질문 둘중 어느게 더 좋음? [1] 키메라(112.148) 22.05.10 134 0
1541 🔎질문 numpy 오류 질문이요! [3] ㅇㅇ(1.251) 22.05.10 120 0
1539 일반 히힛 뿌듯해 [7] 젤두갤로그로 이동합니다. 22.05.10 160 4
1532 일반 뭐고 파이썬 마갤 살아났는데 [2] ㅇㅇ(118.45) 22.05.10 149 0
1531 🔎질문 파린이 질문 가능한가요.. [5] ㅇㅇ(1.251) 22.05.09 152 0
1529 🔎질문 고등학교 파이썬 색 바뀌게 하기 질문좀요 ..! [1] 123(210.179) 22.05.09 168 0
1527 🔎질문 tkinter에서 클릭한 오브젝트를 수정하려면 [1] ㅇㅇ(39.7) 22.05.08 153 0
1526 🔎질문 while문 질문 [2] ㅇㅇ(14.4) 22.05.08 116 0
1525 🔎질문 몬티홀 문제 확장 질문드립니다 [2] ㅇㅇ(124.49) 22.05.08 233 0
1522 🔎질문 파이썬 pandas 질문점 [3] ㅇㅇ(121.129) 22.05.06 194 0
1521 🔎질문 왜 뒷 코드가 실행 안 되는 건가요? [3] dd(182.210) 22.05.05 134 0
1520 일반 셀레늄으로 네이버 로그인 잘됨 [1] 사밀갤로그로 이동합니다. 22.05.05 135 0
1519 🔎질문 고수님들 도와주세요.. [18] dd(182.210) 22.05.04 284 0
갤러리 내부 검색
제목+내용게시물 정렬 옵션

오른쪽 컨텐츠 영역

실시간 베스트

1/8

디시미디어

디시이슈

1/2