من رفتم سربازی اگر محتوای منو دوست داشتید و بدردتون خورد از من حمایت مالی کنید

حل تمرین شنگول و منگول کوئرا با پایتون

حل تمرین شنگول و منگول کوئرا با پایتون
حل تمرین شنگول و منگول کوئرا با پایتون

حل تمرین شنگول و منگول کوئرا با پایتون

در این نوشته به روش حل یکی از سوالات برنامه نویسی وب‌سایت کوئرا می‌پردازیم.

 

حل تمرین شنگول و منگول کوئرا با پایتون

شنگول که نمره‌ي درس کامپایلرش، بسیار کمتر از منگول شده ادعا می‌کند که این درس را بیشتر از او بلد است و تنها دلیلی که باعث شده نمره‌ی بدی بگیرد، متفاوت بودن استادشان است. منگول این ادعای او را رد می‌کند و می‌خواهد با طرح یک مسئله به او ثابت کند که اینگونه نیست. منگول به شنگول یک عبارت ریاضی infix می‌دهد و از او می‌خواهد که معادل postfix آن را به او بدهد. شنگول برایاینکه خودی نشان بدهد تصمیم می‌گیرد برنامه‌ای بنویسد که این کار را برای او انجام دهد. شما باید در این کار به شنگول کمک کنید. در مدل infix عملوند بین عملگرها ظاهر می‌شود. مثل عبارت $SO+(B-E/N)$ اما در مدل postfix عملوند بعد از عملگرها ظاهر می‌شود. مثلا همان عبارت قبل اگر به صورت postfix نوشته شود، به صورت $SOBEN/-+$ نمایش داده می‌شود. قابل ذکر است، در مدل postfix ابهامی وجود ندارد و نیازی به پرانتزگذاری نیست. برنامه‌ای بنویسید که یک عبارت ریاضی، حاوی چهار عمل اصلی بگیرد و معادل postfix آن را نمایش دهد.

 

ورودی

یک رشته شامل حروف بزرگ انگلیسی، پرانتز و چهار عمل اصلی است که یک عبارت درست infix را مشخص می‌کند. همچنین طول ورودی از 5000 بیشتر نیست.

 

خروجی

عبارت معادل معنایی postfix ورودی. توجه کنید امکان چند جواب متفاوت برای یک ورودی وجود دارد. جوابی را برگردانید که با حذف همه‌ی عملوندها و پرانتزها از ورودی و خروجی به دو رشته‌ی یکسان برسیم.

 

مثال

ورودی نمونه 1

S*O+(B-E/N)

 

خروجی نمونه 1

SO*BEN/-+

 

کد پایتون سوال تمرین شنگول و منگول

Operators = set(['+', '-', '*', '/', '(', ')', '^'])

Priority = {'+':1, '-':1, '*':2, '/':2, '^':3}
 
 
def infixToPostfix(expression): 

    stack = []
    output = '' 

    for character in expression:

        if character not in Operators:

            output+= character

        elif character=='(':

            stack.append('(')

        elif character==')':

            while stack and stack[-1]!= '(':

                output+=stack.pop()

            stack.pop()

        else: 

            while stack and stack[-1]!='(' and Priority[character]<=Priority[stack[-1]]:

                output+=stack.pop()

            stack.append(character)

    while stack:

        output+=stack.pop()

    return output


expression = input()

print(infixToPostfix(expression))

 

منبع سوال: کوئرا

اگر نیاز به حل تمرین‌های دیگری از کوئرا دارید در بخش نظرات همین نوشته برای ما بنویسید.

برای امتیاز به این نوشته کلیک کنید!
[کل: 0 میانگین: 0]