Python學習-01-初始Python

Python基礎知識總結html

1、前期瞭解python

1.1解釋型語言和編譯型語言web

編譯型語言在程序執行以前,有一個單獨的編譯過程,將程序翻譯成機器語言,之後執行這個程序的時候,就不用再進行翻譯了。算法

解釋型語言,是在運行的時候將程序翻譯成機器語言,因此運行速度相對於編譯型語言要慢。shell

C/C++ 等都是編譯型語言,而Java,C#,Python等都是解釋型語言。編程

1.2動態類型語言和靜態類型語言瀏覽器

動態類型語言:指在運行期間纔去作數據類型檢查的語言。在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python,Ruby,shell等就是一種典型的動態類型語言。安全

靜態類型語言:它的數據類型是在編譯期間檢查的。在寫程序時,要聲明全部變量的數據類型。C/C++是靜態類型語言的典型,其餘的還有C#,JAVA等。網絡

1.3強類型定義語言和弱類型定義語言多線程

強類型定義語言:若是一個變量被指定了某個數據類型,若是不通過強制轉換,那麼它就永遠是這個數據類型了。舉個例子:若是你定義了一個整型變量a,那麼程序根本不可能將a當作字符串類型處理。除非,你強制性的改變它的類型。強類型定義語言是類型安全的語言。如C、Python。

弱類型定於語言:數據類型能夠被忽略的語言,與強類型定義語言相反,一個變量能夠賦予不一樣數據類型的值。如shell。

強類型定義語言在速度上可能略遜於弱類型定義語言,可是強類型定於語言具備嚴謹性,可以有效的避免許多錯誤。

2、Python歷史、優缺點、解釋器

2.1歷史

         1989年,爲了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇 Monty Python’s Flying Circus。他但願這個新的叫作Python的語言能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。

         1991年,第一個Python編譯器誕生。它是用C語言實現的,並可以調用C語言的庫文件。從一出生,Python已經具備:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊爲基礎的拓展系統。

         Python 1.0 - January 1994 增長了 lambda, map, filter and reduce.

1999年 Python的web框架之祖——Zope 1發佈

Python 2.0 - 2000/10/16,加入了內存回收機制,構成了如今Python語言框架的基礎

Python 2.4 – 2004/11/30, 同年目前最流行的WEB框架Django 誕生

Python 2.5 - 2006/09/19

Python 2.6 - 2008/10/1

Python 2.7 - 2010/07/03

Python 3.0 - 2008/12/03

Python 3.1 - 2009/06/27

Python 3.2 - 2011/02/20

Python 3.3 - 2012/09/29

Python 3.4 - 2014/03/16

Python 3.5 - 2015/09/13

Python 3.6 2016/12/23

2014年11月,Python2.7將在2020年中止支持的消息被髮布,而且不會在發佈2.8版本,建議用戶儘量的遷移到3.4+    Python最初發布時,在設計上有一些缺陷,好比Unicode標準晚於Python出現,因此一直以來對Unicode的支持並不徹底,而ASCII編碼支持的字符有限。例:對中文支持很差Python3相對Python早期的版本是一個較大的升級,Py3在設計的時候沒有考慮向下兼容,因此不少早期版本的Python的程序沒法再Py3上運行。爲了照顧早期的版本,推出過渡版本2.6——基本使用了Python 2.x的語法和庫,同時考慮了向Python 3.0的遷移,容許使用部分Python 3.0的語法與函數。2010年繼續推出了兼容版本2.7,大量Python3的特性被反向遷移到了Python2.7,2.7比2.6進步很是多,同時擁有大量3中的特性和庫,而且照顧了原有的Python開發人羣。

2.2 Python2仍是Python3?

py2.7是2.x系列的最後一個版本,已經中止開發,再也不增長新功能。2020年終止支持。全部的最新的標準庫的更新改進,只會在3.x的版本里出現。Guido決定清理Python2.x ,而且再也不兼容舊版本。

