那些年被我坑過的Python——邂逅與初識(第一章)

来源:http://www.cnblogs.com/tntxyz/archive/2016/07/26/5705764.html
-Advertisement-
Play Games

第一問:為什麼學習Python? 虛妖說:為了還債,還技術債,很早接觸編程,卻一直徘徊,也碼了很多代碼,卻從未真真學會編程! 第二問:什麼是Python 是一種以簡潔、優雅著稱的解釋型、動態、強類型的高級編程語言; 簡潔和優雅: 體現在Python的語法風格,最明顯的一點是縮進,其他語言中縮進本來是 ...


第一問:為什麼學習Python?

  虛妖說:為了還債,還技術債,很早接觸編程,卻一直徘徊,也碼了很多代碼,卻從未真真學會編程!

 

第二問:什麼是Python

  是一種以簡潔、優雅著稱的解釋型、動態、強類型的高級編程語言;

  簡潔和優雅:

    體現在Python的語法風格,最明顯的一點是縮進,其他語言中縮進本來是作為使代碼結構條理增加可讀性的約定,而在Python中縮進成了一種強制性要求,同時也成為代碼快的分隔方式,避免使用過多的代碼塊分隔標識,比如VB的Begin和End,shell中的if、fi,java中的{}等等;是不是有一種一箭雙雕的感覺?!這類的編碼風格已經成為Python的基因,也成就了簡潔與優雅的特性。

  解釋型與編譯型:

    為了更好的理解兩者的區別,我把編程語言與自然語言做一個類比:

    使用語言來傳遞信息應該是人類作為智慧生物最大的特性之一。它是信息的在一定範圍內的通用編碼集合,實現了對信息的高級抽象。簡而言之就是構成了溝通和交流的基礎。但語言有適用範圍限制,就像中國不同民族使用不同的語言,即使地理位置相近使用的語言相近也會有不同的表達方式,比如方言等,更不用說國外的其它多種語言了。在這個前提下就需要引入翻譯機制來實現信息不同編碼方式的轉換。那麼如果人要和機器交流怎麼辦?這就需要將自然語言翻譯成機器語言,這裡的翻譯機制就稱為編譯(compile)。但是隨著編譯機制的發展,逐漸演化出兩種編譯方式:編譯型和解釋型。

    編譯型是指一次性把全部的自然語言進行翻譯,一起告訴給電腦:你去整吧!現在沒我啥事了。

    解釋型是指一段一段的進行翻譯:你整完這塊再找我,我時刻準備著為您服務!

  動態與靜態:

    區別就是變數是否需要預先定義,需要預先定義的是靜態類型,比如C和Java,需要用的時候再說,這類語言稱為動態語言類型。

  強類型與弱類型:

    區別在於類型轉換過程,強類型必須使用特定的轉換函數,而弱類型則不用,強類型可以更好的對數據進行約束。

 

第三問:常用的字元編碼有哪些?區別是什麼?

  常聽說的字元編碼有ASCII碼、GB2312、GBK、GB28030、Unicode和UTF-8;

  區別是:

  ASCII編碼的一個單元占用一個位元組即8位,是較早的編碼規範,不能表示中文或其他國家語言;

  GB2312、GBK、GB28030是中國不同時期使用的字元編碼集,一個單元占兩個位元組,用來實現對中文字元的編碼;

  Unicode是統一碼或萬國碼,是各種編碼的集大成者,一個單元占兩個位元組,可以對多國文字字元進行編碼;

  UTF-8是在Unicode基礎上改良的可變長編碼方式,即單元的長度是不定的,表示ASCII編碼集中的字元時候單元為一個位元組,表示其它複雜字元編碼的時候,單元使用三個位元組來表示,這樣可以適應字元集的不斷擴展,以後還可能加入外星字元集,呵~呵~

 

