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

좋은 웹페이지 즐겨찾기