python输出问题

code048 2011-11-01 02:53:28
有很多条数据,只在一行一条一条的输出。就是比如第一个输出1.那么我要输出2的时候把1清理掉,在1的位置上写上二,以此类推。输出都是在一行不断的闪烁。不使用清屏函数,大家帮帮忙谢谢了。
...全文
151 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
code048 2011-11-02
  • 打赏
  • 举报
回复
10楼测试正确了.对超过屏幕的可以解释一下原理吗?虽然不长见,但是有的还是会遇到.也想一并解决了 .方便的话给个思路...谢谢了
tinym87 2011-11-02
  • 打赏
  • 举报
回复
对于原文本的行超出屏幕宽度的情况(这种情况貌似不大常见),也是可以在输出前对文本进行调整,以适应屏幕宽度,但实现起来有点麻烦,但肯定是可以实现的。
tinym87 2011-11-02
  • 打赏
  • 举报
回复
实现代码:
#coding=utf-8

import time

if __name__=='__main__':
# 屏幕的最大长度
maxLen = 60
for line in open("input.txt"):
# 去掉换行符
line = line.rstrip()
lineLen = len(line)
if lineLen<maxLen:
line = line + (maxLen-lineLen)*' '
print "%s\r"%(line),
time.sleep(0.2)
tinym87 2011-11-02
  • 打赏
  • 举报
回复
对于每行数据长度不一样的情况,确实会有残留,但对于屏幕每行的最大的长度是固定的,你可以在输出每行之前,先测一下这一行的长度,对长度比较短的数据,后面用空白字符进行填充,而达到屏幕的最大长度,这样就不会有残留。
soloopin 2011-11-02
  • 打赏
  • 举报
回复

import sys
import time

list=[] ##list赋值为你想要的列表(数值型)
for i in list:
print("%-10d\r" %(i), end='')
time.sleep(1)


对了。 如果单纯的使用\r的话会把光标跳到该行的第一个位置。但是,并没有清除数据。
例如:第一个数是100,第二个数是99.那么屏幕上的显示将会是100,990。
可以设置一下显示的长度。 这里使用了 %-10d 将输出显示为左靠齐的固定长度。
基本可以避免上面的情况的产生。但是如果单个数据还是太长的话,还是会出现那种情况。
code048 2011-11-02
  • 打赏
  • 举报
回复
恩.一行一行的虽然比较清楚.但是我还是想实现这个功能.大家能的话,可以帮提提意见.
iambic 2011-11-02
  • 打赏
  • 举报
回复
前面的那个\r还有不少问题。比如说如果第二行的数据比第一行长,那第一行的数据就有残留。再比如数据比较长,超出屏幕宽度,\r就不怎么管用了。
iambic 2011-11-02
  • 打赏
  • 举报
回复
建议你还是一行行输出比较好。自然,省事。
widlisyx 2011-11-02
  • 打赏
  • 举报
回复
跟着楼主一起学习,等待正解
code048 2011-11-02
  • 打赏
  • 举报
回复
谢谢了,学习了很多.
tinym87 2011-11-02
  • 打赏
  • 举报
回复
上面的代码贴错了,倒数第二行最后少了个逗号
#coding=utf-8

import time

if __name__=='__main__':
# 屏幕的最大长度
maxLen = 60
delay = 1
for line in open("input.txt"):
# 去掉换行符
line = line.rstrip()
lineLen = len(line)
if lineLen<=maxLen:
line = line + (maxLen-lineLen)*' '
print "%s\r"%(line),
time.sleep(delay)
else:
# 对于超出宽屏宽度的行,进行分步输出
for i in range(0, lineLen, maxLen):
print "%s\r"%(line[i:i+maxLen]),
time.sleep(delay)
tinym87 2011-11-02
  • 打赏
  • 举报
回复
简单的实现思路:对于超出屏幕宽度的行,进行切割,分开输出。
#coding=utf-8

import time

if __name__=='__main__':
# 屏幕的最大长度
maxLen = 60
delay = 1
for line in open("input.txt"):
# 去掉换行符
line = line.rstrip()
lineLen = len(line)
if lineLen<=maxLen:
line = line + (maxLen-lineLen)*' '
print "%s\r"%(line),
time.sleep(delay)
else:
# 对于超出宽屏宽度的行,进行分步输出
for i in range(0, lineLen, maxLen):
print "%s\r"%(line[i:i+maxLen])
time.sleep(delay)


这种实现方式有时也不大好,拿下面的文本来说吧,
Notifications API for adding push lightweight notifications to your applications. This keeps the attention of the user on the applications, and optimizes the application bandwidth and battery use
Qt Mobility API for building a variety of applications and services that are mobile capable or familiar to mobile users, irrespective of whether the platform is mobile or not

Symbian C++ for Qt APIs that are included in Qt SDK for your convenience. However, we recommend that you use the Mobility API functions whenever you can, and only use the Symbian C++ APIs to implement any missing functions (only available on Windows)
Utility applications, such as Nokia Energy Profiler and Nokia Performance Manager, example applications, and demos, that you can install on Symbian devices (only available on Windows)

你原本是想battery use后面紧接Qt Mobility ...的,也就是原本是想batter use 与 Qt Mo..是在同一行输出的,但是确分开了。
比较好的一点的实现就是,对整个原文本进行重新分行,使每一行都小于等于屏幕宽度,拿上面的文本来说,这个文本有两段,第一段两行、第二段三行,先对整个文本进行分段,然后再分别对每段的文本进行行合并,然后重新分行,使第一行的宽度都在屏蔽宽度范围内。
确实是有点麻烦,呵呵~~
tinym87 2011-11-01
  • 打赏
  • 举报
回复
print 也可以,只是一定要记得要语句后加','号
import time

if __name__=='__main__':
for i in range(100):
print "%02d\r"%(i),
time.sleep(0.2)
tinym87 2011-11-01
  • 打赏
  • 举报
回复
import sys
import time

if __name__=='__main__':
for i in range(100):
time.sleep(0.2)
sys.stdout.write((u"已完成: %02d%% \r"%(i)).encode("gbk"))
livesguan 2011-11-01
  • 打赏
  • 举报
回复

a = [1, 2, 3]
while a:
v = a.pop(0)
print v

37,720

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