【问题标题】:How to calculate (using a program) a column of sums or to test inequalities?如何计算(使用程序)一列总和或测试不等式?
【发布时间】:2012-05-11 15:16:49
【问题描述】:

每个表达式都在单独的行上。 给定

34-2
34-5
34-3

我正在寻找

34-2=28
34-5=29
34-3=31

或者,这也会有帮助: 给定:

34-2=5
34-5<=34
34-3=31

我正在寻找

!   34-2=5
    34-5<=34
    34-3=31

在哪里!是一些表明不平等或平等是错误的迹象。我正在寻找可以处理文本文件的东西。

【问题讨论】:

  • 导入电子表格并构建适当的宏对您不起作用?
  • 您能否更具体地说明要构造什么宏?
  • 这更像是一道编程题,而不是一道数学题。任何具有eval 函数的编程语言(例如 Python、Perl、MATLAB)都可以轻松地做到这一点。例如,如果输入文件是 so.txt,那么在 MATLAB 中我可以写 cellfun(@(x)[x '=' num2str(eval(x))],textread('so.txt','%[^\n]'),'UniformOutput',false) 并得到结果:ans = '34-2=32' '23+4=27' '45-9=36',然后我可以将其写入文件。

标签: inequality math


【解决方案1】:

Chris Taylor 完全正确,这是它在 python 中给出的:

>>> s="""34-2
34-5
34-3
34-2==5
34-5<=34
34-3==31
"""
>>> for line in s.split('\n'):
    # Test line is not empty
    if line:
        operators = ('!=', '<=', '>=', '==', '<', '>')
        op_found = False
        # Stop at 1st operator found
        for op in operators:
            if op in line:
                op_found = True
                if not eval(line):
                    print '!', line
                else:
                    print '+', line
                break
        # If no operator found, we assume we want the result of the operation
        if not op_found:
            print '{0}={1}'.format(line, eval(line))


34-2=32
34-5=29
34-3=31
! 34-2==5
+ 34-5<=34
+ 34-3==31
>>> 

几点说明:

  • 我使用== 而不是=,因为这就是python 中的相等方式(= 仅用于赋值)
  • 我还使用了+ 来表明断言对于可读性而言是正确的
  • 我使用了字符串s,但您当然可以使用文件(您可以将for line in s.split('\n'): 替换为for line in open(file_path):
  • 请记住,每次使用 eval 时,您都可能被黑客入侵(请注意文件中的行...)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    • 1970-01-01
    • 1970-01-01
    • 2018-08-07
    • 1970-01-01
    • 2016-10-09
    相关资源
    最近更新 更多