ROSS RHEINGANS-YOO：你好，我是羅斯。
這是一個CS50研討會。
它會帶你從編程 在C在Python編程。
>> Python是一種腳本語言。
這在很大程度上是像C 在語法，雖然有些
的技術細節 怎麼說的語法被執行
略有不同。
這是比C在某些方面不那麼強大。
這是不太表現為 哪兒於您的電腦
內存被擺出來， 它如何擺出來，
當它變得自由， 這些各種各樣的事情。
>> 它在某些方面比C更實用， 因為它更容易的編程。
語言是，一些 人，更直觀。
真的，我們的目標是為 它是更快方案
，並能降低執行。
>> 現在，如果你仔細想想 的時間量
你花你的最後 問題集寫作
對你的代碼 你的時間花量
在你的最後一個問題 設置執行你的代碼，
你想像的語言 這是快一倍寫，
和慢一倍來執行，可能會 在某些方面的改進℃。
當然，當你試圖寫 小程序從身邊小事做起，
Python是選擇的有用的語言。
>> 並在此結束 研討會上，我希望你能
能夠使 選擇在今後的項目
關於哪種語言是 正確的使用，而不是想法
一個語言更 糾正所有的時間。
有關本次研討會是有幾件事情。
本次研討會是不打算 從頭開始教你的Python。
Python是非常相似 到C，和我假設
你是一個CS50的學生，或者是有人 具有類似熟悉C.
>> 如果你CS50學生 圍繞問題設置6，
所以，你已經看到了很多 事情在C，我給你
的主要差別， 和一些事
這使Python不同 並特別有用的，
但我不打算去 什麼是編程語言
以及如何編寫程序。
但是，本次研討會將教 你寫的Python程序
如果你是那幾個群體之一。
同樣，我們將看看如何 你會實現psets--
這應該是1-6 Python--並提供指針
官方文件 備查。
另一件事是重要的 關於這次談話是如何分配的，
這部影片將是 在網上，禮貌CS50的，
所以你不應該覺得像 你需要做筆記。
您可以隨時回去看看 它後來作為參考。
此外，該幻燈片 可現在
在這個網站，應該 帶你做一個谷歌文檔。
這是一個略有刪節的版本 什麼我顯示在屏幕上。
>> 一位細心的警告之前， 我們跳，Python 3中
從Python 2中不同的語言。
他們看起來很多相同的;有 非常輕微的技術差異
這將導致程序 用Python編寫的2
不能夠被執行 在Python 3的環境。
>> 該CS50設備附帶 Python中，默認情況下它使用Python 2。
您可以通過檢查這 輸入你的命令行
蟒蛇 - 版本，這應該輸出 2.7.6對當前器具。
試試Python 3中，這不 在家電正常工作，
如果Python默認會2.X.Y，無論是在 該設備或您自己的機器。
此時應更換的Python 3隨時隨地 在這次演講中，我編寫Python。
如果你的機器 2運行在默認情況下，類型
蟒3以便能夠實際上 跟隨並執行這些事。
>> 此外，我會點你 在官方資源了。
docs.python.org/3--~~V小心 那這是一個3，而不是一個2--
有一些有用的參考。
教程將帶你穿越 很多相同的東西
我現在做的，除了文字形式。
參考是作為一個有用的 引用的語言，
和標準庫提供 你的一些擴展
具有附加功能。
>> 所以第一個Python程序。
在左邊，我們有標準的C， 在右邊，我們有Python的。
你可能已經認識到 這個問題，它的
第一個問題中的一個 套在CS50，和這些
使用相同的解決方案，解決它。
現在，之所以說我們是 看著這些並排
如此，我們可以看看 語法上的不同。
其中一個房間裡的大象 你可能已經注意到權
蝙蝠，Python有沒有 周圍的代碼主要功能包裝。
因此，在C，你寫了一堆 文件，將它們鏈接在一起，
和程序開始執行 在這個東西叫做INT為主。
>> 在Python，你寫一個 你的文件，執行該文件，
該計劃開始執行 在該文件的頂部。
因此，這將啟動 在文件的頂部
往下走，直到它找到別的東西。
如果找到一個函數的定義， 它實際上並不會執行該代碼，
它會簡單地定義函數。
但在這裡，當第一 計劃是n等於10，
的第一件事，這個方案 需要做的是利用10這個值
並設置成一個叫做變量n。
>> 說起這一行的，一 其他things-- sorry--這
意味著C程序， 你會寫他們，
會讓對方，這將 援引一些鐺命令，
然後你就會運行 生成的可執行文件。
Python程序，運行 文字file--這mario.py可能
是這個文件，我只是表現 你 - 你會運行該文件
你會執行， 它和內容
將通過執行 Python解釋器。
你可以在你的IDE做到這一點。
>> 所以，如果我有一個Hello文件， 它只是有這個內容。
這實際上是Python的 2，而不是Python 3，所以不要
擔心語法了。
但我會運行Python，上 hello.py，和它運行。
>> 另一種方式，我可以使用Python的 我不會有這麼多的處理在這次談話，
是，如果我只需鍵入的Python，它 滴我到一個環境中，
我可以換行是Python的線。
所以在這裡，如果我輸入 打印空間“你好，世界”。
類型輸入。
它會吐我回結果 個別立即行。
>> 這是可能是有用的。
在這次演講中，我會做幻燈片的事情。
所以，你就可以按照 沿任一在這裡，也可以通過寫
實際的文件，然後執行它們。
>> 但是，要回本 代碼，另一件事
你可能有 noticed--好，有
兩件事情，你可能 注意這些塊。
第一，而更現實的是， 在Python有沒有尾隨分號。
>> 分號是可選的隨處可見 和無害化無處不在。
您可以添加他們。
它可能使人們誰寫的 蟒蛇在你生活竊笑
在你的背後，是因為 他們是沒有必要的。
他們往往是被關押在一個標誌 語言從C的設計師
覺得它更清楚這樣 而且它沒有必要申報
每次結束一行。
>> 另一個奇怪的事情有關這款N 是它不具有連接一個類型。
一個神奇的作品Python--的 我要去把它稱為魔術，
但也有極 技術原因為何
works--的所述一個 魔術件的Python
是的變量可以展開或 收縮到包含任何數據
類型，你會希望他們。
>> 所以這是一個10。
如果以後下來我分配給該 ñ0.5，則需0.5。
不管它是在這裡為int， 漂浮在那裡，使用該n什麼
會，或多或少，能夠突突 同時，如果它得到任何的那些。
除非有一些非常現實的 它之所以不能使用數據
鍵入使得n目前， 在這一點上，它會得到
楔形，並拋出一個錯誤， 而那些各種各​​樣的事情。
>> 但在這裡，巨蟒 並不真正關心什麼
這就是我要在這個貼 一句話一樣，你想這件事情？
這東西是什麼？
是的，它是一種事情。
我會堅持到底。
這將是一個問題以後，如果 有人誰願意使用該結束
不能處理它。
這是一個主要的 Python和C之間的差異
這使得它容易 寫的非常大的C程序
並且可以更容易地寫 非常小的Python程序。
>> 該語法不是很 不同之處是什麼呢。
這是稍有不同 它是如何表達的。
所以這是一個非常，所謂 Python化，寫它的方式。
對於行中的範圍（n）的，這是 從0到n範圍內的數字，
包容在底 和獨特的頂部。
因此，它是從0到n-1，這是 正是C代碼是幹什麼的，
除了它是一個更容易 看也許。
>> 有關塊 沒有掀起大括號，
而不是它的襯托 這個缺口。
因此，所有這些線都 四個空格轉移到右側，
或類似有關大象的寬度。
而這些都是那些具 將要在此為執行。
如果我搞砸了 壓痕就這個問題和我
該打印推回 原來的壓痕，
該打印將離開for循環。
相反，C，其中在這裡我居然 需要移動的封閉梅開二度。
>> 這意味著你沒有得到錯誤 即跳出你，因為你
放支架在錯誤的地方。
它意味著你得到錯誤 即跳出你，因為你
縮進行錯了。
因此，它使壓痕超級小心。
希望你被超 小心你的壓痕，無論如何，
因此這不是 更多的負擔。
>> 但對於Python中的基本規則， 我們將有一對夫婦的這些
我們將經歷通過 在談話的過程中，
就是盡量自然的語法 之前看任何東西。
所以這個語法，對於 這個數目在範圍內，
非常鮮明的風格上。
很多東西在Python 我們將看到以這種形式。
>> 所以，如果你來了 用一個新的對象，你
想你應該可以 迭代此，在這種格式中，
原來它可能 支持該格式。
我們不打算在超深 技術原因，這是事實。
>> 但它是一個非常有用的直覺有 當你接近Python程序，
這個東西只是去上班。
嘗試一下。
啟動命令行 解釋器，看看它是否工作，
事情繼續前進，然後再 甚至需要打開谷歌說，
有什麼語法 這個特別的事情？
大量的Python，你也可以 只是嘗試探索。
>> 這如果是更相似 到C那麼維權的。
請注意，沒有括號。
括號是，再次， 無害的，但不必要的。
有一個冒號在端 就像for循環，
並再次，相對塊是 縮進，而不是襯著括號。
這東西是原 縮進的水平，
其相關的功能塊再次縮進。
這些工作，正是因為他們做的C.
>> 這實際上是大同小異。
此外，打印失去一個字符 關閉printf函數您傳遞一些字符串。
原來字符串 既可以劃分出
用單引號或雙引號。
有沒有區別， 除了內部
單引號，你可以使用 雙引號與放棄，
而不必 逃避所有的人。
而雙引號裡面，你 可以使用單引號與放棄
而不必逃避它們。
如果你想混 他們，你當然可以
看看網上如何做到這一點。
>> 你會發現，在這裡， 我在年底通過=這個事情。
這是一個可選的示例 的說法，這是其中的一件事情
Python支持的 使得它非常有用。
所以打印其實有很多 參數，這通常是
設置為默認 價值，但在這裡，我
決定重寫一個叫做結束。
我要的原因 用一個空字符串覆蓋它
在Python中的打印，由 默認情況下，打印出一個新行
你告訴它太後的事情。
>> 所以這個散列實際上是要 在新的一行打印出一個哈希值。
如果我不想哈希打印出來 之後，一個新的生產線，那麼我不得不說
不打印之一。
但是，卻又如此的最後一件事， 這個程序是缺少一個人是
一個包括在頂部。
打印被烤成Python所以基本上 ，有沒有頭部或模塊
你需要 包括，但如果想
以包括其它的東西 在Python腳本，
我會做一個非常類似的format-- 話都只是略有不同。
>> 我提到我們 不需要一個主這裡，
因為Python的開始 執行在頂部。
如果我想換行 這在一個功能，我
會做它像this--我 會說DEF函數名，
參數可能會去在這裡，我們將 看到其中的一些後，結腸，
然後再次，這 整個掀起塊
是什麼操作 阻止該功能。
因此，這是定義 的功能。
還有的聲明，再向下 在這裡，我可以調用該函數。
再次，程序 解釋器，從頂部開始，
可以看到，這是定義。
它不會執行此，直到它 到這裡，然後就好像哦
現在你已經把它稱為，我 想我應該執行它。
>> 一個東西，這是很常見 看到Python文件，
尤其是Python的文件 被釋放到公共
並制定by--和發展， 維護，是值得的這種形式。
這是basically--是因為 Python中，您從頂部開始
然後執行下到谷底， 我如果我只是叫馬里奧在這裡，
那麼任何時候我包括在此文件 另一個文件，因為我想用
馬里奧功能，其他的文件將 也有這樣的呼籲馬里奧在裡面。
而當我跑這個文件， 它會叫馬里奧。
>> 因此，這可能是我唯一 想，如果我實際上已經運行此
執行這個特定的文件。
所以，我可以在包裝這個 成語就是這樣，在那裡我說，
如果這個執行的名稱 環境是主要的，
然後，我想要做的這些事情。
否則，別人可以 use--包括我function--
我的文件，只是為了讓 訪問這些功能
而不必運行的事 我想在這個文件來執行。
這是，再次，可選 但很常見的。
>> 這些東西是entirely--是 正是C和Python中的一樣，
當然是在3。
我認為在2，除法運算符 有時會給你回來時，浮動
你操作的整數，要么和 你想要的或者你沒有。
但是，加，減，和時間 工作完全像你期望的那樣，
除外在稍微類型。
所以，你可以乘花車 整數，而那些各種各​​樣的事情。
>> 套作品完全一樣。
您可以使用兩個等號。
inequals--大於，小於 比，這類things--的
的含義是 你熟悉他們。
>> 其中C使用這些操作符， Python使用稍微英語
可讀的。
因此，而不是兩個，＆符號，你 從字面上鍵入單詞“和”，“或”，
或不。”
就像在你的if--您 條件語句，
我們在前面看到的，這個語法在C中 對應於這種語法在Python。
還有的不是一個很大的不同 除了一點點，有
左右兩側的標點符號。
此外，其中C將別人 如果，Python使用ELIF，
但這些大多是 表面水平的變化。
>> 迭代像這往往是 寫在這個成語在Python。
您可以製造這樣的 在外面while循環的事情
如果你想，但你 當然不必。
再次，如果你想要的 打印出的數組元素
你可以這樣來做。
一個有趣的事情 有關Python不過，
是，你不需要 使用這種模式，
你可以使用一個 稍微更優雅之一。
你說的在元。
>> 因此，而不是要在這裡 並運行在指數，
然後拉出 單個元素，
你告訴了實際只 碾過元素本身。
然後，無論你做什麼 內可以直接操作
的元素，這是非常有趣的。
我們將see--我們將使用 一次又一次的成語
當我們通過代碼走。
>> 這是，再次，一個例子 的東西，我會
調用Python魔術，雖然有 非常技術性的原因，它的工作原理。
而且有技術的東西， 需要是真實的有關數組為了
這個工作在幕後。
問題是，大多數類型 你會期望這個工作
有過這樣的實施了 你在內置的語言。
>> 另一件事，這將是很好 如果曾在每一種語言，
但也有一些原因，它不能， 打印此字符串此次數。
其實Python，這不正是 你想什麼，這只是好玩，
而意味著我們實際上可以 減少這種程序，再次mario.c。
而不是迭代了很多，我們可以 只是說，我想要的空間一定數目，
我想哈希的數量， 和一些散列底。
再次，我們使用這種格式。
>> 在這裡，我們正在傳遞 一個變量這種方式。
再次，我們並不需要說 什麼類型的變量是的，
和唯一的一次，我們將 得到的錯誤是在運行時。
當有人試圖 傳遞東西，
它會來到這個功能就好了。
如果我們在這裡楔因為這不是 您可以創建範圍過的事情，
我會得到一個運行時的錯誤， 我得這種方式進行調試。
但在此期間，我沒有 要非常小心什麼
被傳遞在，只要在實際 執行這一切工作非常乾淨。
>> 我甚至可以使這 一點點清潔
使用特定內置函數 對字符串，它是右對齊。
這僅僅是一個有用的功能 躺在身邊的圖書館。
這是在文檔中 如果你去尋找它。
我說，好，我馬上要開 這串，散列一些號，
我想右對齊它 - 墊 它與空間是這個長度。
>> 再次，這是在 文檔，這使us--
我居然通過點擊these-- 這給我們帶來了我們的第二條規則
對於Python--標準庫 功能的方法是你的朋友。
而它往往是值得的 去尋找我不知道
如果有，只是做這樣的事。
有可能是。
如果您想墊 一個字符串，如果你願意
喜歡拿回來 半字符串，如果你願意
想通過要搜索的字符串，如果 你想砸幾件事情
有串起來 與他們之間的逗號，
有標準庫 功能這樣做。
>> 它使你的生活 如果你使用他們更容易
而不是推出 一切都要靠自己
在五行代碼在這裡， 五行代碼在這裡。
這確實開始於 加起來實時。
>> 一個有趣的事情 關於如何被調用。
你會發現，有一個點的事情。
我對留下一些對象， 然後我打電話給一個點的功能。
這是Python的一種範式 使用用於安裝的方法為對象。
我們會談論這個 很簡單地底，
但要知道，我們既可以操作的 事情採取那件事說點
不管，或致電 一個函數，它接受
該對象和其他一些參數。
>> 因此，這些都是方式 得到的東西在Python中完成。
而無論特定 功能實現
在這種風格或本 風格是什麼，你
應該尋找，直到你得到一個掛 而且一個很容易掉進去。
有一個或多或少凝聚力 背後的Python理念
你吸收大部分 在它寫了很多。
在某些時候，對這些哪一個 東西將被實施為
變得自然。
現在，這只是一些 你學習，你搞清楚
每一個人的事。
>> 因此，標準庫 函數是你的朋友，
他們讓你寫的東西， 佔用這麼多的空間真的很快，
真正優雅。
這實際上可能更 清晰的，我會說，比C程序
在那邊。
更何況是這樣一個事實 總之，你能適應整體的大象
在太空，我們已經得救了。
>> 另一件事，這是一個實現 馬里奧的這點C，我認為
是最短的，你可以得到它。
它不具有的get整型，但 它硬碼10的值
相同的方式，這個人能。
原來，在這一個時鐘 84個字符，而Python是64。
這是無限多 讀比這個垃圾在這裡。
所以Python是在太空中更有效。
這是稍微低效率 在時間，但不是很大。
>> 列表是Python中一個重要的事情。
我們還沒有看到他們，但他們 操作很像數組做C.
所以在這裡，你可以聲明它們， 你可以將它們傳遞到一件事。
現在廣場モ 陣列的這些事情。
此外，我們還沒有聲明 類型，但是如果我們嘗試使用它，
什麼，你希望 整數數組上工作
是去工作在 整數數組。
>> 這是一個東西 你絕對不能
做C，因為 記憶是如此的手，
但很容易做到在Python。
如果我想我的數組要大一些，我可以 追加一個元素，它和它的罰款。
>> 這是怎麼回事幕後？
解釋器會去 出來，並得到一些內存，
也許它會得到一個 額外的內存點點，
所以我沒有，所以我沒有 以realloc的每一次。
但多少有更多的 內存它需要？
這不是決定 你必須做，
這些都決定了 解釋是要幹什麼。
>> 在這裡，我們看到的範圍 兩個參數，
但它仍然將是包容性 頂部，所以我們增加1那裡。
這是一個成語，這是一個更 聰明的方式來寫這樣的事情。
這就是所謂的名單理解， 在這裡我們在說什麼
是我想放在我的平方 對i在此範圍內的每個值。
這件事情在右邊可能是另一種 數組，這個東西在左邊
要任何特定的功能 這將需要在我作為一個變量
並給我出了一些成績。
>> 我什麼都做的是， 我要去構建
一個數組的所有這些事情 在此範圍內的每個值。
這是超級優雅，超級短線， 它很清楚這意味著什麼。
這是一個 things--這是再次，
1 of--非常象徵性的 原因是人們喜歡的Python。
如果你喜歡編程 像這樣，那麼Python
是一個你可能會喜歡學習語言。
>> 再次，有技術 原因這工作。
但就我們而言， 我們或多或少也不在乎。
>> 所以，如果你想打印出清單， 一些相同的成語是有用的。
因為我在這個範圍內，我們可以 通過所有的東西指數
然後全部打印出來。
你會看到這裡len個。
如果你曾經想要得到 該陣列的長度，這是
很容易在Python中， 它很難在C.
這將打印出完全 你想它期望。
我們也可以，因為我們已經看見， 遍歷數組中的元素
直接，然後只談 它們，而不是具有索引
回每次陣列。
>> 而這是你可以做的事情。
因此，在C，如果你問的東西 這樣，打印會說，
這是一個整數數組。
這絕對不是一個 字符串，我不能打印。
Python的或多或少的不關心。
這就像，是有辦法，我 可以把這個在一個字符串？
是的，我會的。
所以我就打印了這一點。
這意味著你可以 做事like--這些
最困難的部分的 遊戲十五，寫
很簡單的Python編寫的。
>> 你會看到有 of--在這裡一點點
我投一個整數為字符串， 我必須這樣做手工。
而且我要補充 它另一個字符串，
或Python的迷糊。
但是，無論當你 添加一個字符串的整數，
我是想獲得一個 整數後面或字符串回來？
但同樣，如果你​​只是 呼籲海峽上的事情，
故能在任何可能的 世界被轉換成字符串，
它可能是 轉換成一個字符串。
>> 在這裡，我們看到了使用 嵌套列表理解
在左側，一些索引，其中 正是因為你可以使用它，
還有一些打印出來的東西。
同樣，我們定義了一些 功能，我們會打電話給他們失望
主當我們真正得到的文件。
返回的工作原理完全像你 從與C.找工作的期望，
我們可以建立像 this--這裡的列表理解
有一個賦值給一個變量， 我們可以真正做到這一點更容易。
我們並不需要寫搜索， 因為內置於語言
是，如果這件事情是在這個數組。
返回true，否則返回false。
所以這是發現的全部內容。
>> 排序的全部 需要調用排序，
這is--有實現 這種內置到一定的C庫。
如果您想這個 那種倒退，你
可以忽略此可選 參數反向用真。
如果你想通過排序 串，這是內置式為好。
>> 因此，這不是說這些都是 你需要每天做的事情，
但這個想法是，這 是Python的理念，
所有這些事情，你會 那種想要做的是內置。
而最標準的功能， 這樣的排序，長度，不管，
支持最明智的邏輯輸入。
調用len陣列相同的 調用len在字符串的方式。
你multiply--你整理串 同樣的方式，你數組進行排序。
>> 大多數標準功能 人們打造，
和大多數第三方 庫人
建設，因為他們模仿 標準庫的設計，
可以被稱為上你的一切 喜歡，為什麼不這樣剛工作，
在C或多或少， 它將工作在Python
因為人的工作背後的數字 什麼事是再操作
適當就可以了。
如此反复，技術背景，但它 使我們的生活更方便程序員。
>> 因此，這裡的文件I / O。文件I / O有很多 小東西，使之複雜，
所以有資源 在網上，但簡而言之，
調用打開一個文件 命名與特定類型。
這就是閱讀，閱讀和 寫，寫或追加。
你讀了一定數量的 人物出來，你打印的，
你會得到你好！
我的意思是，像這樣的文件有你好！
在這裡面，叫閱讀， 你會得到什麼回來
是具有所有的字符串 所述陣列的其餘部分的，
或所有文件的其餘部分的。
如果你打電話再次讀取， 你在該文件的末尾，
所以你沒有得到 什麼，所以你會關閉。
再次，這是.close而非 關閉文件，因為這將是C.
這是多還是少，因為f是一個 的事情，你想在f關閉。
但是基本的文件I / O是不 特別複雜。
同樣，如果你​​想打開一個文件， 你想讀一個特定的行，
你可以擺脫特定的 line--有內建了點。
如果你想寫一個 首先，你可以寫這個。
如果你想寫出個人 叮咬，你可以寫這些。
如果你想迭代 在一個文件的行
獨立，因為我們從一塊做 幾個星期前，你可以做到這一點到。
同樣，大多數對象，你會 希望能夠遍歷
支持循環訪問它們。
在蟒蛇，文件也許是一個東西， 我想用線來遍歷行。
如果它是一本字典 字和我
試圖讓這些個人 話說出來，那麼，在這個循環中，
行這將是 反過來，這每一個字
將會為每行要執行 在該文件，直到該文件的結束。
再次，如果我打印出每個 線，線配備了新的生產線，
所以我設置結束 回這樣的事情。
然後，我會得到我的文件的內容。
>> 它工作在第二件事 某些方面如列表，並在某些方面
作為東西基本上 功能更強大，
有字典，這是真的 酷使用，但基本上都是亂碼
表的化身。
您創建一個使用完全相同 兩個字符，這是真棒
如果你試圖實現 哈希表您的問題集，
你知道多少痛苦，可以。
但是，人們已經做 它，做的這麼好，
你不必 擔心它了。
>> 然後，你可以插入個性的東西。
哈希tables--或詞典 不特別
關心你存儲在其中的內容。
因此，如果某些條目數， 有的條目列表，
如果一些條目其他字典， 有的作品是字符串，
Python不很在意。
>> 同樣，如果你​​進入它期待 一個字符串，你會得到什麼
是一個數組，那是你的問題。
也許這是錯的誰 以為是放的東西
在字典中，也許這是你。
如果是一個人 否則，希望他們
很乖什麼 打算在字典
並沒有留下任何的缺陷 讓你掉進去。
>> 但標準的功能將 給你回乖巧的事情。
因此，他們說這個回報 背串的字典，
那麼一切你會 擺脫是一個字符串。
如果你做一些這方面和跳閘 你，好了，這可能是你。
Python的肯定給你足夠 吊死自己的繩子，如果你願意的話​​。
現在我們就可以打印出個人 這個元素，這回報
正是你所期望。
正是你所期望的，我想， 是，我使用了很多的一句話，
但是這更多的還是 更少的Python是如何工作的。
如果你問一個東西是不是 它，Python會拋出一個錯誤
它會退出你出 你在任何程序。
它會實際打印出來 比更多信息，
它會指出你 - 它會 添加一行，等等。
>> 並再次，也許我們要 遍歷字典
並找到所有的東西在裡面。
在這裡，我們遍歷 兩件事情在同一時間。
因此，我們會用一個鍵，值做到這一點， 但隨後打印出所有這些。
>> 如果我們想cast-- 如果我們真的跑了這一點，
我們將有一些麻煩，因為 on--當我們去與大衛，
如果我們這樣做不是不可能add-- 它轉換為字符串第一，
我們無法添加該數組 串上的字符串。
但是，如果我們投它一 字符串，我們得到的東西
像這樣的，這也許是 我們希望閱讀。
>> 這是拼寫檢查。
我們只是讀的東西。
因此，我們可以讀到 個別字為線條。
我們砍掉最後 的事情，所以結腸癌減1
關閉要吃掉了we--的最後一件事 字符串的最後一個字符。
我們會說。
好了，這些中的每一個得到 插入到這本詞典，
映射到值1。
我們不特別 在乎那一個，
但它只是在那裡說，哦， 這件事情我會在字典中。
因為後來我們是 要做的是我們
會說，好吧，如果是 在字典中的。
>> 同樣，這種檢查 會員已啟動運營
使用完全不同的 算法相比它將在一個列表中，
但我們把它以同樣的方式，這 是一些Python的糖衣的
事情使他們更容易使用。
再次，我們已經看到了 以前這樣的事情。
這基本上是找到，或 它是完全一樣的語法
為找到，但操作過一個 完全不同的結構。
同時，我們也沒有特別在意。
因此，這些都是東西，你 被要求實施的拼寫。
以這樣的速度，我們將得到 或多或少都做過pset時的。
>> 聽眾：所以這 基本上只是回來
如果它不為拼寫錯誤 匹配的東西在字典？
ROSS RHEINGANS-YOO：是的，是的。
因此，這是一 一問題的適配設置
這要求你這樣做。
>> 聽眾：為什麼行減1呢？
ROSS RHEINGANS-YOO：所以 當你迭代
在一個文件要求 由線，這些線
配備了一個新的行字符 在它 - 負1的端
僅僅是這些店關閉。
而這是一個特別靈活 索引到的東西的方式。
所以，如果你有一個字符串， 你想，還有我
要開始在字符的三位 我要去到最後。
3結腸會為你做的。
如果你喜歡，我要開始在 開始，進入到最後減1
字符，冒號減1。
如果你想從去 第三要負第一，
那麼你會說​​3減1。
>> 此外，如果你想索引 到東西從後面算起，
你只指數與負號。
而且，因為其中C 會爆炸或者
餵，你其他的內存，你沒有 訪問，聽到你可以說減1
意味著最後一個但1 字符的字符串。
>> 模塊是version--是 類似物在C庫
而對於很多有用的東西。
很多事情，你會 喜歡做在Python，
除了簡單 操縱變量，
要掛鉤到 較大的大庫
接口多 對於交互功能
與世界其他地區。
SYS是其中之一 與一群工具
這是對交互有用 與系統本身
並將其導入像進口SYS。
>> 還有來自更多文檔 是，你可以去這裡，
或者你可以找到關於谷歌 通過谷歌搜索的Python SYS。
您鍵入進入。
第一連桿將是 在Python 2的文件，
第二連桿是要 是文檔的Python 3。
>> 如果我們寫出來，看上去一個文件 像this--如果特別，我們
看著上運行 命令行參數，
像我們學會了做的很 早在這個類。
這並不難。 你可以出去的argv，
這是其中的一件事情 這是由SYS實現。
它沒有內置到 基礎包，但同樣，你
可以通過導入擴展它 從SYS該功能。
你會SYS調用它。
隨你。
這裡還有argv的。
實際上有沒有 ARGC在sys，因為你
可以通過調用LEN得到它那麼容易。
然後，我們印製了這一點，那麼我們 跑在我們的終端echo-args.py。
我們回到一個數組， 這是第一個參數。
再次，這是的argv 0，這是 那得到了所謂的東西的名稱。
如果我們有更多的把它稱為 參數，我們會得到那些回來。
這是獲得的一種方式 命令行參數。
如果你想，你把國旗 或覆蓋特定的事
一個特定的默認情況下， argparse是你的朋友。
而你又發現，在網上 在蟒蛇argparse在谷歌。
>> 有幾個實用的 你發現自己使用的模塊
並再次，如果你花任何時間 這種語言的進口jsons
讀取進出的JSON 文件，沒有那麼複雜。
你打開一個文件，你就叫json.load 在該文件和你回來的事。
那是什麼東西？
這是一個JSON對象。
如果這一JSON有數組， 在Python有數組。
如果這一JSON有 關聯數組，Python的
字典，字符串， 和數字，等等。
你想甩了出來，你 打開一個新的文件，你叫轉儲，
和負載和轉儲 進出的字符串。
>> 同樣，泡菜被稱為 在基本相同的接口。
這是如果稍微更有用 你傾倒Python對象。
所以，如果你曾經想救 一個版本的當前狀態
為未來的一個可變的 你的程序的運行，
泡菜是Python的 庫這樣做。
>> 如果您有任何形式的 可寫入出可變
像文字和字符， bytes--像這樣的字典，
我們可以寫下來，我們 可以把它寫下來作為
就像一個JSON對象，這是 從字面上這些字符。
然後它會很容易 一個人打開它up--開放
閱讀它。
如果我們沒有特別 關心人讀它，
我們可以更有效地包裝，甚至 成可稍後被解壓形式
或可稍後被誇大。
這可以節省80％的 空間，你的對象可能
如果需要你寫出來速記。
>> 你叫鹹菜很 相同的方式 - 轉儲，裝載
然後你會得到你的東西回來。
所以，如果你正在寫很 簡短的Python程序
要保存狀態，然後再閱讀 他們回來後，像這樣的事情
是你的朋友。
你可以很 輕鬆地將它們傾倒的JSON。
大多數Python對象 可以轉儲出JSON
如果有任何希望，在結構 它們可以表示這種方式。
>> 這些都是只不過是冰山一角 冰山上模塊是有用的。
因此，SYS，操作系統，多，是 排序基本廣為使用的東西
我們需要與之交互 文件系統OS，
像os.isfile，os.isdirectory， os.makefile，這些都是你的朋友。
如果你想互動 與特定文件類型，
JSON，鹹菜，CSV格式。
如果您想與網絡交互 頁面，由urllib獲取HTTP
頁面。 bs4-- BeautifulSoup-- 這是一個美妙的解析器的HTML。
你在一個HTML和你運行它 現在得到這個嵌套數組對象，
你可以穿越過 眼含，與像只是尋找
如果是在，這太棒了。
>> 有一堆 包running--
做特別mathy的事情。
所以，如果你想乘， 反轉，變換矩陣，
numpy的是使用的人所有 在世界各地的這一點。
SciPy的是更加有用 在這個方向的工具。
sklearn--機器學習， 自然語言處理，
超級有用的東西，得到 用Python實現所有的時間。
>> 再次，需要稍 更長的時間來寫 - 對不起，
需要稍長運行，但 真正的工程師傾向於理由
使用Python是因為你往往會 阻止你寫的代碼，而
比你的計算機上運行的代碼。
所以，如果你打算寫一 程序，這是許多其他人
要使用 永遠的，如Linux，你
可以寫成​​的。如果你是 打算寫一個計算引擎，
你可能會在Python，如果你需要寫 改變它每隔幾個月。
有些人會寫在 C，因為他們是這樣的。
>> 因此，我們已經看到了進口SYS 為把事情的一種方式
對越來越模塊到程序中。
你也可以將其導入為 一個暱稱，如果你願意的話​​。
此外多是痛苦的 每次都打出來，所以導入為MP
然後，任何時候你 用它在程序中，
你會說mp.process，或你有什麼。
如果你想導入 只有一個單一的東西，
這樣的urllib有一個東西叫 的要求，因此你可以導入。
後來，你就不會調用它作為 urllib.request裡，但正如請求
通過它自己。
>> 你可以導入所有 從模塊，如果你願意的話​​。
這是偶爾不是一個好idea-- 這通常不是個好主意，實際上。
因為你very--因為如果什麼 在該模塊有一個名字，你
想用別的地方 在你的程序中，你不能。
>> 而且它並不總是明顯 這是這種情況。
為了確保 你在做什麼是安全的，
您需要打開 該模塊並瀏覽所有
這最終在名字 那裡 - 所有的功能，
所有的變量 住在該模塊，
因為你把所有的 他們到當地的命名空間。
>> 所以有人這樣做。
通常建議 你不這樣做。
但是，人們做了這一切 的時間，因為他們
懶惰，不想打字了MP。
任何事情，永遠。
>> 所有這一切都談模塊 帶我到處短暫交談
你如何設計程序在Python。
第一個步驟是檢查，看 別人已經做過的東西，
或做90％的事情。
機會是他們可能有，而你 應該去得到他們的事情和運行。
或者寫它周圍的包裝 以使其適應你的目的。
這是唯一有後 失敗，你會再
去和寫 - 開始考慮 你將如何把這個事情做好。
有很多東西 在那裡，這就是
的一個最有用的 事情有關Python。
像語言 優雅，語言
很容易使用，而且還因為 它是如此的優雅，易於使用，
人們一直在使用它了 時間長，有很多東西
在那裡，你可以 利用供自己使用。
>> 所以Python的最後一條規則是，有人 其他人已經大概寫
為一個模塊， 別人已經擁有
大概寫了一個庫的。
在嘗試做的事情，看看 看它是否得到落實。
這並不難。
所有我豎起模塊 之前，有可能是一個例外，
預裝在每 標準的Python安裝。
所以，通過調用 導入什麼，你
擁有所有這些功能 在您的指尖。
>> 開始結束這一 談話中，有幾件事情
我已經離開了黑盒 和那種掩飾，
並有一些善意的謊言，我已經 告訴記者，為了誠實的，
我至少會點 在這裡，即使我不會
去超深入到所有的人 和它們的技術說明。
>> 很多的東西 我已經堪稱神奇
是別人會叫 面向對象編程。
因此，有很多things--的 所以變量往往不
簡單的字節坐， 存儲器，但是非常複雜的
有內部對象 國家有關職能和大量的
隱藏的變數，很多 隱藏的功能，這
讓你把它們變成字符串， 它可以讓你在它們之間迭代。
如果你正在writing-- 其原因，他們
擁有所有這些豐富的功能 是因為people--
的建築師 language--已經
通過和每一個標準 對象，放在功能
說這是怎麼了，這是 這是怎麼回事操作
如果有人想迭代它。
>> 所以一切有人可能 可能要遍歷，
已邏輯寫在 手動你怎麼是
應該遍歷該對象。
一切，你有可能會希望 傾入一個字符串有邏輯寫入。
這是，如果你調用該函數 你想甩了這一點，為一個字符串。
這就是為什麼你可以 調用len的事情，這
所以，你可以撥打電話進行的，這是 為什麼你可以調用如果一切
你會想，因為 這些都背著他們，
技術知識，如何做到這一點。
>> 這是我的東西 超不打算進入。
但對於事情的名單是微妙 從for循環C形式不同，
你可以閱讀所有關於上 互聯網，如果你有興趣。
有黑暗的一面全部 這一點，我提到，
所以有兩件事情。
第一，此面向對象的 節目增加了大量的開銷
隨機的東西，所以你最終 使用起來更大量的內存;
你最終使用多一點 時間比你，否則。
該other--但更 陰險黑暗的一面，以這種
是，如果事情只是行動 就像你希望他們
無需你覺得超級難 是否這應該是一個int
或是否應該有一個 浮動，這也許是因為在這裡
你生產一個int，但在這裡你 的看法，但他們會always--抱歉，
它可能是這裡 你產生浮動，
但是當你到了第二部分 你的程序，你在想，
哦，好吧，但他們會 總是遞給我一個int。
如果他們不這樣做，這是可能的 你的地方楔形，
如果您嘗試使用該索引 到一個數組，或你有什麼。
>> 這樣的真正的一 有用的東西關於C是
它迫使你想真的 你讓any--硬之前，
你把任何變量之前 進入存在，像什麼
是該變量的類型。
而這將有 該類型所有的時間。
>> 這不是真的 Python的，而事實上，你
can--如果你只是 那種去用耳朵，
你做出一些決定 單程在一個地方，
有些決策之一 在其他地方的方式
沒有把足夠的東西背後 在其他地方的場景
趕上正確的事情，你 可以得到一些非常奇怪的錯誤。
而該程序可以繼續運行 很長一段時間，因為它是
做了很多工作，說，好 這個東西可以這樣操作，
所以我要運行的方式。
>> 而事實上，事實上，它推 轉發通過大量的小錯誤
也就是說，往往當 錯誤實際上是壞
而你真的想解決這個問題， 它最終英里away--程序
最終停止英里遠 從什麼時候你有你的錯誤。
而這麼一件事，我們希望 項目辦，sometimes--一件事
我們想計劃 當我們正在調試做
是失敗大聲失敗很 很快出問題的時候。
>> Python是非常糟糕的那個。
Python是非常善於不 失敗和滾滾向前
通過意想不到的事情。
因此，這是因為當用 你寫的小程序。
當你變得複雜 錯誤有時
需要很長的時間來逗他們。
>> 因此，有黑暗的一面是對所有 這一點，像它只是工作。
這只是工作就像你希望它。
不同之處在於，當它不，你結束 在一個完全不同的地方
並試圖找出其中 這是你出了問題。
>> 垃圾收集is--所以 一件事，你會發現
是任何這些東西，那 我帶入existence--
這些陣列，這些詞典，這些 對象，這些files--永遠不會被釋放。
有沒有電話 自由在任何這種談話。
這是在C面，由於 我們從來沒有為這些事情。
>> 但是在Python端，沒有自由。
事情自動獲得 釋放時的Python
認為你不看著他們。
這真是好不釋放的東西， 你可能仍然有可能在看，
但是，這意味著如果你 去分配這個大的事情，
和你喜歡的哦 我用它做了，
這是很難說的Python ，你用它現在做的。
>> 有時你可以設置 該變量是無，
然後希望最終 垃圾收集器
談到通過，並清除它。
但同樣，你不 有超過對照。
而原因之一，人們用C 對於真正的性能是至關重要的事情，
這種能力真的 知道什麼時候分配內存
並且當它的釋放，並有 很多控制權說，
我使用的是沒有更多的內存比我更需要。
這恐怕是 Python是不是很大的。
聽眾：我能問你一個問題嗎？
那你的意思是不能大聲？
>> ROSS RHEINGANS-YOO：所以，如果 什麼地方出了錯
和你在調試 模式下，你會很經常
希望你的程序告訴你 哪兒它出了問題，
不只是靜靜地停止運行。
但你實際上它打印 出各種有關
喜歡，這裡是這樣的。
這種事情發生。如果你要打印 如果你正在運行一個Web server--一個wen--
>> 聽眾：[聽不清]
>> ROSS RHEINGANS-YOO：是的，如果 您正在運行一個Web服務器，
它有時壞，如果你 總是丟棄錯誤，
和你說， 也沒有工作。
我要停下來。
我只是忽視 並繼續進行下去。
因為這樣你可以在得到數百 這些錯誤，並沒有看到他們。
>> 這無疑是有益的 用於調試
如果每次你的Web服務器中進行的 錯誤，你有那持久的記錄。
也許你甚至想要的程序 停下來，讓那些記錄
不要讓她被埋在的東西。
但同樣，這是在調試模式。
>> 常在生產模式中， 世界是一個有點不同。
而在我參加競選的小腳本， 那裡的東西，我說的做
可能只是一點點關閉 從我希望它做的事，
然後進行排序，通過推動 錯誤的東西，你可能想。
在這些情況下，當然 Python的真正贏得它的開始。
>> 最後一件事，我不說話 在this--，我沒有談
但可真是氣死第一 時間你有這些錯誤之一，
和第二以及第三和第四 時間，你有一個這些錯誤。
Python中，我提到 它使用空白
告訴你縮進了什麼水平 而你在什麼功能模塊，
它把製表符和空格不同。
所以，如果你卡在四個，然後 下一行有四個空格，
即使它們出現為 同樣數量的編輯器，
Python不把他們一樣。
>> 事實上，巨蟒把標籤 而像油和水的空間。
他們只是不同的事情。
沒有特別的 長度一個選項卡，
所以它不是像一個標籤等於8 空間，所以你會避開它
那樣。
像，當它說什麼 白色的空間我在​​的水平，
它實際上是在尋找一個 空格和製表符的圖案。
所以，最好的辦法來處理這個 是要始終使用空格所有的時間。
>> 而事實上，在Cloud9 IDE和CS50 IDE，
你的Tab鍵插入 四個空格代替中
的標籤，這是超級有用。
雖然再次，如果你寫了一個Python 計劃與標籤，就可以了，
它只是如果有人 走進去，嘗試添加
一行到你的程序， 有四個空格為每一個選項卡，
這將打破。
而這將在某種程度上打破 這確實是不可見的。
儘管實際的錯誤 消息，它拋出
必須與新 縮進這裡沒有預料，
or--如果在談論縮進 它看起來像它是錯的，
這可能是因為 有一個製表空間的問題。
他們還在真氣調試。
在最大的全 這次談話，我沒有
得到，因為它是真的 一個複雜的，微妙的話題，
並沒有必要做任何 我們到目前為止所做過的事，
有一個叫做元組的概念。
他們在那裡很像 陣列，你不能修改。
他們習慣遍布因為地方 它們是有用的很多東西
該數組是不是有用。
>> 但是，如果你想使一個數組， 那麼承諾的解釋，你
永遠不會想修改 件事 - 事實上，如果要修改，
你會是一個新的與新 在它 - 這些值的元組。
而不是產生 他們用方括號，
你生產他們圓括號。
為什麼你會用這些東西， 是的問題一點點。 。
唯一的事情，我會 說的就是你
可以使用元組作為 指數詞典。
不能使用數組作為 指數詞典。
為什麼是，再次，技術和 我不會跑進去。
>> 我還沒有觸及處理器集 在這次談話是pset6。
因此，這裡是你如何倒是 實施A--這裡
你會如何在Python實現pset6。
同時要注意的Python 設計週期，第一件事
當你說你做 寫程序是檢查
看是否有人的已經做了。
>> 事實上，如果你想 以serve--阿帕奇50
大約做這個， 但它不來
安裝在Linux機器上的標準。
Python做，並且是在Python 簡單的HTTP服務器確實也是如此。
如果你曾經在Linux機器上， 或CS50的Cloud9 IDE外部
你想成為這個電流 目錄以一個特定的端口，
蟒蛇米SimpleHTTPServer 端口提供的。
您也可以導入 簡單的http服務器
而且它有很多的功能，如果 要自定義它，或改變它，
或者運行它 - 利用它來 運行自己的服務器服務。
>> 所以這是Python的概括地說。
而這一直是CS50。
謝謝。