最大的一個改變就是使用Unicode做爲默認編碼。Pyhton2.x中直接寫中文會報錯,Python3中能夠直接寫中文了。從開源項目看,支持py3的比例已經大大提升,知名的項目通常都支持py2.7和py3+。

py3比py2更規範統1、去掉了不必的關鍵字Python3.x還在持續改進。

    因此推薦你們使用Python3.x。

2.3Python 解釋器

         當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py文件。因爲整個Python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器。

CPython:這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python就是啓動CPython解釋器。CPython是使用最廣的Python解釋器。也是按照Python後,默認的解釋器。

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

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

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

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

小結:Python的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性。

2.4Python的優缺點

2.4.1優勢

         1)Python的定位是「優雅」「明確」「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是複雜的程序。

         2)開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上在進行二次開發,大大下降開發週期,避免重複。

         3)高級語言,當你用Python語言編寫程序的時候,你無需考慮如何管理你的程序使用的內存一類的底層細節。

         4)可移植性,因爲它的開源本質,Python已經被移植在許多平臺。若是在編程中,當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行。

         5)可擴展性,若是你須要你的一段關鍵代碼運行的更快或者但願某些算法不公開,你能夠把你的部分程序用C或者C++編寫,而後在你的Python程序中使用它們。

         6)可嵌入性,你能夠把Python嵌入你的C/C ++程序,從而向你的程序用戶提供腳本功能。

2.4.2缺點

1)速度慢,Python的運行速度相比於C和JAVA要慢。通常執行速度,比C慢10倍。

2)代碼不能加密,Python是解釋性語言,它的源碼都是以明文形式存放的,若是要加密,就不要用Python實現。

3)線程不能利用多CPU問題,即Python的多線程不能利用多核優點。一個Python解釋器進程內只有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU上,因爲Python的GIL(全局解釋器鎖,Global interpreter Lock)的存在,也禁止多線程的並行執行。

2.5Python安裝

2.5.1下載安裝包

https://www.python.org/downloads/release/python-361/

2.5.2安裝

直接安裝,python3.6會自動給咱們添加路徑

2.5.3 安裝pycharm5.0.3

2.5.4破解pycharm5.0.3

https://jingyan.baidu.com/article/455a9950baf5bea167277877.html 百度經驗

2.5.5漢化pycharm5.0.3

http://www.sd173.com/html/3458.html

3、python的基本語法

3.1變量與字符編碼

         什麼是變量,變量的功能?變量用來存東西的,Python屬於動態類型語言,直接使用就能夠了,無需申請。

         變量賦值,好比a=1,就定義了變量a,而且給a賦值爲1

         變量命名規則:

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,ralse,return,try,while,with,yield.

常量,通常用大寫字母表示。可是Python中無法定義常量。

變量a=變量b,表示a和b都指在同一個空間,修改變量a的值,不會影響變量b的值。

字符編碼:

最開始:ASCII  255  佔用1字節

1980年,GB2312,表示7000多箇中文字符

1995年,GBK1.0,表示20000+中文字符

2000年,GB18030,表示27000+中文字符

Unicode,2個字節

Utf-8,英文1個字節,中文三個字節

Python2,默認不支持中文,使用需添加:#-*-coding: utf-8 -*-

Python3默認支持中文。

註釋:當行註釋#;

      多行註釋:」」」註釋內容」」」(Python中,單引號和雙引號含義同樣)

3.2輸入輸出

3.2.1輸入

         Python的輸入,用的input()函數。默認輸入的都是字符串。

         name=input(「what is your name?」)

其中「」之間的爲提示內容。

若是你想讓輸入的是整形數據,就須要用強制性類型轉換。

  age=int(input("age: "))

再輸入時候,咱們可能會遇到輸入密碼的狀況,那麼如何隱藏輸入內容呢?

1 import getpass
2 username=input("username:")
3 passwd = getpass.getpass("passwd")
4 print(username,passwd)
View Code

 

