1、python快速入門(每一個知識點後包含練習)

1. 編程與編程語言php

編程的目的是什麼?python

#計算機的發明,是爲了用機器取代/解放人力,而編程的目的則是將人類的思想流程按照某種可以被計算機識別的表達方式傳遞給計算機,從而達到讓計算機可以像人腦/電腦同樣自動執行的效果。

什麼是編程語言?ios

#上面說起的可以被計算機所識別的表達方式即編程語言,語言是溝通的介質,而編程語言是程序員與計算機溝通的介質。在編程的世界裏,計算機更像是人的奴隸,人類編程的目的就命令奴隸去工做。

什麼是編程?nginx

#編程即程序員根據需求把本身的思想流程按照某種編程語言的語法風格編寫下來,產出的結果就是包含一堆字符的文件。
#強調:程序在未運行前跟普通文件無異,只有程序在運行時,文件內所寫的字符纔有特定的語法意義 

因此程序員

Python是語言,而學習語言的套路都是同樣的,以英語學習爲例,你須要學單詞,而後學語法,最後寫做文。
    英語的單詞---------->Python中的關鍵字
    英語的語法---------->Python的語法
    英語的做文---------->用Python語言寫的程序
有人說python很簡單,全都是在記憶一些固定的套路而已。學習沒有捷徑,要通過幾萬行代碼的洗禮,纔有可能成爲一名優秀的程序員。
屌絲到不能再屌絲的咱們,若是沒有這點意志力,就別妄想鹹魚翻身了。

 

2. 編程語言分類web

編程的語言的發展經歷了shell

#機器語言:站在計算機(奴隸)的角度,說計算機能聽懂的語言,那就是直接用二進制編程,直接操做硬件;
#彙編語言:站在計算機(奴隸)的角度,簡寫的英文標識符取代二進制去編寫程序,本質仍然是直接操做硬件;
#高級語言:站在人(奴隸主)的角度,說人話,即用人類的字符去編寫程序,屏蔽了硬件操做

高級語言更接近人類語言,於是造就了:他必須翻譯成被計算機能讀懂的二進制後,才能被執行,按照翻譯方式分爲:編程

#1. 編譯型(須要編譯器,至關於用谷歌翻譯):如C,執行速度快,調試麻煩
#2. 解釋型(須要解釋器,至關於同聲傳譯):如python,執行速度慢,調試方便

總結:flask

機器語言
#優勢是最底層,執行速度最快
#缺點是最複雜,開發效率最低

彙編語言
#優勢是比較底層,執行速度最快
#缺點是複雜,開發效率最低

高級語言
#編譯型語言執行速度快,不依賴語言環境運行,跨平臺差
#解釋型跨平臺好,一份代碼,處處使用,缺點是執行速度慢,依賴解釋器運行

#速度不是關鍵,開發效率高才是王道

 

3. 主流編程語言介紹api

#C語言:
C語言是一種計算機程序設計語言,它既具備高級語言的特色,又具備彙編語言的特色。它由美國貝爾研究所的D.M.Ritchie於1972年推出,1978年後,C語言已前後被移植到大、中、小及微型機上,它能夠做爲工做系統設計語言,編寫系統應用程序,也能夠做爲應用程序設計語言,編寫不依賴計算機硬件的應用程序。它的應用範圍普遍,具有很強的數據處理能力,不只僅是在軟件開發上,並且各種科研都須要用到C語言,適於編寫系統軟件,三維,二維圖形和動畫,具體應用好比單片機以及嵌入式系統開發。

#C++:
C++是C語言的繼承的擴展,它既能夠進行C語言的過程化程序設計,又能夠進行以抽象數據類型爲特色的基於對象的程序設計,還能夠進行以繼承和多態爲特色的面向對象的程序設計。C++擅長面向對象程序設計的同時,還能夠進行基於過程的程序設計,於是C++就適應的問題規模而論,大小由之。
C++不只擁有計算機高效運行的實用性特徵,同時還致力於提升大規模程序的編程質量與程序設計語言的問題描述能力。

#JAVA:
Java是一種能夠撰寫跨平臺應用軟件的面向對象的程序設計語言,是由Sun Microsystems公司於1995年5月推出的Java程序設計語言和Java平臺(即JavaSE, JavaEE, JavaME)的總稱。Java 技術具備卓越的通用性、高效性、平臺移植性和安全性,普遍應用於我的PC、數據中心、遊戲控制檯、科學超級計算機、移動電話和互聯網,同時擁有全球最大的開發者專業社羣。在全球雲計算和移動互聯網的產業環境下,Java更具有了顯著優點和廣闊前景。

