python 键盘输入负数_Python//遇到负数问题,时

'/' 是保留浮点数的一般除法。

'//'是除完之后,向下取整。

a = 10

b = 3

print(a/b) # 3.3333333333333335

print(a//b) # 3

当遇到负数时,由于 '//' 向下取整,导致 -6//132 结果不是 0 而是-1。

计算逻辑为:

(6/132) = 0.045454545454545456 *(-1) = -0.0454545 ->(向下取整) = -1

因此 如果计算a//b,ab其中一个可能为负数,则应该写成:

int(a/b)

当a/b<0时,向上取整。>0时,向下取整。

涉及到这个问题的题目:

150. 逆波兰表达式求值

【利用栈做】

class Solution:

def evalRPN(self, tokens: List[str]) -> int:

stack = []

for i in range(0,len(tokens)):

if tokens[i] not in ['+','-','*','/']:

stack.append(int(tokens[i]))

else:

b = stack.pop()

a = stack.pop()

if tokens[i] == '+':

stack.append(a+b)

if tokens[i] == '-':

stack.append(a-b)

if tokens[i] == '*':

stack.append(a*b)

if tokens[i] == '/':

stack.append(int(a/b))

#print(stack)

return stack[0]

中缀表达式->逆波兰表达式 。 比如将 (a+b) *(c-d) ->  ab+cd-*

用栈存符号,用队列 [栈也可以] 进行顺序输出。 队列只是存储结构。

规则:

(1)数字直接如队列

(2)查看运算符,如果stack为空,那么运算符直接入栈。

如果碰到了 (,那么直接入栈。

如果碰到了 ),那么就将括号内的运算全部入队列。 【要优先计算括号内的运算】

如果是普通的加减乘除,首先比较 栈顶元素 和 入栈元素,优先级关系。如果栈顶元素 优先级大于 入栈元素,则将栈顶元素依次弹出,入队列。否则,将入栈元素入栈。(优先级高的优先入队)

(3)最后查看一下,stack中还保留的操作符,依次入队。

即:栈中存储的是,按照优先级由低到高做的。出栈保证 运算级,由高到低。

from collections import deque

tokens = [ '(','5','+','4',')','*','(','3','-','1',')']

#tokens = ['0','+','3','+','1']

# ans = ['5','4','+','3','1','-','*']

stack = []

q = deque()

def priority(m,n):

if m in ['*','/'] and n in ['-','+']:

return True

else:

return False

for i in range(0,len(tokens)):

if tokens[i] not in ['(',')','+','-','*','/']:

q.append(int(tokens[i]))

else:

if len(stack) == 0:

stack.append(tokens[i])

continue

elif tokens[i] == '(':stack.append(tokens[i])

elif tokens[i] == ')':

while(True): ## 将括号里面的全部入队,因为肯定要先计算

string = stack.pop()

if string == '(':

break

q.append(string)

else: ## 只剩下加减乘除,先比较优先级,然后按照优先级大小入队

while(len(stack) and priority(stack[-1],tokens[i])): ## 将优先级大于当前元素的全部入队列

q.append(stack.pop())

stack.append(tokens[i]) ## 优先级不大于当前,那么当前操作符入栈,进行下一轮比较

if len(stack): ## 将所有的操作符入队

while(len(stack)): q.append(stack.pop())

print(q)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值