第四問:什麼是變數,變數賦值?和記憶體地址或記憶體對象之間有什麼關係?

  變數顧名思義就是變化的量,是數據的抽象載體,而數據對象本身是存放在記憶體中的,給變數賦值就是構建變數名與數據對象地址之間的映射關係。變數不是數據,但是通過賦值操作,就可以通過變數名找到對應的數據對象。

  而把一個變數賦值給另一個變數的本質是複製映射關係,變數名之間是沒有關聯的。

  Python里的賦值還是很容易理解的,相較而言C、C++中的指針以及指針變數的概念就要複雜得多!

 

第五問:簡單的數據類型有哪些?

  幾乎所有語言的基本數據類型都很相似,最簡單的類型無非就是整型(int)、字元串(str)、布爾型(bool)和浮點型(float),當然Python的基本數據類型還包括:列表、字典、元組和集合。

 

第六問:Python中如何實現交互?

  交互的實現是通過輸入輸出機制實現;

  最簡單的輸入輸出機制是通過input()與print()函數來實現的。

  print()用來列印輸出信息;input()用來實現用戶數據的輸入。

  HelloWorld程式就是使用print()函數完成的:

1 output_info=input("Input something:")
2 >>>Hello World!
3 
4 print(output_info)
5 >>>Hello World!

 

第七問:主流的字元串的格式化輸出方式有哪些?

  字元串的格式化輸出說白了就是向預先定義好的字元串模板中傳入變數。而變數的傳入有兩種方式:

    已有變數:

1 name = input("your name:")
2 age = input("your age:")
3 job = input("your job:")
4 salary = input("your salary:")

    第一種是使用%作為占位符,然後按序按量依次傳入:

 1 output_info = '''
 2 ---------------%s's RESUME--------------------
 3 -----name  :%s
 4 -----age   :%s
 5 -----job   :%s
 6 -----salary:%s
 7 ''' % (name,
 8        name,
 9        age,
10        job,
11        salary)

      如上:在字元串中使用%s、%d、%f(分表示字元串、整型和浮點型變數)表示將要傳入的數據的位置,在字元串結束後通過“  %  (變數名1,變數名2,...)”實現變數的導入。當然導入的變數個數與順序要與字元串中占位符一 一對應!

    第二種是使用字元串的內置函數format()來實現:

 1 output_info = '''
 2 ---------------{0}'s RESUME--------------------
 3 -----name  :{0}
 4 -----age   :{1}
 5 -----job   :{2}
 6 -----salary:{3}
 7 '''.format(name,
 8            age,
 9            job,
10            salary)
11 
12 
13 output_info = '''
14 ---------------{_name}'s RESUME--------------------
15 -----name  :{_name}
16 -----age   :{_age}
17 -----job   :{_job}
18 -----salary:{_salary}
19 '''.format(_name=name,
20            _age=age,
21            _job=job,
22            _salary=salary)

      這裡其實就是調用了字元串類中的format()方法將變數傳入,常用的有通過索引位置傳入和通過label插入,不再過多贅述!

第八問:如何實現選擇分支與迴圈?

  選擇分支是通過if語句來實現的,迴圈通過while語句與for語句實現,細節不再贅述,用兩小段代碼來說明:

    

 1 import random
 2 # 生成100以內的隨機數來猜
 3 true_age = random.randrange(100)
 4 # print(true_age)
 5 count = 5
 6 
 7 while count > 0:
 8     print("You only have %d chances to guess!" % count)
 9     guess_age = int(input("guess a number between 1 and 100:"))
10     count -= 1
11 
12     if guess_age == true_age:
13         print("Bingo!")
14         break
15     elif guess_age > true_age:
16         print("Just smaller try again!")
17         continue
18     else guess_age < true_age:
19         print("Just bigger try again!")
20         continue
21 else:
22     print("Unluckly!")

    上面代碼的功能是實現猜年齡,年齡是隨機生成的100以內隨機整數,而且只有5次機會,每次輸入一個猜測值,根據與真實值的比較結果反饋,如果五次都沒有猜對就退出迴圈,猜對則立刻退出迴圈。

      

 1 import random
 2 
 3 true_age = random.randrange(100)
 4 times = 3
 5 
 6 for count in range(10):
 7     guess_age = int(input("guess a number between 1 and 100:"))
 8 # 超過三次後提示是否繼續
 9     if count >= times - 1:
