让我解释.假设我想向只讲西班牙语的人教Python.如您所知,在大多数编程语言中,所有关键字都是英文的.创建一个程序可以找到给定源代码中的所有关键字并进行翻译,这有多复杂?我是否需要使用解析器和东西,或者几个正则表达式和字符串函数是否足够?
如果它依赖于源编程语言,那么Python和Javascript将是最重要的.
我的意思是"它有多复杂"是否足以拥有一个关键字列表,并解析源代码以找到不在引号中的关键字?或者是否有足够的语法怪异,需要更复杂的东西?
Python手册说您可以在C和C++中为Python创建模块.使用C++时,您可以利用类和模板之类的东西吗?它不会与其他库和解释器产生不兼容性吗?
我有几个Python函数,我用它来使Pygame的游戏开发更容易.我把它们放在我的Python路径中名为helper.py的文件中,所以我可以从我制作的任何游戏中导入它们.我想,作为一个学习Python扩展的练习,将这个模块转换为C.我的第一个问题是我需要使用Pygame中的函数,我不确定这是否可行.Pygame安装了一些头文件,但它们似乎没有C函数的Python版本.也许我错过了什么.
我怎么解决这个问题?作为一种解决方法,该函数当前接受一个函数参数并调用它,但它不是理想的解决方案.
顺便说一句,使用Windows XP,Python 2.6和Pygame 1.9.1.
当我在打字时,如何显示功能参数帮助框?通过查看像这样的问题,似乎我必须要点击Ctrl+ SPACE或Ctrl+ Shift+ SPACE,但这些似乎都不起作用.键入时会显示参数(,但随后它们会消失.
BTW,一个相关的问题:似乎当我输入类的名称时,不会显示参数框.我必须.__init__在类名后面输入以查看帮助框.这是这样还是我错过了什么?
我需要将文本文件的内容复制到动态分配的字符数组中.
我的问题是获取文件内容的大小; 谷歌揭示我需要使用fseek和ftell,但为此文件显然需要以二进制模式打开,这只会给垃圾.
编辑:我尝试在文本模式下打开,但我得到奇怪的数字.这是代码(为了清楚起见,我省略了简单的错误检查):
long f_size;
char* code;
size_t code_s, result;
FILE* fp = fopen(argv[0], "r");
fseek(fp, 0, SEEK_END);
f_size = ftell(fp); /* This returns 29696, but file is 85 bytes */
fseek(fp, 0, SEEK_SET);
code_s = sizeof(char) * f_size;
code = malloc(code_s);
result = fread(code, 1, f_size, fp); /* This returns 1045, it should be the same as f_size */
Run Code Online (Sandbox Code Playgroud) 假设我有这个(C++或C)代码:
vector<int> my_vector;
for (int i = 0; i < my_vector.size(); i++) {
my_vector[i] = 0;
}
Run Code Online (Sandbox Code Playgroud)
我不在乎它是否做得对.重要的部分是for循环声明.编译器为此提供了有符号/无符号的不匹配,因为size()返回unsigned int而不是signed符号.i改为无签名有多重要?我将循环计数器声称为习惯中的int,但如果这是一个潜在的错误,我会强迫自己摆脱这种习惯.
似乎每次我调用一个返回PyObject*的函数时,我都要添加四行错误检查.例:
py_fullname = PyObject_CallMethod(os, "path.join", "ss", folder, filename);
if (!py_fullname) {
Py_DECREF(pygame);
Py_DECREF(os);
return NULL;
}
image = PyObject_CallMethodObjArgs(pygame, "image.load", py_fullname, NULL);
Py_DECREF(py_fullname);
if (!image) {
Py_DECREF(pygame);
Py_DECREF(os);
return NULL;
}
image = PyObject_CallMethodObjArgs(image, "convert", NULL);
if (!image) {
Py_DECREF(pygame);
Py_DECREF(os);
return NULL;
}
Run Code Online (Sandbox Code Playgroud)
我错过了什么吗?有一个更好的方法吗?这有一个额外的问题,我可能会忘记我应该的所有东西Py_DECREF().
我在编写一个使用线程的简单Pygame应用程序时遇到了一些麻烦.请记住,这是我写过的第一个多线程代码.
这是情况.我正在写一个简单的应用程序,它会在屏幕上绘制一些时髦的线条.我的问题是,当我绘制线条时,应用程序无法处理输入,因此我不能(例如)关闭窗口直到线条完成.这是我的原始代码:
import time
import pygame
from pygame.locals import *
SIZE = 800
def main():
screen = pygame.display.set_mode((SIZE, SIZE))
for interval in xrange(50, 1, -5):
screen.fill((0, 0, 0))
for i in xrange(0, SIZE, interval):
pygame.draw.aaline(screen, (255, 255, 255), (i+interval, 0), (0, SIZE-i))
pygame.draw.aaline(screen, (255, 255, 255), (i, 0), (SIZE, i+interval))
pygame.draw.aaline(screen, (255, 255, 255), (SIZE, i), (SIZE-i-interval, SIZE))
pygame.draw.aaline(screen, (255, 255, 255), (SIZE-i, SIZE), (0, SIZE-i-interval))
pygame.display.update()
time.sleep(0.03)
time.sleep(3)
while True:
for evt in pygame.event.get():
if evt.type == QUIT:
return …Run Code Online (Sandbox Code Playgroud) C程序设计语言的练习1-22 如下:
编写一个程序,在输入的第n列之前出现的最后一个非空白字符之后,将长输入行"折叠"成两条或更多条较短的行.确保您的程序在非常长的行中执行智能操作,并且如果指定列之前没有空格或制表符.
这是代码:
#include <ctype.h>
#include <stdio.h>
#define MAXLINE 500
#define FOLD_LENGTH 15
/* _getline: read a line into s, return length */
size_t _getline(char s[], int lim)
{
int c;
size_t i;
for (i=0; i < lim-1 && (c=getchar())!=EOF && c!='\n'; ++i)
s[i] = c;
if (c == '\n') {
s[i] = c;
++i;
}
s[i] = '\0';
return i;
}
int main()
{
int c;
char line[MAXLINE];
char temp;
unsigned last_space_idx = 0, i, …Run Code Online (Sandbox Code Playgroud) 像这样的东西:
/[abcd]/[efgh]/
Run Code Online (Sandbox Code Playgroud)
这个想法a将被替换为e,bwith f,cwith g等等.
理想情况下,这应该与语言无关.如果那是不可能的,我有一个替代解决方案(因为这个正则表达式是由一些代码生成的,我可以为每个可能的替换创建一个).