0

我有一个基本代码,它只是简单地循环并在 python 中打印一些数字。我的问题是我需要一种不同的方式来打印我的输出,因为我希望它们在同一行。(标准的python print 语句只是在新行上打印东西)。在做了一些研究之后,我发现我可以做这样的事情

    import random
from sys import stdout
    i= 0
    while i < 100:
        j = 0
        while j < 4:
            k =0
            while k < 4:
                sys.stdout.write(random.randint(0, 9))
                k += 1
            sys.stdout.write(" ") 
            j += 1   
        i += 1
        print "\n" 

当我使用 IDLE 运行它时,这就像魅力一样——python 的 ide,我唯一的问题是,每当我尝试从终端运行它时,它都会抱怨这个

    CallingCard $ python numGenerator.py 
Traceback (most recent call last):
  File "numGenerator.py", line 13, in <module>
    sys.stdout.write(random.randint(0, 9))
NameError: name 'sys' is not defined
CallingCard $ 

想知道从 IDLE 运行它可能是什么问题,仅供参考我使用的是 python 2.7.3

4

3 回答 3

1

您需要导入 sys 模块而不仅仅是 stdout 对象,因为您从 sys 名称中引用它:

import sys

否则,您将不得不修改您的调用,例如:

stdout.write("foo")

或者只是使用带有逗号的打印命令来抑制换行符。

print "foo",
于 2012-12-19T02:39:43.103 回答
1

找到了解决方案。深入思考有时会有所帮助 下面是代码

    i= 0
while i < 100:
    j = 0
    while j < 4:
        k =0
        while k < 4:
            sys.stdout.write("%s" % random.randint(0, 9))
            k += 1  
        sys.stdout.write(" ") 
        j += 1   
    i += 1
    print "\n"
于 2012-12-19T03:26:09.350 回答
0

如果您确实打算打印 100 行每行四个 4 位数字,您可以使用

from sys import stdout
....
stdout.write(str(random.randint(0, 9)))

虽然你真的仍然可以使用 print 并使用类似的东西使它更整洁

import random
from sys import stdout
i= 0
while i < 100:
    for j in range(4):
        print '%04d' % random.randint(0,10000),
   i += 1
   print "\n" 
于 2012-12-19T03:11:01.680 回答