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實現的話,那代碼重寫的工作是避免不了的。