2000字范文,分享全网优秀范文,学习好帮手!
2000字范文 > python 键盘输入负数_Python//遇到负数问题 时

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

时间:2020-09-29 07:23:44

相关推荐

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)

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。