์ ๋ฒ ํฌ์คํธ์์๋ ํ์ด์ฌ์ built-in ํจ์๋ฅผ ์ฌ์ฉํ์ฌ ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ์ ๋ฐ์ ์ฌ์น์ฐ์ฐ์ ์์์ ๋ง์ถฐ ๊ฐ์ ์ถ๋ ฅํด์ฃผ๋ ๋ด์ฉ์ ์์ฑํ๋ค.
์ด๋ฒ ํฌ์คํธ์์ ์ฌ์ฉ์๊ฐ ์
๋ ฅํ ๊ฐ์ ์์๋๋ก ๊ณ์ฐ์ ํด์ฃผ๋ ๊ณ์ฐ๊ธฐ๋ฅผ ๋ง๋ค์ด๋ณด๋ ค๊ณ ํ๋ค.
์๋ฅผ๋ค์ด input๊ฐ์ด 500 + 5 ๏นก 10 ์ด ๋ค์ด์๋ค๋ฉด 500,+,5,๏นก,10 ์ ํํ๋ก list์ ๋ฃ์ ์๊ฐ์ด๋ค.
operator = ["+", "-", "*", "/", "="]
string_list = []
lop = 0
for i, s in enumerate(user_input):
if s in operator:
if user_input[lop:i].strip() != "":
string_list.append(user_input[lop:i])
string_list.append(s)
lop = i + 1
์ฐ์ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ๊ตฌ๋ถ์ง์ ๊ฒ์ด๊ธฐ ๋๋ฌธ์ ๋ง์ง๋ง ์ฐ์ฐ์๊ฐ ์๋ index๋ฅผ ํ์ํ๊ธฐ ์ํ ๋ณ์(lop)
๋ฅผ ์์ฑํ ํ ์ด๊ธฐํ ์์ผ์ค๋ค.
user_input
๊ฐ์ ๋ฐ๋ณต๋ฌธ์ ํตํด ๋ถ๋ฆฌ์ํฌ๊ฑด๋ฐ, ์กฐ๊ธ ์ด๋ ต๋ค.
๐ ์ฝ๋์ ์ดํด๋ฅผ ๋๊ธฐ ์ํด ์์๋ก user_input = 500 + 5 * 10 ์ผ๋ก ๊ฐ์ ํ๊ฒ ๋ค.
s ๋ ํ์ฌ ๋ฌธ์๋ฅผ ์๋ฏธํจ. s ๊ฐ ์ฐ์ฐ์๊ฐ ์๋๋ฉด for ๋ฐ๋ณต, s๊ฐ ์ฐ์ฐ์๋ฉด ๋ค์ if ๋ก ๋์.
์ฒ์์ user_input ์ด 500์ด๊ธฐ ๋๋ฌธ์ 500์ ์ฒซ๋ฒ์งธ,๋๋ฒ์งธ,์ธ๋ฒ์งธ ๊น์ง๋ operator ๊ฐ ์๊ธฐ ๋๋ฌธ์ for loop ๋ฐ๋ณต๋๋ค๊ฐ ์ฐ์ฐ์ + ๊ฐ ๋์ค๋ฉด์ if์ ๊ฑธ๋ฆฌ๊ฒ ๋จ.
์ด๋, + ์ i ์ index ๊ฐ์ 3 ( 5 -> 0 , 0 -> 1, 0 -> 2, + -> 3 )
lop ์ ์ด๊ธฐํ ๊ฐ์ 0 ์ด์๊ธฐ ๋๋ฌธ์ 0 ์์ ์ธ๋ฒ์งธ ๊น์ง ๋ผ๋ ์๋ฏธ๊ฐ [lop:i]๊ฐ ๋๋ ๊ฒ.
๊ณต๋ฐฑ์ ์ ์ธํ๊ณ ์ซ์์ ์ฐ์ฐ์๋ง ๊ตฌ๋ถํ๋ ค๊ณ strip()์ ์ฌ์ฉํ์ฌ ๊ณต๋ฐฑ์ ์ ์ธ์ํด.
user_input์ lop~i ๊น์ง ์ฌ๋ผ์ด์คํ์ฌ string_list์ append ์ํด.
s ๋ฅผ append ์์ผ์ค์ผ๋ก์จ ์ซ์๊ฐ ์๋ ์ฐ์ฐ์๋ list์ ํฌํจ์์ผ์ค.
์์์ i ๊ฐ์ 3์ด์๊ธฐ ๋๋ฌธ์ i + 1 ํ๋ฉด์ lop ๊ฐ์ 4๊ฐ ๋จ. ์ด ์ํ๋ก ๋ค์ for ๋ฌธ ๋์
๊ทผ๋ฐ ๋์ํ๋ค๊ฐ ๋ฐ๋ก ๋ค์์ ์ฐ์ฐ์์ธ *๊ฐ ๋์ด. ๊ทธ๋์ ๋ค์ s ์ operator ๊ฐ ๋ค์ด์ค๋ฉด์ if ์ ๊ฑธ๋ฆฌ๊ฒ ๋จ.
์คํ๊ฒฐ๊ณผ
user_input = "500 + 5 * 10" ์ด์๋๊ฒ ์์ ๋ด์ฉ์ฒ๋ผ ๋ถ๋ฆฌ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ๋์๋ค.
์์ ์คํ ๊ฒฐ๊ณผ๋ฅผ ๋ณด๋ฉด ์กฐ๊ธ ์ด์ํ๋ค. ๋ถ๋ช
input
๊ฐ์ 500 + 5 * 10์ธ๋ฐ ๋ค์ 10์ด ์ถ๋ ฅ์ด ์๋๋ค. ์์ผ๊น?
๋ก์ง์ด ์ฐ์ฐ์๋ฅผ ๊ธฐ์ค์ผ๋ก ํ๊ธฐ ๋๋ฌธ์ * ๋ค์ 10์ ์๋์ด. 10 ๋ค์ ์ฐ์ฐ์๊ฐ ์์ผ๋๊น
์ด๋ฐ ๊ฒฝ์ฐ๋ฅผ ๋๋นํด์ user_input ์ ๋ง์ง๋ง์ด ์ฐ์ฐ์๊ฐ ์๋ ๊ฒฝ์ฐ์ ์กฐ๊ฑด์ ์ ์ํด ์ค๋ค.
if user_input[-1] not in operator:
user_input += "="
์์ ์ฝ๋๋ฅผ for
๋ฌธ ์๋จ์ ์ถ๊ฐํด์ฃผ์.
[-1]์ list ์ ๋์ ์๋ฏธ ํจ
์์๋ก = ์ฐ์ฐ์๋ฅผ ๋ถ์ฌ์ฃผ๋๋ก ํ๋๊ฒ. ์ค์ ๊ฐ์ ์๋ ์์์ ๊ฐ์์ ์ฃผ์ํ์.
์์ ๊ฐ์ ์คํ์์ผ๋ณด๋ฉด =
๊น์ง ์ถ๋ ฅ๋์ด ๋ฒ๋ฆฐ๋ค. ์์์ ๊ฐ์ผ๋ก ์ถ๊ฐ์์ผ์ฃผ์๊ธฐ ๋๋ฌธ์ด๋ค.
๋ฐ๋ผ์, ๊ฐ์ฅ ๋ง์ง๋ง์ =
๋ง ์ฌ๋ผ์ด์ค ์์ผ์ ์ถ๋ ฅํ๋ฉด ๋๊ฒ ๋ค.
string_list = string_list[:-1]
์คํ๊ฒฐ๊ณผ
์ด์ ์ํ๋๋๋ก ๋ถ๋ฆฌ๋ฅผ ์์ผฐ์ผ๋ ๊ณ์ฐ๋ง ํ๋ฉด ๋๋ค. ๊ณ์ฐ์ ์ด๋ป๊ฒ ํ ๊น?
์ด ๊ณ์ฐ๊ธฐ๋ ์ฌ์ฉ์์ ์
๋ ฅ๊ฐ ์์๋๋ก ๊ณ์ฐ์ ํ๋๊ฒ์ด ๋ชฉ์ ์ด๋ค.
๋ฐ๋ผ์, [100, +, 200, -, 300 -] ์ด๋ฐ์์ด๋ผ๊ณ ํ๋ฉด ์ธ๊ฐ์ฉ ๊ณ์ฐํ ํ ๋ค์๊บผ๋ ์ด์ด์ ๊ณ์ฐ์ ํ๋ ค ํ๋ค.
์ฆ, 100+200์ ๊ณ์ฐํด์ 300์ด ๋์ค๋๊น 100+200์ ์์ ๊ณ ์ด ์๋ฆฌ์ 300์ ๋ฃ๋๋ค.
๊ทธ๋ผ ๋ค์ 300-300์ด ๋๋, 300-300์ ์์ ๊ณ ์ด ์๋ฆฌ์ 0์ ๋ฃ๋๋ค.
pos = 0
string_list
์ ๊ธธ์ด์ pos
์ ์์น๋ฅผ ๋น๊ตํ๋ค.pos
๊ฐ list
์ ๊ธธ์ด๊ฐ ๋ ๊ธธ๋ฉด ๋์ด์ ๊ณ์ฐ ์์ด ์๋๊ฒ์ด๋ฏ๋ก break
if pos + 1 > len(string_list):
break
list
์ ๊ธธ์ด๊ฐ ๋ ๊ธธ ๊ฒฝ์ฐ์ list
์ index ํฌ์ง์
์ด ์ฐ์ฐ์์ผ ๊ฒฝ์ฐ์ด๋ค.๋จผ์ , 0,1,2์ ์์น๋ฅผ ์ฐ์ฐ์ ํ๊ณ
if len(string_list) > pos + 1 and string_list[pos] in operator:
temp = string_list[pos - 1] + string_list[pos] + string_list[pos + 1]
์ฐ์ฐ์ ํ ์๋ฆฌ์ ์๋๊ฑธ ์ญ์ ๋ฅผ ํ๋ค.
del string_list[0:3]
list
์ ์ญ์ ์ํจ ์๋ฆฌ์ insert
์ํจ๋ค.
์ฃผ์ํ ์ ์, append
๋ฅผ ํ๋ฉด list
์ ๊ฐ์ฅ ๋ท๋ถ๋ถ์ ์ถ๊ฐ๋๋ฏ๋ก ํ์ง ๋ง ๊ฒ.
๊ทธ๋ฆฌ๊ณ ๋จ์ ๋ท๋ถ๋ถ์ ์ฐ์ฐ์ ์ด์ด์ ์งํํด์ ํ๋ฏ๋ก pos
๋ฅผ ์ด๊ธฐํ ์์ผ์ค๋ค.
string_list.insert(0, str(eval(temp)))
์ด์ ์ด ๋์๋ค์ +1
์ฉ ํด๊ฐ๋ฉฐ ์์ ํ๋ ๋์๋ค์ ๋ฐ๋ณตํด์ ์ํํ๋ค.
pos += 1
๊ฒฐ๊ณผ๊ฐ์ด ๋ด๊ธด list
์ ๊ธธ์ด๋ ๊ฒฐ๊ตญ 0๋ฒ์งธ ์ธ๋ฑ์ค๋ง ๋จ์ผ๋ฏ๋ก ๊ทธ๋๋ก ์ถ๋ ฅํด์ฃผ์.
if len(string_list) > 0:
result = float(string_list[0])
print("๊ฒฐ๊ณผ: {}".format(result))
์์ ์ํ๋ก๋ ์ถ๋ ฅ๊ฐ์ด ๋์ค๊ณ ํ๋ก๊ทธ๋จ์ด ์ข ๋ฃ๋๋ฏ๋ก ํ์์ ๋ฐ๋ผ ๋ฐ๋ณต๋ฌธ์ ์ถ๊ฐํด์ฃผ๊ณ , ์ฌ์ฉ์์ input์ ๋ฐ๋๋ก ํ์์ ๋ง๊ฒ ์ ์ ํ ์์ ํด์ฃผ๋ฉด ์ข์ ๊ฒ ๊ฐ๋ค.
์ด ๋ค์ ํฌ์คํธ์์๋ PyQt5๋ฅผ ์ฌ์ฉํ์ฌ GUI ํ๊ฒฝ์์ ๊ณ์ฐ๊ธฐ๋ฅผ ๊ตฌ์ฑํด๋ณด๋ ค๊ณ ํ๋ค.