#Python:
Python是一門優秀的綜合語言, Python的宗旨是簡明、優雅、強大,在人工智能、雲計算、金融分析、大數據開發、WEB開發、自動化運維、測試等方向應用普遍,已經是全球第4大最流行的語言。

 

4. python介紹

  python的創始人是吉多.範羅蘇姆,python這個名字,來自吉多所摯愛的電視劇Monty Python's Flying Circus,他但願這個新的叫作python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用的,可擴展的語言。

  python能夠應用於衆多領域:數據分許、組件集成、網絡服務、圖像處理、數值計算和科學計算等衆多領域,目前業內幾乎全部大中型互聯網企業都在使用python,如:Youtube、Dropbox、BT、中國知乎(Quora)、豆瓣、google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等

目前python的主要應用領域

#1. WEB開發——最火的Python web框架Django, 支持異步高併發的Tornado框架,短小精悍的flask,bottle, Django官方的標語把Django定義爲the framework for perfectionist with deadlines(大意是一個爲徹底主義者開發的高效率web框架)

#2. 網絡編程——支持高併發的Twisted網絡框架, py3引入的asyncio使異步編程變的很是簡單

#3. 爬蟲——爬蟲領域,Python幾乎是霸主地位,Scrapy\Request\BeautifuSoap\urllib等,想爬啥就爬啥

#4. 雲計算——目前最火最知名的雲計算框架就是OpenStack,Python如今的火,很大一部分就是由於雲計算

#5. 人工智能——誰會成爲AI 和大數據時代的第一開發語言?這本已經是一個不須要爭論的問題。若是說三年前,Matlab、Scala、R、Java 和 Python還各有機會,局面尚且不清楚,那麼三年以後,趨勢已經很是明確了,特別是前兩天 Facebook 開源了 PyTorch 以後,Python 做爲 AI 時代頭牌語言的位置基本確立,將來的懸念僅僅是誰能坐穩第二把交椅。

#6. 自動化運維——問問中國的每一個運維人員,運維人員必須會的語言是什麼?10我的相信會給你一個相同的答案,它的名字叫Python

#7. 科學運算—— 你知道麼,97年開始,NASA就在大量使用Python在進行各類複雜的科學運算,隨着NumPy, SciPy, Matplotlib, Enthought librarys等衆多程序庫的開發,使的Python愈來愈適合於作科學計算、繪製高質量的2D和3D圖像。和科學計算領域最流行的商業軟件Matlab相比,Python是一門通用的程序設計語言,比Matlab所採用的腳本語言的應用範圍更普遍

#9. 遊戲開發——在網絡遊戲開發中Python也有不少應用。相比Lua or C++,Python 比 Lua 有更高階的抽象能力,能夠用更少的代碼描述遊戲業務邏輯,與 Lua 相比,Python 更適合做爲一種 Host 語言,即程序的入口點是在 Python 那一端會比較好,而後用 C/C++ 在很是必要的時候寫一些擴展。Python 很是適合編寫 1 萬行以上的項目,並且可以很好地把網遊項目的規模控制在 10 萬行代碼之內。另外據我所知,知名的遊戲<文明> 就是用Python寫的

python有哪些種類

咱們如今知道了Python是一門解釋型語言,代碼想運行,必須經過解釋器執行,Python的解釋器自己也能夠看做是個程序(翻譯官司是哪國人不重要),這個程序是什麼語言開發的呢? 答案是好幾種語言? what? 由於Python有好幾種解釋器,分別基於不一樣語言開發,每一個解釋器特色不一樣,但都能正常運行咱們的Python代碼,下面分別來看下:

#CPython:CPython是使用最廣且被的Python解釋器。本教程以CPython爲準。
當咱們從Python官方網站下載並安裝好Python 2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python就是啓動CPython解釋器。

#IPython
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用>>>做爲提示符,而IPython用In [序號]:做爲提示符。

#PyPy
PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。
絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。

#Jython
Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。

#IronPython
IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。

python2仍是python3?

