
本文旨在讲解如何在 Jupyter Notebook 中直接读取其他单元格的输入数据,从而实现类似在线编程平台的测试用例功能。我们将探讨如何利用 IPython 提供的 `In` 和 `Out` 对象,访问已执行单元格的代码和输出结果,并提供相应的示例代码和使用注意事项。## 利用 IPython 的 `In` 和 `Out` 对象Jupyter Notebook 基于 IPython 内核,IPython 提供了两个非常有用的对象:`In` 和 `Out`。这两个对象允许我们访问已执行单元格的代码和输出结果。* `In`: 是一个列表(list),存储了所有已执行的代码单元格的内容,以字符串形式保存,并按照执行顺序排列。`In[1]` 存储的是第一个执行的代码单元格的内容。* `Out`: 是一个字典(dict),以单元格的执行序号为键(key),以该单元格的输出结果为值(value)。### 访问已执行代码我们可以使用 `In` 对象来访问已执行的代码。例如,要访问第二个执行的单元格的代码,可以使用 `In[2]`。“`pythontype(In)
输出:
list
访问单元格输出
我们可以使用 Out 对象来访问单元格的输出结果。例如,要访问第二个执行的单元格的输出结果,可以使用 Out[2]。
type(Out)
输出:
dict
示例:模拟输入和输出
假设我们有一个代码单元格(假设是单元格 3),其中包含以下 Python 代码,用于读取两个数字并打印它们的和:
x = int(input())y = int(input())print(x + y)
我们想在另一个单元格中提供输入数据,并在另一个单元格中验证输出结果。 虽然我们无法直接将输入数据“注入”到单元格 3 的 input() 函数中,但我们可以通过其他方式模拟这个过程。
一种方法是,将输入数据保存在一个字符串中,然后修改单元格 3 的代码,使其从该字符串中读取数据。但是这种方法需要修改原始代码,不适用于所有情况。
另一种方法是使用 %%capture 魔术命令捕获单元格的输出,然后比较捕获的输出和预期结果。
%%capture outputx = int(input())y = int(input())print(x + y)
然后,在另一个单元格中,我们可以提供输入数据:
# 模拟输入import ioimport sys# 将输入重定向到字符串input_data = "5n6n" # 模拟输入 5 和 6,注意换行符sys.stdin = io.StringIO(input_data)# 运行需要输入的代码%run -i 'your_notebook_name.ipynb' # 替换为你的 notebook 文件名# 恢复标准输入sys.stdin = sys.__stdin__# 打印捕获的输出print(output.stdout)
注意事项:
将 ‘your_notebook_name.ipynb’ 替换为包含需要输入的代码的 Notebook 文件名。input_data 变量中的字符串必须包含换行符 n,以模拟 input() 函数读取每一行输入。这个方法会执行整个 Notebook,如果 Notebook 中有其他需要输入的部分,需要进行相应的处理。
总结
虽然 Jupyter Notebook 本身不直接支持从其他单元格获取输入数据,但我们可以利用 IPython 的 In 和 Out 对象,以及一些技巧,来模拟输入和输出,实现类似在线编程平台的测试用例功能。 %%capture 和重定向标准输入是两种常用的方法,可以根据具体需求选择合适的方法。
以上就是# 如何在 Jupyter Notebook 中直接读取单元格输入数据的详细内容,更多请关注创想鸟其它相关文章!
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 chuangxiangniao@163.com 举报,一经查实,本站将立刻删除。
发布者:程序猿,转转请注明出处:https://www.chuangxiangniao.com/p/1381536.html
微信扫一扫
支付宝扫一扫