Python中的Curses库
我有一段C语言代码,它可以在屏幕的中央画出一条竖线和一条横线,如下所示:
#include<stdio.h>
#define HLINE for(i=0;i<79;i++)\
printf("%c",196);
#define VLINE(X,Y) {\
gotoxy(X,Y);\
printf("%c",179);\
}
int main()
{
int i,j;
clrscr();
gotoxy(1,12);
HLINE
for(y=1;y<25;y++)
VLINE(39,y)
return 0;
}
我正在尝试把它直接转换成Python 2.7.6的版本:
import curses
def HLINE():
for i in range(0,79):
print "%c" % 45
def VLINE(X,Y):
curses.setsyx(Y,X)
print "%c" % 124
curses.setsyx(12,1)
HLINE()
for y in range(1,25):
VLINE(39,y)
我有几个问题:
1. 在setsyx这个函数中,我们需要改变x和y的位置吗?也就是说,gotoxy(1,12)要变成setsyx(12,1)吗?
2. Curses模块只在Unix系统上可用,而在Windows上不行吗?如果是这样,那Windows(Python 2.7.6)该怎么办呢?
3. 为什么在Python中,字符值179和196显示为�,而在C语言中,它们分别是|和-呢?
4. 上面的Python代码是完全正确的吗,还是需要一些改进?
2 个回答
0
- 是的。
- 这个问题和Windows下的Curses替代方案是重复的。
- 你可能在用Python 2.x,所以你的字符是字节,这就和编码有关了。一个数字值的具体含义是由你使用的编码决定的。你在Linux上很可能用的是utf8编码,而在Windows程序中用的可能不是utf8,所以你不能直接比较这些值。在使用curses时,你应该用
curses.ACS_HLINE
和curses.ACS_VLINE
。 - 你不能把
print
和curses
的函数混在一起用,这样会搞乱显示。应该用curses.addch
或者其他类似的函数。
1
- 是的,你需要调整参数的位置。也就是说,
setsyx(y, x)
和gotoxy(x, y)
这两个函数的参数顺序要换一下。 - 有一些Windows的库可以使用。我觉得这里有很多有用的二进制文件:链接
- 这很可能和unicode格式有关。你可以尝试在你的Python文件顶部添加以下一行(在
#!/usr/bin/python
那行之后),这样可以强制Python使用utf-8编码处理字符串对象:# -*- coding: utf-8 -*-
- 你的Python代码看起来还不错,我觉得没必要太担心。