當前位置:首頁 » 編程語言 » 如何將C語言重構成python
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

如何將C語言重構成python

發布時間: 2023-01-02 12:29:49

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