Python3 與 C# 基礎語法對比(就當Python和C#基礎的普及吧)

 

文章彙總:http://www.javashuo.com/article/p-yofpeago-cs.htmlhtml

多圖舊排版:http://www.javashuo.com/article/p-bzacofvb-eb.htmlpython

VSCode設置python3的開發環境(linux下默認是python2)http://www.javashuo.com/article/p-tvzhtwbx-bq.htmllinux

歡迎提出更簡單的語法~(文章中案例有兩個福利哦,一個是養生,一個是人工智能[ 密碼:fqif])git

先說下感受,python的編程有點JavaScript的感受(好比:'和「有時候不區別),又感受像外國版的易語言,整個過程像讀書同樣,好比一個元素不在列表之中==> for item not in lists。使用它作個大點的項目必定要先規定好編程風格,否則能讓人崩潰的。先不深究,後面會繼續深究。。。(Python2我就不講了,官方推薦使用Python3github

 

1.命名規則

Python官方是推薦使用_來間隔單詞,但通常開發人員都是以各自主語言的命名來定義的,這個就各人愛好了,不過團隊必定要統一。shell

命名規則:總的原則就是 見名知意,通常都是 駝峯命名法,純Python的話推薦用 _鏈接單詞編程

擴充:Python關鍵詞能夠本身打印一下:app

In [1]:
import keyword
print(keyword.kwlist)
 
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 'try', 'while', 'with', 'yield']
 

1.1.標識符

標示符由字母、下劃線和數字組成,且數字不能開頭(這個基本上都同樣)注意:標識符是區分大小寫的編程語言

1.2.Python

In [2]:
# Python標識符區分大小寫的案例
temp="xxx"
tEmp="==="
print(temp+tEmp)
 
xxx===
 

1.3.CSharp

In [3]:
%%script csharp
//CSharp標識符區分大小寫的案例
var temp = "xxx";
var tEmp = "===";
Console.WriteLine(temp + tEmp);
 
xxx===
 

2.註釋

2.1.python

python輸出就直接print便可,C是printf不要搞混哦函數

#註釋一行,三個單引號或者三個雙引號 註釋多行'''XXX'''或者"""XXXX"""(通常用#就夠了,有點像shell腳本的感受)

In [4]:
#單行註釋 輸出
print("Hello World!")
 
Hello World!
In [5]:
'''三個單引號多行註釋:
print("Hello World!")
print("Hello World!")
print("Hello World!")'''
Out[5]:
'三個單引號多行註釋:\nprint("Hello World!")\nprint("Hello World!")\nprint("Hello World!")'
In [6]:
"""三個雙引號多行註釋:
print("Hello World!")
print("Hello World!")
print("Hello World!")"""
Out[6]:
'三個雙引號多行註釋:\nprint("Hello World!")\nprint("Hello World!")\nprint("Hello World!")'
 

2.2.CSharp

C、Java、Net都是//註釋一行,/**/註釋多行

Console.WriteLine("小明同窗");
// Console.WriteLine("小明同窗"); 註釋一行
/*Console.WriteLine("小明同窗");
Console.WriteLine("小明同窗"); 註釋多行*/
 

3.變量

3.1.Python

python定義變量比較牛逼,直接寫變量名便可,句子後面 不用加分號,eg:name="小明"

In [7]:
#定義一個變量並輸出
name="小明"
print(name)
 
小明
 

3.2.CSharp

能夠用var來進行類型推斷,eg:var name="小明";

In [8]:
%%script csharp
var test = "123";//定義一個變量
Console.WriteLine(test);//輸出這個變量
 
123
 

4.輸入輸出

4.1.Python

換行輸出,不換行輸出:(\n使用這個就不說了,它們和C都是同樣的)

