1. 怎么把这个c语言转换成python
C语言不能转化为python,它们之间没有之间联系,只能说算法是可以转化实现的。
2. 毕设做一个软件,要求算法效率的,主要的计算部分想用C语言,界面用python,请问这样可以么
python可以很简单的调用C语言中的函数,需要把C语言中的函数做成动态链接库。
界面用python不影响效率,毕竟不是游戏,一般界面不会太耗CPU。
Python开发效率高,运行效率低。而c/c++恰恰相反。因此在python脚本中调用c/c++的库,对python进行扩展,是很有必要的。使用python api,http://www.python.org/doc/,需要安装python-dev。
test.cpp文件如下
[cpp]view plain
#include <python2.6/Python.h> //包含python的头文件
// 1 c/cpp中的函数
int my_c_function(constchar *arg) {
int n = system(arg);
return n;
}
// 2 python 包装
static PyObject * wrap_my_c_fun(PyObject *self, PyObject *args) {
constchar * command;
int n;
if (!PyArg_ParseTuple(args, "s", &command))//这句是把python的变量args转换成c的变量command
return NULL;
n = my_c_function(command);//调用c的函数
return Py_BuildValue("i", n);//把c的返回值n转换成python的对象
}
// 3 方法列表
static PyMethodDef MyCppMethods[] = {
//MyCppFun1是python中注册的函数名,wrap_my_c_fun是函数指针
{ "MyCppFun1", wrap_my_c_fun, METH_VARARGS, "Execute a shell command." },
{ NULL, NULL, 0, NULL }
};
// 4 模块初始化方法
PyMODINIT_FUNC initMyCppMole(void) {
//初始模块,把MyCppMethods初始到MyCppMole中
PyObject *m = Py_InitMole("MyCppMole", MyCppMethods);
if (m == NULL)
return;
}
make:
g++ -shared -fpic test.cpp -o MyCppMole.so
编译完毕后,目录下会有一个MyCppMole.so文件
test.py文件如下
[python]view plain
# -*- coding: utf-8 -*-
import MyCppMole
#导入python的模块(也就是c的模块,注意so文件名是MyCppMole
r = MyCppMole.MyCppFun1("ls -l")
print r
print"OK"
执行
lhb@localhost:~/maplib/clib/pyc/invokec$ python test.py
总计 20
-rwxr-xr-x 1 lhb lhb 45 2010-08-11 17:45 make
-rwxr-xr-x 1 lhb lhb 7361 2010-08-12 10:14 MyCppMole.so
-rw-r--r-- 1 lhb lhb 979 2010-08-11 17:45 test.cpp
-rw-r--r-- 1 lhb lhb 181 2010-08-11 17:45 test.py
0
OK
3. 求大神把下面的C语言代码转换成Python代码
#四色问题可以用这个嘛 记住解决问题的重点是算法,不是语言哦
#-*-coding:cp936-*-
defFourColorLabel(GuanXiJuZheng):
Num=len(GuanXiJuZheng)
Color=[-1foriinrange(Num)]
n=m=1
#染色第一个区域,先设置为1
whilem<=Num:
whilen<=4andm<=Num:
flag=True
forkinrange(m-1):
ifGuanXiJuZheng[m-1][k]==1andColor[k]==n:
flag=False#染色有冲突
n+=1
break
ifflag:
Color[m-1]=n;
m+=1
n=1
ifn>4:#超出标记范围必须回退
m-=1
n=Color[m-1]+1
returnColor
GuanXiJuZheng=[
[0,1,1,1,0,0,0],
[1,0,0,0,1,0,0],
[1,0,0,1,0,1,0],
[1,0,1,0,1,1,1],
[0,1,0,1,0,0,1],
[0,0,1,1,0,0,1],
[0,0,0,1,1,1,0]
]
foriinFourColorLabel(GuanXiJuZheng):
printi
4. C语言怎么转化成python
score={'a':5,'b':4,'c':3,'d':2,'e':1}
N=40
sum=0
foriinrange(N):
answer=raw_input("请输入你第%d题的选择(a-e):"%(i+1))
answer=answer.lower()
whileanswernotinscore:
answer=raw_input("请输入正确的选项!:")
answer=answer.lower()
sum+=score[answer]
print("你的总分为%d"%sum)
ifsum>=168:
print("A")
elif136<sum<168:
print("B")
elif104<sum<=136:
print("C")
elif72<sum<=104:
print("D")
else:
print("E")
这个python 程序肯定 和上面的C结果不一样
else if (136<sum<168) 在C中肯定为真,所以上面的C程序只会打印 A或者 B,CDE任何情况下都不会打印 ,Pytyhon会完全打印
直接说出程序要求
5. c语言%Y+%m-%d*%H=%M#%S$是什么意思怎么转成python写法
printf("$%6.2f\n",26.27);输出的是 $26.27 换行。printf("")中""里面除了%d,%f,%lf..这些外其他的都按原样输出。比如 printf("Hello World !");输出的就是Hello World !" printf("$#@&*");输出的是$#@&*。
6是输出的距离.2是保留小数点后2位小数。如果把2改为n就是保留n位小数.适用于fioat和double的输出类型
形如 %m.n 的格式,意思是输出值的宽度为m,输出值的小数精度为n。
比如
double a=1234.4321;
printf("a=%6.2d",a);
则输出的是:a= 1234.43;
6. python与c语言的关系
1、语言类型不同
Python是一种动态类型语言,又是强类型语言;C语言是静态类型语言,在编译期间就确定数据类型的语言;
2、内存管理不同
Python使用自动垃圾收集器进行内存管理;C语言中程序员必须自己进行内存管理;
3、对象机制不同
Python所有的数据,都是由对象或者对象之间的关系表示的,函数是对象,字符串是对象,每个东西都是对象的概念;C语言中没有对象这个概念,只有数据的表示。
4、运行效率不同
Python有一个GIL锁,导致其对多线程支持不够好,运行速度比较慢;C语言比较快,是很好的底层语言,运行效率上优于Python。
5、变量类型不同
Python有六个标准的数据类型,包含Number数字、String字符串、List列表、Tuple元祖、Sets集合、Dictionary字典;数字类型有四种,包含:整数、布尔型、浮点数和复数。C语言也分为四大类,其中包含基本类型、枚举类型、void的类型、派生类型,基本类型包含整数类型、浮点类型。
6、函数库的使用方法不同
C语言中使用库函数,需要引入头文件用include引入;Python中需要引入别的模块或者函数时需要用import引入。
7. 在mac上怎么用c语言和python
c语言
至于
Xcode
怎么用,用搜索引擎查一下“Xcode
如何编写
C
语言”结果有一大堆,连某度这种不靠谱的搜索引擎都能找到结果。
如果你还是用不明白的话,Code::Blocks
有
OS
X
的版本。但是我记得它不支持
Retina
display,如果你觉得可以忍受显示效果的话也可以去用。
我不是学软件或者计算机专业的,只是大一的时候学过
C
语言这门课程,能帮你的就这么些。
python
1.打开终端。
2.输入python回车后进入解释器。
3.输入语句练习。
新手推荐A
byte
of
python.
8. 如何用Python封装C语言的字符串处理函数
在C语言中,字符串处理是每天都要面对的问题。我们都知道C语言中其实并没有一种原生的字符串类型,‘字符串’在C语言里只是一种特殊的以''结尾的字符数组。因此,如何将C语言与更高层次的Python语言在‘字符串’处理这个问题上对接是一个有难度的问题。所幸有swig这种强大的工具。
如何封装一个函数,它修改参数字符串的内容
假如有这样一个C语言的函数,
<!-- lang: cpp -->
void FillZero(char* pc,size_t * piLen)
{
size_t i=0;
while(i++<*piLen/2 )
*pc++ = '0';
*pc = 0;
*piLen = i+1;
}
这个函数的功能是把字符串变成n个0。不过我们更关注函数的形式。这样的函数,表面上看char* pc是函数的参数,可是实际上它才是函数的返回值和执行的结果。piLen这个参数既是pc的最大长度,也是新的字符串的长度。我们直接用python封装,看看运行结果。
Type "help", "right", "credits" or "license" for more information.
>>> import cchar
>>> s='123456'
>>> cchar.FillZero(s,6)
Traceback (most recent call last):
File "<stdin>", line 1, in <mole>
TypeError: in method 'FillZero', argument 2 of type 'size_t *'
结果差强人意,不是我们想要得到的结果。函数的第二个参数为size_t* 我们很难用python来表示,而且python中也不存在既是输入,也是输出的参数。
swig有一个标准库,其中有一个cstring.i文件就是用来解决C语言字符串类型的问题。
我们在.i文件中加入这样几行
<!-- lang: cpp -->
%include "cstring.i"
%cstring_output_withsize(char* pc,size_t* pi)
void FillZero(char* pc, size_t* pi);
然后运行看结果
Type "help", "right", "credits" or "license" for more information.
>>> import cchar
>>> cchar.FillZero(10)
'00000\x00'
>>> s=cchar.FillZero(10)
>>> print s
00000
我们看函数的变化。首先在python里, FillZero变成了只有一个参数的函数。然后函数的返回值变成了一个字符串。其实cstring_output_size其实是一个宏,通过这个宏的定义改变了函数的形式,直接在Python中得到我们想要的结果。
其实类似cstring_output_size的宏还有好几个,我列举一下:
cstring_output_allocate(char *s,free($1));
第一个参数是指向字符串地址的指针,第二个参数为释放空间的方法。
大家考虑这一下这样的函数:
void foo(char* & s)
{
s = (char*)malloc(10);
memcpy(s,"123456789",9);
}
s这个参数表面上看是输入,实际上是函数真正的输出。 函数中真正改变的东西是char&s指向的字符串的值。而且char&这个类型,
python或者其他脚本语言里应该都没有对应的类型。那么我们用cstring_output_allocate将这个函数转换成另外一个形式的python或者其他脚本语言的函数。转换后的函数其实是这样的,以python为例str
foo()。
<!-- lang: cpp -->
%mole a
%include "cstring.i"
%{
void foo(char*& s);
%}
%cstring_output_allocate(char *&s, free(*$1));
void foo(char *&s);
在python中的调用:
<!-- lang: python -->
>>> import a
>>> a.foo()
'123456789'
>>>
cstring_output_maxsize(char *path, int maxpath);
第一个参数也是可以改变的字符串首地址,第二个参数为字符串的最大长度。在Python中调用的时候,只有maxpath这个参数,返回字符串。
cstring_output_allocate(char *s, free($1));
第一个参数为指向字符串首地址的指针,第二个参数为释放指针的方法。这个宏主要是封装一种直接在函数内部malloc空间的函数。在Python中调用时没有参数,直接返回字符串。
cstring_output_allocate_size(char *s, int slen, free(*$1));
这个相当于前面两个函数的组合。在函数内部malloc空间,然后将字符串长度通过slen返回。其实在调用的时候非常简单,没有参数,直接返回字符串。
如何处理c++的std::string
std::string是C++标准类库STL中常见的类。在平时工作中大家肯定是没少用。在python中如何封装std::string? swig提供了标准库
例如函数:
<!-- lang: cpp -->
string Repeat(const string& s)
{
return s+s;
}
只要在swig中加入这样几行:
<!-- lang: cpp -->
%include "std_string.i"
using namespace std;
string Repeat(const string& s);
运行结果:
Python 2.6.6 (r266:84292, Dec 27 2010, 00:02:40)
[GCC 4.4.5] on linux2
Type "help", "right", "credits" or "license" for more information.
>>> import cchar
>>> cchar.Repeat('123')
'123123'
使用起来很方便,但需要注意的是,假如函数的参数的内容是可以被修改,就不能用这种方式封装。
例如:
<!-- lang: cpp -->
void repeat(string s)
{
s+=s;
}
这样的函数直接使用 'std_string.i' 就是无效的。遇到这种函数,只能用C语言封装成 void repeat(chars, int maxsize), 再用swig调用 'cstring_output_withsize' 这个宏再封装一次了。
9. 这个c语言怎么转化为Python
按照你的要求把C++程序转为Python程序的Python程序如下
n=1
i=1
m=int(input("输入大于1的正整数m:"))
while i<=m:
n+=1
i=i*n
print("输出n的值:{} ".format(n))
源代码(注意源代码的缩进)
10. 将一段c语言程序转变为python程序,急!!!
按照你的要求,把C语言程序转换成Python3语言的程序如下
#!/usr/bin/python
#-*-coding:UTF-8-*-
defprintMatrix(n):
arr=[[0foriinrange(20)]foriinrange(20)]
curNum=1
forindexinrange(1,n+1):
i=0
j=index-1
forkinrange(1,index+1):
ifindex%2==1:
arr[i][j]=curNum
curNum=curNum+1
else:
arr[j][i]=curNum
curNum=curNum+1
i=i+1
j=j-1
forindexinrange(n+1,2*n):
i=index-n
j=n-1
forkinrange(1,2*n-index+1):
ifindex%2==1:
arr[i][j]=curNum
curNum=curNum+1
else:
arr[j][i]=curNum
curNum=curNum+1
i=i+1
j=j-1
print("Thematrixisasfollow:");
foriinrange(0,n):
forjinrange(0,n):
print(arr[i][j]," ",end='')
print("")
printMatrix(4)
运行结果
Thematrixisasfollow:
1 3 4 10
2 5 9 11
6 8 12 15
7 13 14 16