有没有办法访问从未分配过的结果?

时间:2013-07-19 17:01:43

标签: python python-3.x

while int(input("choose a number")) != 5 :

说我想看看输入了什么号码。是否有间接的方式来实现这一目标?

编辑我可能不是很清楚哈哈。 。我知道在调试器中,您可以单步执行并查看输入的数字。是否可能存在记忆破坏或类似事件,让您在事后获得“旧”数据?

5 个答案:

答案 0 :(得分:7)

不 - 你必须分配它......你的例子可以使用双参数样式iter来编写:

for number in iter(lambda: int(input('Choose a number: ')), 5):
    print number # prints it if it wasn't 5...

答案 1 :(得分:2)

做这样的事情。您不必分配,只需组成一个附加功能,并在每次需要时使用它。希望这会有所帮助。

def printAndReturn(x): print(x); return(x)

while printAndReturn(int(input("choose a number"))) != 5 :
      # do your stuff

答案 2 :(得分:1)

不,没有办法以你的方式访问该输入,你必须存储它。这是一个“hello world”级别的例子

val = int(input("choose a number"))
while val != 5 :
  val = int(input("choose a number"))

答案 3 :(得分:1)

半相关的hacky解决方案,从技术上回答你的问题但不是真的:

如果你在交互式python环境(带有>>>的东西)中运行它,你可以这样做

>>>while int(input("choose a number: ")) != 5 :
...  print _
...
choose a number: 2
2
choose a number: 5
>>>

Note that this only works in the interactive environment.

答案 4 :(得分:0)

不简单。如果您尝试从 stdin 读取过去的值,它会给您一个 UnsupportedOperation 异常。您可以使用自定义文件缓冲区对象包装 stdin,该对象可在您需要时读取 stdin 并让您查找。

import sys
from io import StringIO


class InputHistoryBuffer(StringIO):
    def __init__(self):
        super().__init__()
        self._stdin = sys.stdin
        sys.stdin = self

    def readline(self) -> str:
        value = self._stdin.readline()
        self.writelines([value])
        return value


input_history = InputHistoryBuffer()
x = input(":")

sys.stdin.seek(0)
print(sys.stdin.read(len(x)))