| t | def itercalc(): | t | def itercalc(): |
| stack = [] | | stack = [] |
| result = None | | result = None |
| while True: | | while True: |
| cmd = (yield result) | | cmd = (yield result) |
| result = None | | result = None |
| if cmd == '?': | | if cmd == '?': |
| if not stack: | | if not stack: |
| print('Insufficient stack') | | print('Insufficient stack') |
| else: | | else: |
| result = stack[-1] | | result = stack[-1] |
| elif cmd in ['+', '-', '*', '/']: | | elif cmd in ['+', '-', '*', '/']: |
| if len(stack) < 2: | | if len(stack) < 2: |
| print('Insufficient stack') | | print('Insufficient stack') |
| else: | | else: |
| b = stack.pop() | | b = stack.pop() |
| a = stack.pop() | | a = stack.pop() |
| try: | | try: |
| if cmd == '+': | | if cmd == '+': |
| stack.append(a + b) | | stack.append(a + b) |
| elif cmd == '-': | | elif cmd == '-': |
| stack.append(a - b) | | stack.append(a - b) |
| elif cmd == '*': | | elif cmd == '*': |
| stack.append(a * b) | | stack.append(a * b) |
| elif cmd == '/': | | elif cmd == '/': |
| if b == 0: | | if b == 0: |
| print('Zero division') | | print('Zero division') |
| stack.append(a) | | stack.append(a) |
| stack.append(b) | | stack.append(b) |
| else: | | else: |
| stack.append(a // b) | | stack.append(a // b) |
| except: | | except: |
| stack.append(a) | | stack.append(a) |
| stack.append(b) | | stack.append(b) |
| print('Operation failed') | | print('Operation failed') |
| else: | | else: |
| try: | | try: |
| num = int(cmd) | | num = int(cmd) |
| stack.append(num) | | stack.append(num) |
| except ValueError: | | except ValueError: |
| print('Unknown command') | | print('Unknown command') |