目前雖然業內不少企業還在大量使用Python2.6 or 2.7,由於舊項目幾十萬甚至上百萬行的代碼想快速升級到3.0不是件容易的事,可是你們在開發新項目時幾乎都會使用3.x。
另外Python3 確實想比2.x作了不少的改進,直觀點來說,就像從XP升級到Win7的感受同樣,棒棒的。
Py2 和Py3的具體細節區別咱們在之後課程中會慢慢深刻。

5. 第一個python程序

python解釋器執行程序是解釋執行,即打開文件讀內容,所以文件的後綴名沒有硬性限制,但一般定義爲.py結尾

#C++
#include <iostream>
 int main(void)
 {
  std::cout<<"Hello world";
 }

#C
#include <stdio.h>
int main(void)
{
printf("\nhello world!");
return 0;
}

#JAVA
public class HelloWorld{
  // 程序的入口
  public static void main(String args[]){
    // 向控制檯輸出信息
    System.out.println("Hello World!");
  }
}

#PHP
<?php  
             echo "hello world!";  
?>

#Ruby

 puts "Hello world."

#GO
package main
import "fmt"
func main(){

    fmt.Printf("Hello World!\n God Bless You!");

}

 

6. 變量

# 什麼是變量
# 變量即變化的量,核心是"變"與"量"二字,變即變化,量即衡量狀態

爲何要有變量

# 程序執行的本質就是一系列狀態的變化,變是程序執行的直接體現。因此咱們須要有一種機制可以反映或者說是保存下來程序執行狀態以及狀態的變化
# 好比:
    英雄的等級爲1,打怪升級(變)爲10
    殭屍的存活狀態True,被植物打死了,因而變爲False
    人的名字爲egon,也能夠修改成Egon 

如何定義變量

# 變量名(至關於門牌號,指向值所在的空間),等號,變量值
name = "dingding"
sex = "male"
age = 18
level = 10

變量的定義範圍

#1. 變量名只能是 字母、數字或下劃線的任意組合
#2. 變量名的第一個字符不能是數字
#3. 關鍵字不能聲明爲變量名['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']

定義方式

#駝峯體
AgeOfOldboy = 56 
NumberOfStudents = 80
#下劃線(推薦使用)
age_of_oldboy = 56 
number_of_students = 80

定義變量名很差的方式

#1. 變量名爲中文、拼音
#2. 變量名過長
#3. 變量名詞不達意

定義的變量會有id, type, value

#1 等號比較的是value,
#2 is比較的是id

#強調:
#1. id相同,意味着type和value一定相同
#2. value相同type確定相同,但id可能不一樣,以下
>>> x='Info Egon:18'
>>> y='Info Egon:18'
>>> id(x)
4376607152
>>> id(y)
4376607408
>>> 
>>> x == y
True
>>> x is y
False

常量

# 常量是指不變的量,如pai 3.141592653,或在程序運行過程當中不會改變的量
# 舉例
加入個人年齡會變,那這個就是變量;但在一些狀況下,個人年齡不變了,那就是常量了。
# 在python中沒有一個專門的語法表明常量,程序員約定俗成用變量名全是大寫表明常量
AGE_OF_DINGDING = 27

 

7. 用戶與程序交互

# 在python3中
input: 用戶輸入任何值,都存成字符串類型

# 在python2中
input: 用戶輸入什麼類型,就存成什麼類型
raw_input: 等於python3中的input

註釋