python:print("dnt.dkill.net/now",end='') 默認end='\n' (' 和 " 隨意)

In [9]:
print("dnt.dkill.net/now",end='')
print("帶你走進中醫經絡")
 
dnt.dkill.net/now帶你走進中醫經絡
In [10]:
print("dnt.dkill.net/now",end="")
print("帶你走進中醫經絡")
 
dnt.dkill.net/now帶你走進中醫經絡
 

若是字符串內部既包含'又包含"怎麼辦?能夠用轉義字符\來標識

In [11]:
#若是字符串內部既包含'又包含"怎麼辦?能夠用轉義字符\來標識
print("I\'m \"OK\"!")
 
I'm "OK"!
 

r''表示''內部的字符串默認不轉義

In [12]:
# 若是字符串裏面有不少字符都須要轉義,就須要加不少\,爲了簡化,Python還容許用r''表示''內部的字符串默認不轉義
print(r'\\\t\\')
 
\\\t\\
 

'''...'''的格式表示多行內容

In [13]:
#若是字符串內部有不少換行,用\n寫在一行裏很差閱讀,爲了簡化,Python容許用'''...'''的格式表示多行內容
print('''我請你吃飯吧~
晚上吃啥?
去廁所,你說呢?''')
 
我請你吃飯吧~
晚上吃啥?
去廁所,你說呢?
 

擴:Python提供一種以空格分隔的方式:

In [14]:
print("I","Love","You")
 
I Love You
 

python輸出多個重複字符,不須要本身手打N個*或者for循環輸出多個重複字符,eg:print("x"*10)

In [15]:
print("x"*10)
 
xxxxxxxxxx
 

若是你不太肯定應該用什麼,%s永遠起做用,它會 把任何數據類型轉換爲字符串

%c    字符
%s    經過str() 字符串轉換來格式化
%o    八進制整數
%x    十六進制整數(小寫字母)
%X    十六進制整數(大寫字母)
%e    指數(小寫'e')
%E    指數(大寫「E」)
%f    浮點實數
%g    %f和%e 的簡寫
%G    %f和%E的簡寫
 

下面來個輸入輸出的簡單的 案例吧:打印一張名片,Name:毒逆天,Gender:男

print("Name:%s,Gender:%s"%(name,gender))注意引號後面沒有

In [16]:
#定義一個變量name,用戶輸入將賦值給name
name=input("請輸入用戶名:")

#定義一個變量gender,用戶輸入將賦值給gender
gender=input("請輸入性別:")

#多個變量輸出
print("Name:%s,Gender:%s"%(name,gender))
 
請輸入用戶名:毒逆天
請輸入性別:男
Name:毒逆天,Gender:男
 

4.2.CSharp

輸出用:Console.Write Console.WriteLine

In [17]:
%%script csharp
Console.Write("dnt.dkill.net/now");
Console.WriteLine("帶你走進中醫經絡");
 
dnt.dkill.net/now帶你走進中醫經絡
 

C#用@來轉義字符,無論你是轉義字符仍是換行,通殺

In [18]:
%%script csharp
Console.WriteLine(@"\\\\\\\");
 
\\\\\\\
In [19]:
%%script csharp
Console.WriteLine(@"我請你吃飯吧~
晚上吃啥?
去廁所,你說呢?")
 
我請你吃飯吧~
晚上吃啥?
去廁所,你說呢?
 

Csharp輸入輸出的簡單的 案例:打印一張名片,Name:毒逆天,Gender:男

C#:Console.WriteLine($"Name:{name},Gender:{gender}");

Console.WriteLine("請輸入用戶名:");
var name = Console.ReadLine();

Console.WriteLine("請輸入性別:");
var gender = Console.ReadLine();

Console.WriteLine($"Name:{name},Gender:{gender}"); //推薦用法
Console.WriteLine("Name:{0},Gender:{1}", name, gender); //Old 輸出
 

5.類型轉換

5.1.Python

類型(值),eg:int()long()float()str()list(),set()...等等

Python沒有 double類型哦~

:轉換成 16進制hex()、轉換爲 8進制oct()

In [20]:
# 求和
num1=input("輸入第一個數字")
num2=input("輸入第二個數字")

print("num1+num2=%d" %(int(num1)+int(num2)))
 
輸入第一個數字1
輸入第二個數字2
num1+num2=3
 

5.2.Csharp

C#:該案例推薦使用 int.TryParse,我這邊就用經常使用的Convert系列了【支持類型比較多

Convert.ToInt64(),Convert.ToDouble()Convert.ToString()...

//類型轉換
Console.WriteLine("輸入第一個數字:");
var num1 = Console.ReadLine();
Console.WriteLine("輸入第二個數字:");
var num2 = Console.ReadLine();
Console.WriteLine($"num1+num2={Convert.ToInt32(num1) + Convert.ToInt32(num2)}");
 

6.算術運算符

6.1.Python

算術運算符編程語言基本上差很少,Python多了個 // 取商(%是取餘)和 冪**,來個案例:

In [21]:
num=9
print("num=9,下面結果是對2的除,取餘,取商操做:")
print(num/2.0)
print(num%2.0)
print(num//2.0)
print("2^3=%d"%2**3)
 
num=9,下面結果是對2的除,取餘,取商操做:
4.5
1.0
4.0
2^3=8
 

Python3如今這樣寫也行,推薦和其餘語言寫法一致否則你用慣了Python,切換的時候會出事的

In [22]:
num=9
print("num=9,下面結果是對2的除,取餘,取商操做:")
print(num/2)
print(num%2)
print(num//2)
print("2^3=%d"%2**3)
 
num=9,下面結果是對2的除,取餘,取商操做:
4.5
1
4
2^3=8
 

+= -= *= /= %= **= //= 這些就不用詳說了吧?

舉個例子:c += a 等效於 c = c + a

注意下,Python中不見得等效,Python都是引用,這個先不說後面說

 

6.2.Csharp

C#經常使用數學方法都在Match類中

In [23]:
%%script csharp
var num=9;
Console.WriteLine("num=9,下面結果是對2的除,取餘,取商操做:")
Console.WriteLine(num/2.0);
Console.WriteLine(num%2.0);
Console.WriteLine(num/2);
Console.WriteLine(Math.Pow(2,3));
 
num=9,下面結果是對2的除,取餘,取商操做:
4.5
1
4
8
 

7.if else

7.1.Python

說Python像外國版的易語言,這邊就能夠看出來一點了,若是再結合Python命名規則就感受在閱讀文章同樣

先說說Python的邏輯運算符:與andornot,這個卻是跟C、C#、Java等大大不一樣,和SQL卻是差很少

關係運算符和其餘語言基本上差很少(== != <> > < >= <=

就一點不同:不等於也能夠用<>,這是兼容SQL的寫法嗎?

來個if else基礎語法:括號可加可不加,可是記得加不用大括號,可是if裏面的代碼注意縮進

In [24]:
age=19

if age>=18:
    print("成年了")
 
成年了
 

再來個嵌套的:注意哦~ else if 在python裏面 簡寫成了:elif

In [25]:
age=24

if age>=23:
    print("七大姑曰:工做了嗎?八大姨問:買房了嗎?異性說:結婚了嗎?")
elif age>=18:
    print(age)
    print("成年了哇")
else:
    print("好好學習每天向上")
 
七大姑曰:工做了嗎?八大姨問:買房了嗎?異性說:結婚了嗎?
 

結合前面知識,再來個案例:

In [26]:
input_int=int(input("請輸入(1-7)"))

#if後面的:,tab格式,else if 如今是elif
if input_int==1:
    print("星期一")
elif input_int==2:
    print("星期二")
elif input_int==3:
    print("星期三") 
elif input_int==4:
    print("星期四")
elif input_int==5:
    print("星期五")
elif input_int==6:
    print("星期六")
elif input_int==7:
    print("星期日")
else:
    print("別鬧")
 
請輸入(1-7)2
星期二
 

7.2.Csharp

C# if else 單行代碼能夠不用寫括號

int age = 24;

if (age >= 23)
    Console.WriteLine("七大姑曰:工做了嗎?八大姨問:買房了嗎?異性說:結婚了嗎?");
else if (age >= 18)
{
    Console.WriteLine(age);
    Console.WriteLine("成年了哇");
}
else
    Console.WriteLine("好好學習每天向上");

NetCore如今推薦,若是是單行,建議Codeif else寫在一行:

int age = 24;
if (age >= 23) Console.WriteLine("七大姑曰:工做了嗎?八大姨問:買房了嗎?異性說:結婚了嗎?");
else if (age >= 18)
{
    Console.WriteLine(age);
    Console.WriteLine("成年了哇");
}
else Console.WriteLine("好好學習每天向上");
 

8.While

8.1.Python

python裏面沒有++--,這點的確用的有點小不方便,擴展部分有相關說明

while循環通常經過數值是否知足來肯定循環的條件

來幾個個案例(PS:感受用C了,捂臉^_^)

In [28]:
num=10

while num>0: 
    print(num)
    num-=1
 
10
9
8
7
6
5
4
3
2
1
In [29]:
i=1
#輸出一個三角形
while i<6:
    j=1
    while j<=i:
        print("*",end="")#不換行輸出
        j+=1
    print("")#下一行
    i+=1
 
*
**
***
****
*****
In [30]:
# 1~100求和
i=1
sum=0
while i<=100:
    sum+=i
    i+=1
print(sum)
 
5050
 

8.2.Csharp

用法差很少,來個案例

In [31]:
%%script csharp
int index = 1;
int sum = 0;
while (index <= 100)
{
    sum += index;
    index++;
}
Console.WriteLine(sum);
 
5050
 

8.3.Python擴展(++ --)

其實Python分爲 可變類型listdict,set等等)和 不可變類型intstrtuple等等)

像數字這類的是不可變類型(後面會繼續說)因此結果每每和你預期的不同哦~看個案例:

In [32]:
# python 中,變量是之內容爲基準而不是像 c 中以變量名爲基準,因此只要你的數字內容是5
# 無論你起什麼名字,這個變量的 ID 是相同的,同時也就說明了 python 中一個變量能夠以多個名稱訪問
a=5
b=5

print(id(a))
print(id(b))
print(a is b)
a+=1

print(id(a))
print(id(b))
print(a is b)
 
93994553510560
93994553510560
True
93994553510592
93994553510560
False
 

你還能夠看看這篇文章:Python沒有 ++/-- 參考文章(點我)

 

9.for

9.1.Python

pythonfor循環,相似於js裏面的for in

固然了,python的for還有不少諸如列表生成式的便捷功能,基礎部分先不說

看個基礎案例:

In [1]:
# 基礎循環:後面會講range
for i in range(5):
    print(i)
    i+=1
 
0
1
2
3
4
In [2]:
#while循環通常經過數值是否知足來肯定循環的條件
#for循環通常是對能保存多個數據的變量,進行遍歷
name="https://pan.baidu.com/s/1weaF2DGsgDzAcniRzNqfyQ#mmd"

for i in name:
    if i=='#':
        break
    print(i,end='')#另外一種寫法:print("%s"%i,end="")
print('\n end ...')
 
https://pan.baidu.com/s/1weaF2DGsgDzAcniRzNqfyQ
 end ...
 

9.2.Csharp

foreach (var i in name)

In [3]:
%%script csharp
var url = "https://pan.baidu.com/s/1weaF2DGsgDzAcniRzNqfyQ#mmd";
foreach (var item in url)
{
    if (item == '#')
        break;
    Console.Write(item);
}
Console.WriteLine("\n end ...");
 
https://pan.baidu.com/s/1weaF2DGsgDzAcniRzNqfyQ
 end ...
 

9.3.Python擴展(for else)

for的擴展:for else(通常不太用)

官方參考https://docs.python.org/3/reference/compound_stmts.html#the-for-statement

for-else圖片

圖片出處:http://www.javashuo.com/article/p-sldlphrt-cy.html

 

其餘擴展

1.Python 沒有 switch / case 語句

Python 沒有switch / case語句。爲了實現它,咱們可使用字典映射

官方的解釋說:https://docs.python.org/3.6/faq/design.html#why-isn-t-there-a-switch-or-case-statement-in-python

"用if... elif... elif... else序列很容易來實現switch / case語句,並且可使用函數字典映射和類的調度方法"

def numbers_to_strings(argument):
switcher = {
    0: "zero",
    1: "one",
    2: "two",
}
return switcher.get(argument, "nothing")

這段代碼相似於:

function(argument){
    switch(argument) {
        case 0:
            return "zero";
        case 1:
            return "one";
        case 2:
            return "two";
        default:
            return "nothing";
    };
};

在Python中字典映射也能夠包含函數或者 lambda 表達式:

def zero():
    return "zero"

def one():
    return "one"

def numbers_to_functions_to_strings(argument):
    switcher = {
        0: zero,
        1: one,
        2: lambda: "two",
    }
    func = switcher.get(argument, lambda: "nothing")
    return func()

類的調度方法:

若是在一個類中,不肯定要使用哪一種方法,能夠用一個調度方法在運行的時候來肯定

class Switcher(object):
    def numbers_to_methods_to_strings(self, argument):
        method_name = 'number_' + str(argument)
        method = getattr(self, method_name, lambda: "nothing")
        return method()

    def number_0(self):
        return "zero"

    def number_1(self):
        return "one"

    def number_2(self):
        return "two"
 

Python設計相關的爲何,能夠參考官方文檔https://docs.python.org/3.6/faq/design.html

 

2.Csharp基礎筆記

C#基礎(逆天上學那會作的筆記)

易忘知識點

C#基礎彙總

異常概況系

其實有了Code,筆記也就沒啥用了,知識點直接Code驗證一下便可

CodeBase ~ POP

CodeBase ~ OOP

 

歡迎糾正+補充~

相關文章
相關標籤/搜索