如何向python控制台提供输入并以编程方式验证输出?
对于此示例程序如何向python控制台提供输入并以编程方式验证输出?,python,automation,Python,Automation,对于此示例程序 N = int(raw_input()); n = 0; sum = 0; while n<N: sum += int(raw_input()); n+=1; print sum; N=int(原始输入()); n=0; 总和=0; 通常情况下,您可能希望以不同的方式构造代码,可能是根据Blender在其评论中的建议。但是,要回答您的问题,您可以使用模块编写一个脚本来调用此脚本,并将输出与预期值进行比较 特别是查看check\u call方法。在
N = int(raw_input());
n = 0;
sum = 0;
while n<N:
sum += int(raw_input());
n+=1;
print sum;
N=int(原始输入());
n=0;
总和=0;
通常情况下,您可能希望以不同的方式构造代码,可能是根据Blender在其评论中的建议。但是,要回答您的问题,您可以使用模块编写一个脚本来调用此脚本,并将输出与预期值进行比较
特别是查看check\u call
方法。在Unix shell中,这可以通过以下方式实现:
$ python program.py < in > out # Takes input from in and treats it as stdin.
# Your output goes to the out file.
$ diff -w out out_corr # Validate with a correct output set
我编写了一个测试框架(),可用于您的问题:
from hamcrest import contains_string
from prego import TestCase, Task
class SampleTests(TestCase):
def test_output(self):
task = Task()
cmd = task.command('echo your_input | ./your_app.py')
task.assert_that(cmd.stdout.content,
contains_string('your_expected_output'))
当然,PREGO提供了更多的特征。 < P>拿起分离思想,我会考虑如下:
def input_ints():
while True:
yield int(raw_input())
def sum_up(it, N=None):
sum = 0
for n, value in enumerate(it):
sum += int(raw_input());
if N is not None and n >= N: break
return sum
打印金额
要使用它,你可以
inp = input_ints()
N = inp.next()
print sum_up(inp, N)
要测试它,您可以执行以下操作
inp = (1, 2, 3, 4, 5)
assert_equal(sum_up(inp), 15)
将其转换为函数并用参数替换raw\u input()
s。另外,不要在每行末尾加分号。Python不需要它们。@我正在解决的Blender需要提供大量输入。我正在自动化那个部分。基本上,我想模仿interviewstreet对提交的程序所做的操作。以及,;旧习难改:)您可以创建第二个函数,使用raw\u input()
获取用户输入并将其输入到原始函数中。如果你把逻辑和用户交互分开会更容易。你能提供一个完整的例子吗?脚本,它为自身或其他脚本提供多行输入?
inp = (1, 2, 3, 4, 5)
assert_equal(sum_up(inp), 15)