Python 프로 그래 밍 학습 - python 을 이용 하여 간단 한 계산기 프로그램 을 작성 합 니 다.
5274 단어 Python 학습
1. 기능 요구:
사용자 의 입력 산식 을 실현 합 니 다. 예 를 들 어 1 + 22 * 3 2 - 2 2 2 * (2 3 1 + 34 * 33 / 4 + 55 * (1 2 - 5 * 8 + 7 / 9) + (20 + (39 / 13 + 8) + 8 * 4 - 9) + 7 8 / 9 - 10 * 76 + (8 6 * 9) 를 포함 합 니 다.
2. 요구 와 지식:
1. eval () 을 사용 할 수 없 는 방법 을 요구한다.
2. 문자열 의 처리
3. 정규 표현 식 의 사용, re 모듈
4. 재 귀 함수 의 사용
3. 프로그램의 대략적인 사고:
두서 없 는 작성 을 피하 십시오. 괄호 가 포함 되 지 않 은 가장 간단 한 가감, 간단 한 논리 곱 하기 부터 작성 합 니 다. 함수 마다 문자열 의 처리 와 정규 표현 식 (re) 을 통 해 가장 간단 한 산식 을 가 져 옵 니 다.또한 인터넷 관련 자 료 를 조회 하고 자신의 이 해 를 통 해 일부 개량 을 실현 하여 작은 발전 을 이 루 었 다.
1. 최소 곱 하기 단원 을 실현 하고 괄호 를 포함 하지 않 는 산식
문자열 의 split () 방법 을 사용 하여 문자열 을 * / 분리 가 목록 이 되 어 목록 의 색인 을 이용 하여 관련 값 을 추출 하고 if, else 의 문 구 를 통 해 판단 하여 해당 하 는 곱 하기, 나 누 기 를 사용 합 니 다.
import re
def multiply_divide(str_number):
''' , split */, 。'''
ret = float(str_number.split("*")[0]) * float(str_number.split("*")[1]) if "*" in str_number else\
float(str_number.split("/")[0]) / float(str_number.split("/")[1])# if else
return ret
2. 재 귀 를 사용 하여 괄호 가 포함 되 지 않 은 최소 곱 하기 단원 재 귀 연산 을 완료 합 니 다.
def remove_md(str_number):
''' '''
if "*" not in str_number and "/" not in str_number:
return str_number #
else:
str_num = re.search(r"-?[\d\.]+[*/]-?[\d\.]+",str_number).group()
#-?[\d\.]+[*/]-?[\d\.]+ */ "-" , “-2*-9”
str_number = str_number.replace(str_num,"+" + str(multiply_divide(str_num))) \
if len(re.findall(r"-",str_num)) == 2 \
else str_number.replace(str_num, str(multiply_divide(str_num)))
# if else , if len(re.findall(r"-",str_num)) == 2, "-","--"
return remove_md(str_number) # ,
3. 간단 한 가감 실현, 괄호 없 는 산식
정규 표현 식 re 를 사용 하여 문자열 의 중 인접 이 '+ -' 인 경우 해당 하 는 대 체 를 통 해 문자열 에 인접 이 '+ -' 인 경우 가 존재 하지 않 음 을 알 수 있 습 니 다. 그 다음 에 첫 번 째 숫자 가 음수 인지 판단 하고 합병 을 처리 한 다음 에 하나의 순환 을 통 해 간 격 된 가감 연산 자 '+ -' 를 얻 고 해당 하 는 연산 을 실현 합 니 다.
def add_sub(str_number):
''' '''
if re.findall("\+-|-\+|--|\+\+",str_number):
''' +- , , +- '''
str_number = str_number.replace(r"+-","-")
str_number = str_number.replace(r"-+", "-")
str_number = str_number.replace(r"--", "+")
str_number = str_number.replace(r"++", "+")
str_list = re.findall("([\d\.]+|\+|-)",str_number)
if str_list[0] == "-":
''' , '''
str_list[0] = str_list[0] + str_list[1]
del str_list[1]
sum_num = float(str_list[0])
for i in range(1, len(str_list), 2):
''' , '''
if str_list[i] == "+":
sum_num += float(str_list[i+1])
else:
sum_num -= float(str_list[i+1])
return sum_num # ,
4. 괄호 가 포함 되 지 않 은 사 칙 기본 연산 실현
먼저 문자열 의 빈 칸 을 제거 하고 문자열 의 replace () 방법 을 사용 할 수 있 습 니 다.그 다음 에 간단 한 가감 함수 와 간단 한 곱 하기 재 귀 함수 에 대한 호출 (내장 호출) 을 통 해
def basic_opera(str_number):
''' '''
str_number = str_number.replace(" ","") #
return add_sub(remove_md(str_number))
5. 괄호 를 포함 하 는 문자열 의 주체 연산 프로그램 실현
정규 표현 식 re 의 해당 매 칭 을 통 해 가장 안쪽 괄호 의 산식 을 얻 은 다음 문자열 에 괄호 가 없 을 때 까지 재 귀 합 니 다 ()
def main_calcu(str_expre):
''' str_expre'''
if not re.search(r"\([^()]+\)",str_expre):
return basic_opera(str_expre)
else:
expre = re.search(r"\([^()]+\)",str_expre).group()
str_expre = str_expre.replace(expre,str(basic_opera(expre[1:len(expre)-1])))
return main_calcu(str_expre) # ,
6. 주 함수 기능 실현
문자열 의 입력 을 실현 하고 입력 한 문자열 을 매개 변수 로 하여 주체 연산 함수 호출 을 진행 합 니 다.
def main_func():
''' , , , '''
str_expre = input(" : ")
while True:
if re.findall("[A-Za-z]+",str_expre):
str_expre = input(" , : ")
else:
# print(main_calcu(str_expre)) #
return main_calcu(str_expre) # ,
7. 프로그램의 테스트
if __name__ == "__main__":
# main_func()
print(main_func())
print(eval("1+22*32-22*(231+34*33/4+55*(12-5*8+7/9)+(20+(39/13+8)+8*4-9)+78/9-10*76+(86*9))"))
'''
print(main_func()): 20704.222222222226
eval : 20704.222222222226
'''
소결
이 간단 한 프로그램의 작성 을 통 해 해당 하 는 지식 에 대해 익숙 하고 깊이 있 게 알 게 되 었 습 니 다. 또한 자신 이 코드 를 많이 쓰 고 코드 를 많이 보 며 눈 에 띄 는 문 제 를 극복 하고 새로운 프로그램 을 만 들 때 더욱 숙련 되 고 생각 이 뚜렷 하도록 노력 하 겠 습 니 다.
참고 자료https://www.cnblogs.com/Wxtrkbc/p/5453349.html
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python 프로 그래 밍 학습 - python 을 이용 하여 간단 한 계산기 프로그램 을 작성 합 니 다.함수 마다 문자열 의 처리 와 정규 표현 식 (re) 을 통 해 가장 간단 한 산식 을 가 져 옵 니 다.또한 인터넷 관련 자 료 를 조회 하고 자신의 이 해 를 통 해 일부 개량 을 실현 하여 작은 발전 을 이 루...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.