10         response = input("Do you want to continue?")
11         if response != 'y':
12             print("Unlucky!")
13             break
14 
15     if guess_age == true_age:
16         print("Bingo!")
17         break
18     elif guess_age > true_age:
19         print("Just smaller try again!")
20     else guess_age < true_age:
21         print("Just bigger try again!")
22 else:
23     print("Unlucky!")

    與上一段代碼相比,這裡使用了for語句實現迴圈,超過三次猜不對,就會提醒用戶是否繼續;

    range()的功能很強大,可以設置步長也可以倒序,比如:

1 for i in range(100,0,-1):
2     pass
3 
4 for i in range(0,10,2):
5     pass

    第一個for語句可實現i從100到0的變化,第二個語句可以實現10以內的偶數輸出,顧名思義!

第九問:編程的好習慣有哪些?

  首先,寫博客就是一個很好的回顧和梳理知識的手段;

  其次,設計的重要性遠遠高於編碼過程,因此為了更好地將頭腦中的概念具現化就需要使用工具來輔助我們,使用流程圖來固化設計方案可以使得編碼更有條理與針對性,對設計過程中存在的重大問題也有很好的反饋作用!

  最後,書讀百遍其義自見,想磨練編程技能,寫代碼做練習是無可厚非的,孰能生巧,很有道理!

 

第一次編寫博客,內容和排版可能都有欠缺,望大家多多體諒,如果發現文中有錯誤或是歧義,請多多指教,都是凡人,難得不犯錯!

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 從網上找到的一種加密代碼: 還有另一種SHA1加密,我用來做騰訊雲簽名: ...
  • 最近,項目中需要執行一個計劃任務,組長就讓我瞭解一下Quartz.net 這個組件,挺簡單的一個組件,實現起來特別的方便,靈活,值得推薦給大家一起學習一下這個小工具。以前我有的時候是使用定時器Timer,還有資料庫中的 計劃任務,後來發現這些真的太不好用了。下麵我介紹一下這個組件的使用步驟和註意事項 ...
  • 這個類庫是本人參考許多相關資料之後做出的C#矩陣運算類庫,因為C#的數值計算庫相對比較少,所以希望這個類庫能夠給大家帶來一些幫助。 源碼github網址:https://github.com/JoshuaHe2015/MatrixLibrary 功能介紹:(持續更新中) 1、矩陣的基本運算: 矩陣的 ...
  • 如過客戶端在向服務端介面進行請求,如果請求信息進行了加密處理,被第三方截取到請求包,雖然第三方無法解密獲取其中的數據,但是可以使用該請求包進行重覆的請求操作。如果服務端不進行防重放攻擊,就會參數伺服器壓力增大,數據紊亂的後果。而使用添加時間戳的方式可以解決這一問題。 ...
  • 強制類型轉換 package hello; import java.util.Scanner; public class Hello { public static void main(String[] args) { // TODO Auto-generated method stub Scann ...
  • curry翻譯為中文就是咖喱。意為使用curry可以讓代碼更有味道。 scala里的curry化可以把函數從接收多個參數轉換成接收多個參數列表。也就是說我們要編寫的函數不是只有一個參數列表,這個參數列表中有多個參數以逗號分隔;而是一個函數中有多個參數列表,每個參數列表中只有一個參數(當然,也可以有多... ...
  • 結合關係 一般自左向右 單目+- 和 賦值= 自右向左 ...
  • 一、前言 七月的天氣分外炎熱,心中燥意難以撫平,決定梳理下之前落下的筆記。正好最近對JMM比較感興趣,就整理出了這篇文字。 二、序言 即使你的程式沒有顯示的創建任何線程,框架也可能為你創建了一些線程,這些線程調用的代碼必須是線程安全(thread safe)的。這一點給開發人員的設計和實現賦予了更重 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...