3.2.2輸出

Python 輸出,用的是print()函數。

#格式化輸出:方法1:
name=input("what is your name?")
age=int(input("age:"))
job=input("job:")
salary = input("salary:")
info='''
-------info of %s  ---------
Name:%s
Age :%d
Job :%s
Salary: %s
''' %(name,name,age,job,salary)
print(info)
#格式化輸入方法2:
name=input("what is your name?")
age=int(input("age:"))
job=input("job:")
salary = input("salary:")
info2='''
-------info of {_name} ---------
Name:{_name}
Age :{_age}
Job :{_job}
Salary: {_salary}
''' .format(_name=name,
            _age=age,
            _job=job,
            _salary=salary)
print(info2)
#格式化輸出,方法3
name=input("what is your name?")
age=int(input("age:"))
job=input("job:")
salary = input("salary:")
info3='''
-------info of {0} ---------
Name:{0}
Age :{1}
Job :{2}
Salary: {3}
''' .format(name,age,job,salary)
print(info3)

3.3分支

Python中分支語句須要注意的事情:用縮進代替括號  強制 縮進,省掉格式符,清晰,全部代碼都要頂格寫。

使用時候:注意冒號「:」。

"""
#分支結構 
單分支結構
雙分支結構
if 條件:
    語句
else:
    語句
多分支:
if 條件:
    語句
elif 條件:
    語句
elif ……

else:
    語句
    
分支的嵌套:
if  條件:
    語句
    if 條件:
        語句
else:
    語句
"""
分支的結構

 

1)、if …else 語法格式舉例

求兩個數的最大值

a=int(input("請輸入一個整數:"))
b=int(input("請輸入一個整數"))
if a>b:
    print(a)
else:
    print(b)

  

if elif  else 語法格式

a=int(input("請輸入一個整數:"))
b=int(input("請輸入一個整數:"))
c=int(input("請輸入一個整數:"))
if b <= a >= c:    #   b>=a>=c and c>=a>=b
    print(a)
elif a <= b >= c:
    print(b)
else:
    print(c)
求三個數的最大值
#猜數字
#隨機生成一個數(1-100),輸入一個數,若是是5,
# 輸出猜對了 ,若是猜小了,就輸出猜小了,
# 若是猜大了,就輸出猜大了
from random import randint
a=randint(1,100)
b=int(input("請輸入一個整數:"))
if a == b :
    print("猜對了")
elif b>a:
    print("大了大了。。。。。。")
else:
    print("小了小了。。。。")

 

 1 #實現用戶登陸
 2 import re
 3 import getpass
 4 name=input("Please input username:")
 5 passwd=getpass.getpass("Please input passwd:")
 6 f=open('user.txt')
 7 for line in  f.readlines():
 8     #print(line,end='')
 9     if(name==re.split(":",line)[0]):
10         if(passwd==re.split(":",line)[1]):
11             if(1==int(re.split(":",line)[2])):
12                 print("Welcome,login success!")
13             else:
14                 print("The user is locked!")
15         else:
16             print("The password is wrong!")
17 else18      print("The username is not exist!")
19 
20 f.close()
實現用戶登陸的例子
1 daxiong:daxiong123:1
2 zhangsan:zhangsan123:0
3 lisi:lisi123:0
4 wangwu:wangwu123:1
user.txt

 

 

 

3.4循環

Python中循環通常使用while和for。循環要注意break語句和continue語句。其中break,表示終止當前循環,continue表示終止本次循環。

注意:

"""
#循環結構
while 條件:
循環體
"""

1)while True:(死循環)

2)條件判斷循環:

 1 age_of_oldboy = 56
 2 
 3 count = 0
 4 while count <3:
 5     guess_age = int(input("guess age:") )
 6     if guess_age == age_of_oldboy :
 7         print("yes, you got it. ")
 8         break
 9     elif guess_age > age_of_oldboy:
