当出现“+”时如何取和?
How to take the sum when '+' is present?
我正在使用 post-修复符号和堆栈,我想知道 if/how 当字符串“+”是现在?
例如,我将使用列表而不是堆栈(尽管如果您有堆栈的解决方案,请务必继续)。
所以,也许如果我有:
string = '1 2 3 +'
并将其转换为列表:
['1','2','3','+']
如果正确将评估为:
6
这是我认为可行的方法(注意:我创建的 valid() 函数检查它是否可以根据字符串更改为浮点数。它工作正常) :
def post_fix(string):
lst = []
for i in string:
if '(' in lst:
pass
elif valid(i) is True:
int(i)
lst.append(i)
elif '+' in string:
'+' == sum(lst)
print(sum(lst))
post_fix('1 2 3 +')
我怎样才能让它工作,以便在出现“+”或“-”等时,它会执行适当的操作?
注意:为简单起见,您可以假设运算符总是在末尾。所以不要担心像“12+34*”这样的东西,尽管如果你有解决方案,我们将不胜感激。
the_list = ['1','2','3','+']
if '+' in the_list:
#do things related to it being present
我相信您甚至不需要将其转换为列表(尽管它可能会使后续数字处理更容易)。类似于:
if '+' in '1 2 3 +':
也应该执行,因为字符串在 pyton
中被视为可迭代对象
lst = string.split()
if '+' in lst:
# Do addition
elif '-' in lst:
# Do subtraction
这里有几个问题。第一个是 int(i)
。这不会将 i
的副本创建为整数,但根本不会修改 i
。您附加到列表的 i
仍然是一个字符串。第二个问题是这不适用于两位数 - 您立即附加到列表而不是跟踪可能的两位数。
解决这些问题:
def valid(i):
return i.isdigit()
def post_fix(string):
lst = [0]
for i in string:
if i == '(':
continue
elif i == ' ':
lst.append(0)
elif valid(i):
lst[-1] *= 10
lst[-1] += int(i)
elif i == '+':
print(sum(lst))
post_fix('1 2 3 +')
输出:
6
你不能只求和,因为列表是字符串格式,“+”永远是一个字符串,所以:
if "+" in lst:
total = sum([int(i) for i in lst if not i == "+"])
作为函数:
def sum_list(x):
if "+" in x:
total = sum([int(i) for i in x if not i == "+"])
return total
您使用堆栈评估后缀表示法。当您看到一个数字时,将其压入堆栈。当你看到一个运算符时,你会弹出足够的数字来满足它并推送结果。最后,堆栈应该只有一个项目,你打印它。
现在通常 +
是二元运算符:它需要两个操作数。在您的情况下,您希望它消耗堆栈中的任何内容。这对 +
来说是一个非常规的含义,但它很容易实现。
def postfix(tokens):
stack = []
tokens = tokens.split() if isinstance(tokens, str) else tokens
for token in tokens:
if token.isdigit() or token.startswith("-") and token[1:].isdigit():
stack.append(int(token))
elif token == "+":
assert stack # need at least one item
result = 0
while stack:
result += stack.pop()
stack.append(result)
else:
raise ValueError("invalid token {}".format(token))
assert len(stack) == 1
return stack[0]
print(postfix("1 2 3 +"))
这个结构很容易扩展以处理其他操作。例如,您可以使用 +
进行二进制加法,使用 ++
进行总和。
elif token == "++": # sum all
result = 0
while stack:
result += stack.pop()
stack.append(result)
elif token == "+": # binary additon
stack.append(stack.pop() + stack.pop())
如果加法 (+) 是字符串的最后一个值,则执行以下操作应该有效。您可以向 post_fix 方法添加附加条件,然后为 -、*、% 等添加条件:
def post_fix(string):
result = None
split_string = string.split()
if '+' == split_string[-1]:
result = sum(map(int, filter(lambda x: x.isdigit(), split_string)))
return result
如果不清楚,请分解此行:
filtered_digits = filter(lambda x: x.isdigit(), split_string) # Checks if the string is a digit and adds it to the filtered_digits list
casted_to_int = map(int, filtered_digits) # Casts all values found to be str representation of ints to int through the map function
result = sum(casted_to_int) # sums our list of integers
尝试这样做:
mystr = "1 2 3 4 +"
mylst = mystr.split() #converts the string to list: ['1', '2', '3', '+']
nums = [ int(i) for i in mylst[:-1]] #list of numbers
if mylst[-1] == "+": #check for the sign present at the end of the string/list
print(sum(nums))
nums2 = ['1', '2', '3', '4']
print(sum(nums2))
如果符号不在末尾,请尝试使用以下列表理解方法将 str 转换为 int:
nums = [ int(i) for i in mylst if i in "1234567890"]
这将防止在将元素转换为 int 以进行进一步计算时出现 ValueError
我正在使用 post-修复符号和堆栈,我想知道 if/how 当字符串“+”是现在?
例如,我将使用列表而不是堆栈(尽管如果您有堆栈的解决方案,请务必继续)。
所以,也许如果我有:
string = '1 2 3 +'
并将其转换为列表:
['1','2','3','+']
如果正确将评估为:
6
这是我认为可行的方法(注意:我创建的 valid() 函数检查它是否可以根据字符串更改为浮点数。它工作正常) :
def post_fix(string):
lst = []
for i in string:
if '(' in lst:
pass
elif valid(i) is True:
int(i)
lst.append(i)
elif '+' in string:
'+' == sum(lst)
print(sum(lst))
post_fix('1 2 3 +')
我怎样才能让它工作,以便在出现“+”或“-”等时,它会执行适当的操作?
注意:为简单起见,您可以假设运算符总是在末尾。所以不要担心像“12+34*”这样的东西,尽管如果你有解决方案,我们将不胜感激。
the_list = ['1','2','3','+']
if '+' in the_list:
#do things related to it being present
我相信您甚至不需要将其转换为列表(尽管它可能会使后续数字处理更容易)。类似于:
if '+' in '1 2 3 +':
也应该执行,因为字符串在 pyton
中被视为可迭代对象lst = string.split()
if '+' in lst:
# Do addition
elif '-' in lst:
# Do subtraction
这里有几个问题。第一个是 int(i)
。这不会将 i
的副本创建为整数,但根本不会修改 i
。您附加到列表的 i
仍然是一个字符串。第二个问题是这不适用于两位数 - 您立即附加到列表而不是跟踪可能的两位数。
解决这些问题:
def valid(i):
return i.isdigit()
def post_fix(string):
lst = [0]
for i in string:
if i == '(':
continue
elif i == ' ':
lst.append(0)
elif valid(i):
lst[-1] *= 10
lst[-1] += int(i)
elif i == '+':
print(sum(lst))
post_fix('1 2 3 +')
输出:
6
你不能只求和,因为列表是字符串格式,“+”永远是一个字符串,所以:
if "+" in lst:
total = sum([int(i) for i in lst if not i == "+"])
作为函数:
def sum_list(x):
if "+" in x:
total = sum([int(i) for i in x if not i == "+"])
return total
您使用堆栈评估后缀表示法。当您看到一个数字时,将其压入堆栈。当你看到一个运算符时,你会弹出足够的数字来满足它并推送结果。最后,堆栈应该只有一个项目,你打印它。
现在通常 +
是二元运算符:它需要两个操作数。在您的情况下,您希望它消耗堆栈中的任何内容。这对 +
来说是一个非常规的含义,但它很容易实现。
def postfix(tokens):
stack = []
tokens = tokens.split() if isinstance(tokens, str) else tokens
for token in tokens:
if token.isdigit() or token.startswith("-") and token[1:].isdigit():
stack.append(int(token))
elif token == "+":
assert stack # need at least one item
result = 0
while stack:
result += stack.pop()
stack.append(result)
else:
raise ValueError("invalid token {}".format(token))
assert len(stack) == 1
return stack[0]
print(postfix("1 2 3 +"))
这个结构很容易扩展以处理其他操作。例如,您可以使用 +
进行二进制加法,使用 ++
进行总和。
elif token == "++": # sum all
result = 0
while stack:
result += stack.pop()
stack.append(result)
elif token == "+": # binary additon
stack.append(stack.pop() + stack.pop())
如果加法 (+) 是字符串的最后一个值,则执行以下操作应该有效。您可以向 post_fix 方法添加附加条件,然后为 -、*、% 等添加条件:
def post_fix(string):
result = None
split_string = string.split()
if '+' == split_string[-1]:
result = sum(map(int, filter(lambda x: x.isdigit(), split_string)))
return result
如果不清楚,请分解此行:
filtered_digits = filter(lambda x: x.isdigit(), split_string) # Checks if the string is a digit and adds it to the filtered_digits list
casted_to_int = map(int, filtered_digits) # Casts all values found to be str representation of ints to int through the map function
result = sum(casted_to_int) # sums our list of integers
尝试这样做:
mystr = "1 2 3 4 +"
mylst = mystr.split() #converts the string to list: ['1', '2', '3', '+']
nums = [ int(i) for i in mylst[:-1]] #list of numbers
if mylst[-1] == "+": #check for the sign present at the end of the string/list
print(sum(nums))
nums2 = ['1', '2', '3', '4']
print(sum(nums2))
如果符号不在末尾,请尝试使用以下列表理解方法将 str 转换为 int:
nums = [ int(i) for i in mylst if i in "1234567890"]
这将防止在将元素转换为 int 以进行进一步计算时出现 ValueError