python转c语言
python不像C语言,有{ }
缩进很重要的,你要贴出有缩进的代码才行
❷ 如何用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' 这个宏再封装一次了。
❸ 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会完全打印
直接说出程序要求
❹ 当python取代C语言时电子工程师还能顺利毕业吗
看你以后的取向了,C与C++两者属于博大精深型,学好了就是高手,入回门其他语言很容易答,但是很难学。java属于大众型,入门门槛低,而且学了以后应用范围很广,但是几十年后谁也不敢打包票,而且转型其他语言,特别是过程性语言不太容易。什么语言无所谓,关键是要好好学,你自己抉择吧,谁也帮不了你!
❺ 将一段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
❻ c语言转python急急急
importrandom
defplayer(tol):
inp=100
whileinp>2orinp<1orinp+tol>50:
inp=int(raw_input("Pleasecount(1or2):"))
returninp+tol
defcomputer(tol):
iftol+1==50or(tol+1)%3==0:
tol+=1
eliftol+2==50or(tol+2)%3==0:
tol+=2
else:
tol+=int(random.random()*2)+1
print("Computercount:{}".format(tol))
returntol
defmain():
tol=0
print("********GrabFifty********")
print("GameBegin")
whose_turn=player
ifrandom.random>.5:
whose_turn=computer
whiletol!=50:
tol=whose_turn(tol)
iftol==50:
ifwhose_turn==player:
print("YouWin!")
else:
print("YouLose!")
break
whose_turn=playerifwhose_turn==computerelsecomputer
print("********GameOver********")
if__name__=="__main__":
main()
❼ 求帮忙把python翻译成c语言
Python的
简单
的Python的特点是一种语言代表了一种简单的意识形态。阅读一个良好的Python程序就感觉像是在读英语,但英语很严格!这种伪代码的Python的本质是它最大的优势之一。它可以让你专注于解决问题,而不是语言本身。
了解
正如你所看到的,Python是非常容易使用。正如前面提到的,Python有一个很简单的语法。 - 免费,开源
Python是FLOSS(自由/开源软件)。简单地说,你可以自由地发布这个软件的拷贝,阅读它的源代码,它,把它的一部分用于新的自由软件。 FLOSS是一个以社区为基础的知识共享的概念。这就是为什么Python是那么好,原因之一 - 它是一组想看看是谁创造并不断完善更好的Python。
高级语言
当您使用Python编程语言,你需要考虑如何管理底层细节,如程序使用的一类内存。点击看详细可移植性由于它的开源本质,Python已经被移植在许多平台上(经过改动使它能够在不同的平台上工作)。如果你小心地避免使用依赖于系统的特性,那么你所有的Python程序无需任何这些平台上运行。
这些平台,包括Linux,Windows,FreeBSD的,Macintosh电脑时,Solaris,OS / 2,Amiga上,AROS,AS / 400,BeOS的,OS / 390和z / OS,Palm操作系统,QNX,VMS,Psion公司,的Acom RISC OS,VxWorks的游戏机,夏普的Zaurus,Windows CE和PocketPC的连!
解释性
这需要一些解释。
编译语言,如C或C ++程序可以写入到从源文件(即C或C ++)转换到您的计算机使用的语言(二进制代码,即0和1)。通过这个过程中,编译器和各种标志和选项。当你运行你的程序,链接器/加载器软件从硬盘复制你的程序到内存并运行。
的Python,程序不需要编译成二进制代码。可以直接从源代码运行程序。在计算机内部,Python解释器把源代码转换成中间形式称为字节码,然后把它翻译成机器语言的计算机并运行。事实上,因为你不再需要担心如何编译程序,如何保证正确的连接转载图书馆等,所有这些都使得使用Python更加容易。因为你只需要你的Python程序拷贝到另一台计算机,它可以工作,这也使得你的Python程序更加便携。点击看详细的Python支持面向对象的面向过程的编程也支持面向对象的编程。在这个过程中,面向对象语言中,程序是建立了由过程或仅仅是可重复使用的代码的功能。在面向对象的语言中,程序是由累积数据和功能的对象的组合。和Java相比其他主要的语言如C ++,Python有实现面向对象编程一个非常强大和简单的方法。
可扩展性
如果您需要一段关键代码运行得更快或者希望某些算法不公开,你可以把你写在C或C计划的一部分++,然后在你的Python程序来使用它们。
嵌入
可以嵌入的Python你的C / C ++程序中,让你的程序提供脚本功能。
丰富的库
Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式,文档生成,单元测试,线程,数据库,Web浏览器,CGI,FTP,电子邮件,XML,XML-RPC,HTML,WAV文件,密码,GUI(图形用户界面),Tk和其他系统相关的操作。请记住,只要是Python的安装,所有这些功能都可用。这被称为Python的“功能齐全”的概念。
除了标准库,还有许多其他高质量的库,如wxPython的,扭曲和Python图像库等等。
❽ 哪位大神能把这段Python代码转为C语言代码
ipython作为一个非常有用的python shell,在linux下安装非常方便,但是在win下安装还有点麻烦,下面就是详细的安装步骤。 工具/原料 python ez_setup.py pyreadline ipython 方法/步骤 1 python安装完成以后,然后需要安装ez_setup.py
❾ 如何将python编译成C代码
好像只有pypy项目的rpython语言(python的一个子集)可以转成c,几乎没有实际用途。
❿ 有没有能把python代码转换为c语言代码的工具
C++兼容C语言,但C语言不可能兼容C++
所以,C++代码直接转是转不了C的。
只能从逻辑上,回对C++的许多语答法进行代码上的重新实现。
比如将对象转换为结构体,将对象封装的函数修改为独立函数,增加对象参数。
将重载去掉,而是根据需要调用非重载的不同名的函数。
总之来说,硬要将C++转为C实现的话,那代码重写的工作是避免不了的。