10         print("think smaller...")
11     else:
12         print("think bigger!")
13     count +=1
14     if count == 3:
15         countine_confirm = input("do you want to keep guessing..?")
16         if countine_confirm != 'n':
17             count =0
18 #代碼 源自於老男孩視頻
條件判斷循環

  3)while…else語句

  表示while條件不成立,執行else語句。

while 條件:
語句
else:#當條件不知足的時候,執行else語句
語句

  舉例:

  

age_of_oldboy = 56

count = 0
while count <3:
    guess_age = int(input("guess age:") )
    if guess_age == age_of_oldboy :
        print("yes, you got it. ")
        break
    elif guess_age > age_of_oldboy:
        print("think smaller...")
    else:
        print("think bigger!")
    count +=1
else:
    print("you have tried too many times..fuck off")
#源自於老男孩視頻
while...else

  

  4) for循環

for 變量 in 取值範圍:
循環體

         首先介紹range()函數,表示生成一個序列。默認步長爲1。

  (range(10)= 0 1 2 3 4 5 6 7 8 9)

  range(10)等價於range(0,10,1)

  range(0,10,3)=(0,3,6,9)

  

1 for i in range(10):
2     print(i)
for 循環舉例

  5) for…else語句

  for   else  語句 (for循環的語句正常執行完,就會執行else語句)

 1 age_of_oldboy = 56
 2 for i in range(3):
 3     guess_age = int(input("guess age:") )
 4     if guess_age == age_of_oldboy :
 5         print("yes, you got it. ")
 6         break
 7     elif guess_age > age_of_oldboy:
 8         print("think smaller...")
 9     else:
10         print("think bigger!")
11 else:
12     print("you have tried too many times..fuck off")
13 #代碼源自老男孩視頻
for ...else

  6)break,continue的舉例

  

1 for i in range(10):
2     print('----------',i)
3     for j in range(10):
4         print(j)
5         if j >5:
6             break
7             #continue
8         print(j)

4做業:實現三級循環:

  

 1 #實現三級菜單,練習break和continue
 2 province={'sichuan':'guangyuan',
 3           'henan':'pingdingshan',
 4           'hebei':'handan'
 5           }
 6 city={'guangyuan':'jiange',
 7       'pingdingshan':'lushan',
 8       'handan':'cixian'
 9     }
10 country={'jiange':'jianmenguan',
11          'lushan':'shirenshan',
12          'cixian':'taihangshan'}
13 #q表示退出,b表示返回上一級,n表示進入下一級
14 q='q'
15 b='b'
16 n='n'
17 #循環間的標誌,爲告終束循環使用
18 flag=0
19 while True:
20     if flag==1:
21         break
22     for city1 in province:
23             print(province[city1])
24     request=input("Quit?(q)Next?(n)")
25     if request==q:
26         break
27     else:
28         while True:
29             if flag == 1 :
30                 break
31             for country1 in city:
32                 print(city[country1])
33             request1=input("Quit?(q)Next?(n)Back(b)")
34             if request1==q:
35                 flag=1
36                 break
37             elif request1==b:
38                break
39             else:
40                 for key in country:
41                     print(country[key])
42                 request2=input("Quit?(q)Back(b)")
43                 if request2==b:
44                     continue
45                 else:
46                     flag=1
47                     break
三級循環

 5.練習

1)判斷一個年是不是閏年

year=int(input("請輸入一個年份:"))
if (year%4==0 and year%100!=0) or year%400==0 :
    print(year,"是閏年")
else:
    print(year,"不是閏年")
View Code

2)#給出一個百分制成績,要求輸出成績等級 A,B,C,D,E。

# 90分以上爲A,80-89分爲B,70-79爲C,60-69位D,
# 60分如下爲 掛了,若是輸入的數據不是0-100,輸出錯誤
s=int(input())
if 90<=s<=100:
    print("A")
elif 80<=s<=89:
    print("B")
elif 70<=s<=79:
    pring("C")
