一個學過C/C++的老油條,最近學起了Python,不得不說,知識還是老知識,語法也簡單多了,但就是容易搞混。大致總結一下Python與C的區別,以後別張冠李戴啦,嘻嘻。
Part 1.輸入與輸出
輸入任意類型的數據,python用的是input();而C語言對於整型、實型、字符(串)型數據,都可以用scanf。整型/實型scanf(“%d/f”,&x),要加引用符號“&”,而字符串不必加引用符號:scanf("%s",x)。對於(單一)字符型數據,用getchar()輸入;對於字符串,除了scanf輸入,還可以用gets()輸入。
輸出最常用的非print莫屬啦(C語言爲printf),但首先值得注意的是print自帶換行功能,即print('xxx')等效於C語言中的printf("xxx\n"),當然,print中的單引號換成雙引號也可以,但兩種引號不能混搭(一邊單引號,一邊雙引號)。Python中,不想換行怎麼辦?那就加上end=''關鍵字參數,即print('xxx',end='')等效於C語言中的printf("xxx")。對於具體的輸出,與輸入一樣,C語言需要關鍵字%d、%s等等,而Python不必寫這些形態符號,不同形態的輸出也就更方便啦。C語言:printf("output:%d\n",x);Python:print('output:'+str(x));對於整型、實型數據的輸出,如果伴隨字符串,則要使用str()以字符形態輸出,畢竟,字符型數據太傲嬌,不願與整型、實型數據爲伍,後者不得不裝扮成字符型數據呀。
Part 2.邏輯值
C++特有的bool型數據在Python當中會是怎樣的呢?在絕大多數IDE中,C++的bool值是true和false,不能大寫;而在Python中,True與False首字母要大寫,其他邏輯含義不變,True仍代表1或非0整數,False仍爲0。
在交互式環境中,“in”與“not in"語句可以判斷某元素是否屬於某一數組(列表),比如:列表spam=[1,2,3],我們判斷3在不在裏面,輸入3 in spam,會返回結果:True;若是3 not in spam,則返回的判斷結果爲False,列表的具體內容我們會在之後講解。
None值表示沒有值,像print()這樣的函數不會返回任何值,那麼None就是它的返回值。
在Python中,and、or、not更加直白的表示了與、或、非,在C/C++中,它們分別是&&、||、!。如判斷句:
Python版本:(2<3) and (4<5) or not (5==6)
C/C++版本:(2<3) && (4<5) || !(5==6)
其實,在基礎語法中,C與Python最明顯的區別還是——";"。Python的語句不用分號結尾!!!
Part 3.條件&循環語句
條件語句:
//C語言:
if(條件1){
語句內容;
}
else if(條件2){
語句內容;
}
else{
語句內容;
}
#Python語言:
if 條件1:
語句內容#要縮進
elif 條件2:
語句內容#要縮進
else:
語句內容#要縮進
while語句:
//C語言:
while(循環條件){
語句內容;
};
#Python語言:
while 循環條件:
語句內容#要縮進
for語句:
//C語言:
for(i=0;i<10;i=i+2){
語句內容;
}
#Python語言:
for i in range(0,10,2):
語句內容//要縮進
對於終止循環的continue與break,在兩種語言中功能相同,不過Python中不必加上分號。
Part 4.導入與終止
導入某種功能(數學公式、排序函數等)時,C語言直接在頭文件引用對應功能:#include<xxx.h>,如果是導入自己寫的頭文件,
則爲#include"xxx.h";Python則使用import關鍵字導入,如import random,也可以寫爲from random import*,後者在調用random模塊時就不需要random.前綴了,不過爲了使名稱完整,最好使用前者的寫法。
Python可以導入sys模塊,使用sys.exit()函數終止程序運行;也可以按Ctrl+C強行終止程序。
C++中可以通過引入stdlib.h頭文件,使用system("pause")實現程序的暫停;Python可以是使用input()語句實現程序的暫停。
Part 5.全局變量
在C/C++中,我們會用define或const語句進行全局定義,而在Python中,使用global語句定義。
Part 6.函數
C語言要寫明函數類型int/char/void等,而形參也要標明類型。對於Python,函數定義爲"def xxx():",形參也無需標明類型。
Part 7.代碼實戰
最後,舉個栗子對上述內容做個總結吧:
Python版本:
def collatz(number):
if not(number%2):
number=number//2
return number
else:
number=number*3+1
return number
print("請輸入一個整數:",end='')
num=int(input())#input默認輸入字符型數據,輸整數,則需用int()包含
while num !=1:
num=collatz(num)
print(num)
運行結果:
C版本:
#include<stdio.h>
int collatz(int number){//要指明函數本身形態int以及形參的形態int
if(!(number%2)){
number/=2;//number爲int型,得到結果均會轉爲整型,相當於整除
return number;
}
else{number=3*number+1;
return number;
}
}
int main(){
int num;
printf("請輸入一個整數:");//python的print自帶換行功能,如果不想換行,則要加上end=''關鍵字
scanf("%d",&num);//整型、實型數據用scanf輸入,分別對應%d和%f/%lf
while(num!=1){
num=collatz(num);
printf("%d\n",num);//輸出也要指明輸出數據的形態
}
return 0;
}
運行結果:
感謝耐心觀看,如有錯誤,歡迎指正。