#1. 不用所有加註釋,只須要在本身以爲重要或很差理解的部分加註釋便可
#2. 註釋能夠用中文或英文,但不要用拼音
"""
多行註釋能夠用三對雙引號
""

文件頭

#!/usr/bin/env python
# -*- coding:utf-8 -*-

 

8. 基本數據類型

什麼是數據?爲什麼要有多種類型的數據?

#數據即變量的值,如age=18,18則是咱們保存的數據。
#變量的是用來反映/保持狀態以及狀態變化的,針對不一樣的狀態就應該用不一樣類型的數據去標識

數字

# int整型
定義:age=10 #age=int(10) 用於標識:年齡,等級,身份證號,qq號,個數

# float浮點
定義: salary=3.1 #salary=float(3.1)
同於標識: 工資,身高,體重

 

# int整型
在32位機器上,整數的位數爲32位,取值範圍爲-2**31~2**31-1,即
-2147483648~2147483647
在64位系統上,整數的位數爲64位,取值範圍爲-2**63~2**63-1,即
-9223372036854775808~9223372036854775807

# long(長整型)
跟C語言不一樣,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上因爲機器內存有限,咱們使用的長整數數值不可能無限大。
注意:
1.自從python2.2起,若是整數發生溢出,Python會自動將整數數據轉換爲長整數,因此現在在長整數數據後面不加字母L也不會致使嚴重後果了。
2.在python3裏再也不有long類型了,全都是int

a = 2**64
print(type(a))
b = 2**60
print(type(b))

# complex複數型
x = 1-2j
print(x.imag)
-2.0
print(x.real)
1.0

字符串

# 在python中,加了引號的字符就是字符串類型,python並無字符類型
定義: name='dingding' #name=str('dingding')
用於標識: 描述性的內容,如姓名,性別,國籍,種族
#那單引號、雙引號、多引號有什麼區別呢? 單雙引號木有任何區別,只有下面這種狀況 我須要考慮單雙的配合
msg = "My name is Egon , I'm 18 years old!"

#多引號什麼做用呢?做用就是多行字符串必須用多引號
msg = '''
今天我想寫首小詩,
歌頌個人同桌,
你看他那烏黑的短髮,
好像一隻炸毛雞。
'''
print(msg)

 

#數字能夠進行加減乘除等運算,字符串呢?也能但只能進行"相加"和"相乘"運算。
name='egon'
age='18'
print(name+age)
'egon18'
print(name*5) 
'egonegonegonegonegon'

#注意1:字符串相加的效率不高
字符串1+字符串3,並不會在字符串1的基礎上加字符串2,而是申請一個全新的內存空間存入字符串1和字符串3,至關字符串1與字符串3的空間被複制了一次,

#注意2:只能字符串加字符串,不能字符串加其餘類型

 列表

# 在[]內用逗號分隔, 能夠存放n個任意類型的值
定義: student=['dingding','aping','peiqi']
用於標識: 存儲多個值的狀況,好比一我的有多個愛好

# 存放多個學生的信息:姓名,年齡,愛好
students_info=[['dingding', 18, ['play',]], ['peiqi', 18, ['play', 'sleep']]]
students_info[0] [2] [0] #取出第一個學生的第一個愛好
'play'

字典

# 爲什麼還要用字典
存放一我的的信息:姓名,性別,年齡,很明顯是多個值,既然是存多個值,咱們徹底能夠基於剛剛學習的列表去存放,以下
info = ['dingding', 'male', '28']
定義列表的目的不僅僅是爲了存,還要考慮取值,若是我想取出這我的的年齡,能夠用
info[2]
18

但這是基於咱們已經知道在第3個位置存放的是年齡的前提下,咱們才知道索引2對應的是年齡
即:
        #name, sex, age
info=['egon','male',18]

而這徹底只是一種假設,並無真正意義上規定第三個位置存放的是年齡,因而咱們須要尋求一種,便可以存放多個任意類型的值,又能夠硬性規定值的映射關係的類型,好比key=value,這就用到了字典
# 字典
# 在{}內用逗號分隔,能夠存放多個key:value的值, value能夠是任意類型
定義
info = {'name':'dingding', 'age':18, 'sex':'male'}
# info=dict({'name':'dingding', 'age':18, 'sex':'male'})
用於標識: 存儲多個值的狀況,每一個值都有惟一一個對應的key,能夠更爲方便高效的取值

 

# 舉例
info = {
    'name': 'dingding',
    'hobbies': ['play', 'sleep'],
    'company_info': {
        'name': 'xiaoding',
        'type': 'education',
        'emp_num': 40,
    }
}
# 取出公司名
print(info['company_info']['name'])

students = {
    {'name':'alex','age':38,'hobbies':['play','sleep']},
    {'name':'egon','age':18,'hobbies':['read','sleep']},
    {'name':'wupeiqi','age':58,'hobbies':['music','read','sleep']},
}
# 取出第二個學生的第二個愛好
print(students[1]['hobbies'][1])

布爾

#布爾值,一個True一個False
#計算機俗稱電腦,即咱們編寫程序讓計算機運行時,應該是讓計算機無限接近人腦,或者說人腦能幹什麼,計算機就應該能幹什麼,人腦的主要做用是數據運行與邏輯運算,此處的布爾類型就模擬人的邏輯運行,即判斷一個條件成立時,用True標識,不成立則用False標識

# 例1
a = 3
b = 5
print(a>b)
# 不成立就是false,即假
False

# 成立就是True,即真
True

布爾類型的重點知識:

# 全部數據類型都自帶布爾值
1. None,0,空(空字符串,空列表,空字典等)三種狀況下布爾值爲False
2. 其他均爲真

注意

#1. 可變類型: 在id不變的狀況下, value能夠變,則稱爲可變類型,如列表,字典
#2. 不可變類型: value一旦改變,id也改變,則稱爲不可變類型(id變,意味着建立了新的內存空間)

9. 格式化輸出

程序中常常會有這樣的場景: 要求用戶輸入信息,而後打印成固定的格式

好比要求輸入用戶名和年齡,而後打印如下格式:

my name is xxx, my age is xxx.

很明顯,用逗號進行字符串拼接,只能把用戶輸入的名字和年齡放到末尾,沒法放到指定的xxx位置。並且數字也必須通過str(數字)的轉換才能與字符串進行拼接

# %s 字符串佔位符:能夠接收字符串,也能夠接收數字
print('My name is %s, my age is %s' %('dingding', 18))

# %d數字佔位符, 只能接收數字
print('My name is %s, my age is %d' %('dading', 18))
print('My name is %s, my age is %d' %('dading', '18')) # 報錯

# 接收用戶輸入,打印成指定格式
name = input('Your name: ')
age = input('your age: ') # 用戶輸入18, 會變成字符串18,沒法傳給%d

print('My name is %s, my age is %s' %(name, age))

# 注意
# print('My name is %s, my age is %d' %(name, age)) # age爲字符串類型,沒法傳給%d,因此會報錯

練習

# 用戶輸入姓名、年齡、工做、愛好,而後打印出如下格式
------------ info of Dingding ------------
Name: Dingding
Age: 22
Sex: male
Job: Teacher
----------------- End ----------------------
Name = input("請輸入姓名: ")
Age = input("請輸入年齡: ")
Sex = input("請輸入性別: ")
Job = input("請輸入工做: ")


print('''------------ info of Egon -----------\n
Name : %s\n
Age : %s\n
Sex : %s\n
Job : %s\n
------------- end -----------------\n
''' % (Name, Age, Sex, Job))

 

10. 基本運算符

 計算機能夠進行的運算有不少種,不僅有加減乘除。運算種類可分爲算數運算、比較運算、邏輯運算、賦值運算

算數運算:

如下假設變量: a=10, b=20

比較運算:

如下假設變量: a=10, b=20

 

賦值運算:

如下假設變量:a=10, b=20

邏輯運算:

布爾:與或非

身份運算:

is 比較的是 id

而 == 比較的是值

 

11. 流程控制之 if ... else ...

既然咱們編程的目的是爲了控制計算機可以像人腦同樣工做,那麼人腦能作什麼,就須要程序中想要的機制去模擬。人腦無非是數學運算和邏輯運算,對於數學運算在上一節就已經說過了。對於邏輯運算,即人根據外部條件的變化而作出不一樣的反映。好比

# 若是女人的年齡>30歲,那麼叫阿姨,不然叫姐姐
age_of_girl = 31
if age_of_girl > 30:
print('阿姨好')

age_of_girl = 18
if age_of_girl > 30:
print('阿姨好')
else:
print('姐姐好')

# 若是:女人的年齡>=18 而且 <22 而且 身高>170 而且 體重 < 100 而且是漂亮的,那麼表白,不然叫阿姨

age_of_girl = 20
height = 171
weight = 90
face = True
if 18 <= age_of_girl < 22 and height > 170 and weight < 100 and face == True:
print('表白')
else:
print('阿姨好')

# if嵌套if
# 在表白成功的基礎上繼續,若是表白成功那麼在一塊兒,不然:打印...

age_of_girl = 20
height = 171
weight = 90
face = True
success = False

if 18 <= age_of_girl < 22 and height > 170 and weight < 100 and face == True:
if success:
print('表白成功,在一塊兒')
else:
print('不再相信愛情了')
else:
print('阿姨好')
"""
若是:成績>=90,優秀
成績>=80且<90,良好
成績>=70且<80,普通
其餘狀況: 不好
"""

score = input('>>: ')
score = int(score)

if score >= 90:
print('優秀')
elif score >= 80:
print('良好')
elif score >= 70:
print('普通')
else:
print('不好')

# 格式:

if 條件1:

    縮進的代碼塊

  elif 條件2:

    縮進的代碼塊

  elif 條件3:

    縮進的代碼塊

  ......

  else:  

    縮進的代碼塊
# 練習1: 用戶登錄驗證
#!/usr/bin/env python
name = input('請輸入用戶的名字:')
password = input('請輸入密碼:')

if name == 'dingding' and password == '666':
    print('dingding login success')
else:
    print('用戶名或密碼錯誤')   

##########################################

# 練習2: 根據用戶輸入內容輸出其權限
#!/usr/bin/env python
''' egon --> 超級管理員 tom --> 普通管理員 jack,rain --> 業務主管 其餘 --> 普通用戶 ''' name=input('請輸入用戶名字:') if name == 'egon': print('超級管理員') elif name == 'tom': print('普通管理員') elif name == 'jack' or name == 'rain': print('業務主管') else: print('普通用戶')

##########################################

# 練習3
# 若是:今天是Monday,那麼:上班 # 若是:今天是Tuesday,那麼:上班 # 若是:今天是Wednesday,那麼:上班 # 若是:今天是Thursday,那麼:上班 # 若是:今天是Friday,那麼:上班 # 若是:今天是Saturday,那麼:出去浪 # 若是:今天是Sunday,那麼:出去浪
#方式一: today=input('>>: ') if today == 'Monday': print('上班') elif today == 'Tuesday': print('上班') elif today == 'Wednesday': print('上班') elif today == 'Thursday': print('上班') elif today == 'Friday': print('上班') elif today == 'Saturday': print('出去浪') elif today == 'Sunday': print('出去浪') else: print('''必須輸入其中一種: Monday Tuesday Wednesday Thursday Friday Saturday Sunday ''')

# 方式二:

today = input('>>: ')
if today == "Saturday" or today == "Sunday":
print('出去浪')
elif today == 'Monday' or today == 'Tuesday' or today == 'Wednesday' or today == 'Thursday' or today == 'Friday':
print('上班')
else:
print('''必須輸入其中一種:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
''')
# 方式三
today = input('>>: ')
if today in ['Saturday', 'Sunday']:
print('出去浪')
elif today in ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday']:
print('上班')
else:
print('''必須輸入其中一種:
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
''')

 

12. 流程控制之while循環

# 1.爲何要用循環
# 上節課我已經學會用if .. else 來猜年齡的遊戲啦,可是隻能猜一次就中的機率過小了,若是我想給玩家3次機會呢?就是程序啓動後,玩家最多能夠試3次,這個怎麼弄呢?我總不能想着把代碼複製3次吧。。。。
age_of_oldboy = 48 guess = int(input(">>:")) if guess > age_of_oldboy : print("猜的太大了,往小裏試試...") elif guess < age_of_oldboy : print("猜的過小了,往大里試試...") else: print("恭喜你,猜對了...") #第2次 guess = int(input(">>:")) if guess > age_of_oldboy : print("猜的太大了,往小裏試試...") elif guess < age_of_oldboy : print("猜的過小了,往大里試試...") else: print("恭喜你,猜對了...") #第3次 guess = int(input(">>:")) if guess > age_of_oldboy : print("猜的太大了,往小裏試試...") elif guess < age_of_oldboy : print("猜的過小了,往大里試試...") else: print("恭喜你,猜對了...") 
# 做爲小白,也以爲這樣的代碼實在太Low了,之後要改動功能還得修改3次,所以咱們要記住,寫重複的代碼是程序員最不恥的行爲。那麼如何作到不用謝重複代碼又能讓程序重複一段代碼屢次呢?循環語句就派上用場啦。
# 2. 條件循環:while 語法以下
while 條件:
    # 循環體

    # 若是條件爲真, 那麼循環體則執行,執行完畢後再次循環,從新判斷條件   
    # 若是條件爲假, 那麼循環體不執行,循環終止

# 打印0-10
count = 0
while count <= 10:
print('loop', count)
count += 1

# 打印0-10之間的偶數
count = 0
while count <= 10:
if count%2 == 0:
print('loop', count)
count += 1

# 打印0-10之間的奇數
count = 0
while count <= 10:
if count%2 == 1:
print('loop', count)
count += 1
# 死循環
import time
num = 0
while True:
print('count', num)
time.sleep(1)
num += 1
# 循環嵌套與tag

tag = True

while tag:
    ...
    while tag:
        ...
        while tag:
            tag = false
# 練習,要求以下
1. 循環驗證用戶輸入的用戶名和密碼
2. 認證經過後,運行用戶重複執行命令
3. 當用戶輸入命令爲quit時,則退出整個程序

#實現一: 
name = 'Jane'
password = '123'
# 進入while循環
while True:
# 用戶輸入用戶名
inp_name = input('用戶名:')
# 用戶輸入密碼
inp_age = input('密碼:')
# 判斷用戶輸入的用戶和密碼是否正確
if inp_name == name and inp_age ==password:
# 用戶和密碼正確後進入循環
while True:
# 用戶輸入指令
cmd = input('>>: ')
# 若是沒有指令,則跳出此循環,將進入下一次循環
if not cmd:
continue
# 若是指令爲quit,則跳出此循環,再也不進入循環
if cmd == 'quit':
break
# 打印用戶輸入的命令
print('<%s>' % cmd)
else:
# 用戶密碼輸錯
print('用戶名或密碼錯誤')
# 跳出本次循環,繼續進入下一次的while循環
continue
#實現二:使用tag 

 
 
name = 'Jane'
password = '123'
tag = True

# 進入while循環
while tag:
# 用戶輸入用戶名
inp_name = input('用戶名:')
# 用戶輸入密碼
inp_age = input('密碼:')
# 判斷用戶輸入的用戶和密碼是否正確
if inp_name == name and inp_age ==password:
# 用戶和密碼正確後進入循環
while tag:
# 用戶輸入指令
cmd = input('>>: ')
# 若是沒有指令,則跳出此循環,將進入下一次循環
if not cmd:
continue
# 若是指令爲quit,則跳出此循環,再也不進入循環
if cmd == 'quit':
tag = False
continue
# 打印用戶輸入的命令
print('<%s>' % cmd)
else:
# 用戶密碼輸錯
print('用戶名或密碼錯誤')

 

#break用於退出本層循環
while True:
    print "123"
    break
    print "456"

#continue用於退出本次循環,繼續下一次循環
while True:
    print "123"
    continue
    print "456"
# while+else

#與其它語言else 通常只與if 搭配不一樣,在Python 中還有個while ...else 語句,while 後面的else 做用是指,當while 循環正常執行完,中間沒有被break 停止的話,就會執行else後面的語句
count = 0
while count <= 5 :
    count += 1
    print("Loop",count)

else:
    print("循環正常執行完啦")
print("-----out of while loop ------")
輸出
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循環正常執行完啦
-----out of while loop ------

#若是執行過程當中被break啦,就不會執行else的語句啦
count = 0
while count <= 5 :
    count += 1
    if count == 3:break
    print("Loop",count)

else:
    print("循環正常執行完啦")
print("-----out of while loop ------")
輸出

Loop 1
Loop 2
-----out of while loop ------

while練習:

# 1. 使用while循環輸出1 2 3 4 5 6     8 9 10
# 方法1
count = 1
while count <= 10:
    if count == 7:
        count += 1
        continue
    print(count)
    count += 1

# 方法2
count = 1
while count <= 10:
    if count != 7:
        print(count)
    count += 1

# 2. 求1-100的全部數的和
# 和爲0
res = 0
count = 1
while count <= 100:
    res = res + count
    count += 1
print(res)

# 3. 輸出 1-100 內的全部奇數

count = 1
while count <= 100:
if count % 2 != 0:
print(count)
count += 1


# 4. 輸出 1-100 內的全部偶數

count = 1
while count <= 100:
if count % 2 == 0:
print(count)
count += 1
# 5. 求1-2+3-4+5 ... 99的全部數的和

res = 0
count = 1
while count <= 100:
if count % 2 == 0:
res -= count
else:
res += count
count += 1
print(res)
# 6. 用戶登錄(三次機會重試)

count = 1
name = 'ading'
password = '12345'
while count <= 3:
inp_name = input("用戶名:")
inp_pwd = input("密碼:")
if inp_name == name and inp_pwd == password:
print("登錄成功")
break
else:
print("用戶和密碼錯誤")
count += 1

# 7:猜年齡遊戲

"""
要求:
容許用戶最多嘗試3次,3次都沒猜對的話,就直接退出,若是猜對了,打印恭喜信息並退出
"""

age = 48
count = 1
while count <= 3:
inp_age = input("請輸入年齡:")
inp_age = int(inp_age)
if inp_age == age:
print("猜對了")
break
else:
print("猜錯了")
count += 1
# 8:猜年齡遊戲升級版

'''要求:
容許用戶最多嘗試3次
每嘗試3次後,若是還沒猜對,就問用戶是否還想繼續玩,若是回答Y或y, 就繼續讓其猜3次,以此往復,若是回答N或n,就退出程序
如何猜對了,就直接退出
'''

age = 48
count = 1

while count <= 3:
inp_age = input("請輸入年齡:")
inp_age = int(inp_age)
if inp_age == age:
print("猜對了")
break
else:
print("猜錯了")
count += 1
while count > 3:
print("你已經猜錯3次了!")
cmd = input("是否繼續玩?")
if cmd in ['Y', 'y']:
count = 1
break
elif cmd in ['N', 'n']:
print("退出遊戲")
break
else:
print("請輸入Y|y, N|n")
continue
##########################
8. 優化後的程序
age = 48
count = 0
while True:
if count == 3:
cmd = input('繼續(Y|N?)>>:')
if cmd == 'Y' or cmd == 'y':
count = 0
else:
break

inp_age = input('年齡>>:')
if inp_age == age:
print('you got it success')
break
count += 1

 

13. 流程控制之for循環

# 1.迭代式循環: for,語法以下
for i in range(10):
    縮進的代碼塊

# 2. break與continue(同上,與while中用法一致)

# 3. 循環嵌套
# 打印乘法表

for i in range(1, 10):
    for j in range(1, i+1):
        print('%s * %s = %s' % (j, i, i*j), end=' ')
    print()

# 金字塔
'''
#max_level=5
* #current_level=1,空格數=4,*號數=1
*** #current_level=2,空格數=3,*號數=3
***** #current_level=3,空格數=2,*號數=5
******* #current_level=4,空格數=1,*號數=7
********* #current_level=5,空格數=0,*號數=9

#數學表達式
空格數=max_level-current_level
*號數=2*current_level-1

'''

# 實現

max_level = 5
for current_level in range(1, max_level+1):
for i in range(max_level - current_level):
print(' ', end='')
for j in range(current_level * 2 - 1):
print('*', end='')
# print() 自己自帶換行,完美輸出
print()

14. 做業

練習題目

 
 

# 1. 簡述編譯型與解釋型語言的區別,且分別列出你知道的哪些語言屬於編譯型,哪些屬於解釋型

編譯型: 須要編譯器,至關於用谷歌翻譯,特色:執行速度快,調試麻煩  C,C++
解釋型: 須要解釋器,至關於同聲傳譯,特色:執行速度慢,調試方便  Python,JavaScript,Perl,Shell, Java

 

# 2. 執行 Python 腳本的兩種方式是什麼

交互式模式

腳本文件的形式

# 3. Pyhton 單行註釋和多行註釋分別用什麼?

# 和 """ """ 或 ''' '''

# 4. 布爾值分別有什麼?

True 和 False, 其中False還有三種狀況: None, 0, 空(空字符串、 空列表、 空字典等)

# 5. 聲明變量注意事項有那些?

變量只能是字母、數字或下劃線的任意組合

變量名的第一個字符不能是數字

關鍵字不能聲明爲變量名

# 6. 如何查看變量在內存中的地址?

 

# 7. 寫代碼

實現用戶輸入用戶名和密碼,當用戶名爲 seven 且 密碼爲 123 時,顯示登錄成功,不然登錄失敗!

實現用戶輸入用戶名和密碼,當用戶名爲 seven 且 密碼爲 123 時,顯示登錄成功,不然登錄失敗,失敗時容許重複輸入三次

實現用戶輸入用戶名和密碼,當用戶名爲 seven 或 alex 且 密碼爲 123 時,顯示登錄成功,不然登錄失敗,失敗時容許重複輸入三次    

# 8. 寫代碼

  1. a. 使用while循環實現輸出2-3+4-5+6...+100 的和
    b. 使用 while 循環實現輸出 1,2,3,4,5, 7,8,9, 11,12 使用 while 循環實現輸出 1-100 內的全部奇數

    e. 使用 while 循環實現輸出 1-100 內的全部偶數

  2. 現有以下兩個變量,請簡述 n1 和 n2 是什麼關係?

 
 
n1 = 123456 n2 = n1
相關文章
相關標籤/搜索