elif 60<=s<=69:
    print("D")
elif 0<=s<60:
    print("掛了")
else:
    print("輸入錯誤")
View Code

 3).求一元二次方程的根。

 

View Code

4).求1000-2000之間有多少個閏年

i=1000
b=0
while i<=2000:
    if (i%4==0 and i%100!=0) or i%400==0:
        b=b+1
    i=i+1
print(b)
View Code

5)#雞兔同籠問題,有90只腳,有30個頭,求多少隻雞,多少隻兔

x=0
while x<=30:
    y=30-x
    if 2*x+4*(30-x)==90:
        print(x,y)
    x=x+1
View Code

6)#水仙花數100-999,#例如:153=1*1*1+5*5*5+3*3*3

i=100
while i<1000:
    ge=i%10
    shi=i//10%10
    bai=i//100
    s=ge**3+shi**3+bai**3
    if s==i:
        print(s)
    i=i+1
View Code

7)#猜數字升級版,隨機生成一個數(1-20),輸入一個數,若是是相等, 輸出猜對了 ,程序結束, 若是猜小了,就輸出猜小了,繼續猜, 若是猜大了,就輸出猜大了,繼續猜.

只有三次猜的機會,超過三次,遊戲結束
import random
a=random.randint(1,20)
b=int(input("...."))
i=1
while b!=a and i<3:
    if a>b:
        print("小了。。。")
        b=int(input("...."))
    else:
        print("大了。。。。")
        b = int(input("...."))
    i=i+1
else:#b==a
    if a==b:
        print("猜對了")
    else:
        print("次數用完,遊戲結束")
方法一
import random
a=random.randint(1,20)
b=int(input("...."))
i=1
while i<3:
    if a>b:
        print("小了。。。")
        b=int(input("...."))
    elif a<b:
        print("大了。。。。")
        b = int(input("...."))
    else:
        print("猜對了")
    i=i+1
else:
    print("遊戲結束")
方法2

8)猴子偷桃:

猴子吃桃問題:猴子第一天摘下若干個桃子,立即吃了一半,
還不癮,又多吃了一個 次日早上又將剩下的桃子吃掉一半,
又多吃了一個。之後天天早上都吃了前一天剩下的一半零一個。
到第10天早上想再吃時,見只剩下一個桃子了。
求第一天共摘了多少。
i=1
a=1
while i<10:
    a=(a+1)*2
    i=i+1
print(a)
View Code

9)設計一個驗證用戶密碼程序,用戶只有三次機會輸入錯誤!

 1 username="xinan"
 2 password="123456"#123456
 3 i=1
 4 while i<=3:
 5     username1=input("....")
 6     password1=input("..密碼")
 7     if username==username1 and password==password1:
 8         print("登陸成功")
 9         break
10     else:
11         print("用戶名和密碼不匹配")
12     i=i+1
13 else:
14     print("超過三次,退出")
View Code

10)#百錢百雞,一百錢買一百雞,小雞一錢三個,母雞三錢一個, 公雞五錢一個,求買了幾隻小雞,母雞,公雞。

for x in range(0,100,3):
    for y in range(0,33,1):
        z=100-x-y
        if x/3+3*y+5*z==100 and z>=0:
            print(x,y,z)
View Code

11)#有紅、黃、綠三種顏色的球,其中紅球 3 個, 黃球 3 個,綠球 6 個。 先將這 12 個球混合放在一個盒子中, 從中任意摸出 8 個球,編程計算摸出球的各類顏色搭配。

#輸出狀況總數
i=0
for red in range(0,4,1):
    for yellow in range(4):
        for green in range(0,7,1):
            if red + yellow + green == 8:
                print(red,yellow,green)
                i=i+1
print(i)
View Code

12)#判斷一個數是不是素數

View Code

13)求兩個數的最小公倍數和最大公約數

14)求1000之內的全部的素數, 要求輸出時:每行5個,上下對齊

相關文章
相關標籤/搜索