python生態(tài)圈
- WEB開發(fā)(Django the framework for perfectionist with deadlines,Tornado, flask,bottle)
- 人工智能(PyTorch)
- 云計(jì)算(openstack)
- 金融量化分析,自動(dòng)化交易
- 爬蟲(Scrapy, Request, BeautifuSoap, urllib)
- 自動(dòng)化運(yùn)維,測(cè)試
- 科學(xué)運(yùn)算
- 游戲開發(fā)
誰在使用python
編程語言的介紹
為什么要編程?
由于計(jì)算機(jī)只能識(shí)別二進(jìn)制,但是人不能只輸入二進(jìn)制,這樣開發(fā)的速度太慢.所以最好的方法就是輸入簡(jiǎn)單的指令,計(jì)算機(jī)能將指令轉(zhuǎn)化成二進(jìn)制執(zhí)行.
有哪些編程語言
編程語言總體分為: 機(jī)器語言, 匯編語言, 高級(jí)語言.
機(jī)器語言
由于計(jì)算機(jī)只能接受二進(jìn)制代碼,因此,用二進(jìn)制代碼0和1描述的指令稱為機(jī)器語言,全部機(jī)器指令的集合構(gòu)成計(jì)算機(jī)的機(jī)器語言.
機(jī)器語言屬于低級(jí)語言.
機(jī)器語言視微處理器理解和使用的,盡管機(jī)器語言好像視很復(fù)雜的,但是它視有規(guī)律的.
存在100000多種機(jī)器語言指令.
匯編語言
匯編語言的實(shí)質(zhì)和機(jī)器語言是相同的, 都是直接對(duì)硬件操作,只不過指令采用了英文縮寫的標(biāo)識(shí)符,更容易識(shí)別和記憶.
高級(jí)語言
和匯編語言相比,它不但將許多相關(guān)的機(jī)器指令合成為單條指令,并且去掉了與具體操作相關(guān)但與完成工作無關(guān)的細(xì)節(jié),例如堆棧,寄存器等;
高級(jí)語言所編寫的程序不能直接被計(jì)算機(jī)識(shí)別,必須經(jīng)過轉(zhuǎn)換才能被執(zhí)行.
高級(jí)語言又分為編譯類和解釋型.
編譯類
編譯是指在應(yīng)用源程序執(zhí)行之前,將程序源代碼"翻譯"成目標(biāo)代碼(機(jī)器語言),因此其目標(biāo)程序可以脫離其語言環(huán)境獨(dú)立執(zhí)行(編譯后的可執(zhí)行文件,是cpu可以理解的二進(jìn)制的機(jī)器碼組成的),使用比較方便,效率高.但是應(yīng)用程序一旦需要修改,必須先修改源代碼,再重新編譯生成目標(biāo)文件才能執(zhí)行.
編譯后程序運(yùn)行時(shí)不需要在重新翻譯,直接使用編譯結(jié)果就可以了.程序執(zhí)行效率高,依賴編譯器,跨平臺(tái)性差.如c,c++,delphi等
解釋型
執(zhí)行方式類似于我們生活中"同聲翻譯", 應(yīng)用程序源代碼一邊由相應(yīng)的解釋器"翻譯"成目標(biāo)語言,一邊執(zhí)行,因此效率比較低,而且不能生成課獨(dú)立執(zhí)行的可執(zhí)行文件,應(yīng)用程序不能脫離其解釋器,但是這種方式比較靈活,可以動(dòng)態(tài)地調(diào)整,修改應(yīng)用程序. 如Python,Java,PHP,Ruby等語言.
Python的發(fā)展史
創(chuàng)始人: Guido van Rossum,仁慈的獨(dú)裁者
1989年圣誕節(jié),名字來自于monty python's flying circus.
1989年 誕生
1991年 第一個(gè)python編譯器誕生,c語言編寫
1999年 第一個(gè)web框架誕生
1994年 python1.0 lambda map filter reduce
2000年 python2.0 加入內(nèi)存回收機(jī)制
2004年 python2.4 web框架Django誕生
2006年 python2.5
2008年 python2.6
2008年 python3.0
2010年 python2.7
2009年 3.1
2011年 3.3
2012年 3.4
2014年 宣布python2.7支撐到2020年,不會(huì)有2.8版本,所有用戶需要盡快將項(xiàng)目遷移到python3.4+
2015年 3.5
2016年 3.6
python解釋器種類
- Cpython 官方版解釋器
- Ipython 基于Cpython上的一個(gè)交互式解釋器
- Jpython 運(yùn)行在java平臺(tái)上的python解釋器
- pypy 它的目標(biāo)是執(zhí)行速度,采用了JIT技術(shù),對(duì)Python代碼進(jìn)行動(dòng)態(tài)編譯(注意不是解釋),所以可以顯著的提高python代碼的執(zhí)行速度.
- IronPython .Net平臺(tái)上的python解釋器.
精通各種語言的HelloWorld
- 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!");
}
Python基礎(chǔ)語法
變量
計(jì)算機(jī)主要作用是進(jìn)行運(yùn)算,python進(jìn)行數(shù)值運(yùn)算十分簡(jiǎn)單,和我們平時(shí)用計(jì)算器一樣.
變量的作用: Variable are used to store information to be reference and manipulated in a computer program. They also provide a way of labeling data with a descriptive name.
聲明變量: name = "fbo"
變量的定義規(guī)范:
- 變量名只能是字母,數(shù)字或下劃線的任意組合;
- 變量名的第一個(gè)字符不能是數(shù)字;
- 系統(tǒng)保留字不能作為變量名
and as assert break class continue def del elif else exec finally for from global if import in is lambda not or pass print raise return try while with yield
定義方式:
- 駝峰式
AgeOfSomeone = 56
- 下滑線式
age_of_someone = 56
(官方推薦)
常量:
常量是指不變的量,python中約定俗成變量名全部大寫代表常量AGE_OF_SOMEONE = 56
用戶交互和注釋
讀取用戶輸入:
name = input("What is your name?")
print(name)
代碼注釋用#
python的基本數(shù)據(jù)類型
- 數(shù)字
- 整數(shù) int (python3全都是int類型)
- 長(zhǎng)整型 long
- 浮點(diǎn)型 float
- 復(fù)數(shù)型
- 字符串
- 文本 str
- 字節(jié) bytes
- 布爾
- True/False
格式化輸出
- %s 字符串
- %d 數(shù)字
- %f 浮點(diǎn)數(shù)
name = input("Name:")
age = input("Age:")
job = input("Job:")
hometown = input("HomeTown:")
info = """
------------- info of %s ----------
Name: %s
Age: %s
Job: %s
Hometown: %s
-------------- end -------------------
""" % ( name, name, age, job, hometown)
運(yùn)算符
- 算數(shù)運(yùn)算
- 比較運(yùn)算
- 邏輯運(yùn)算
- 賦值運(yùn)算
- 成員運(yùn)算
- 身份運(yùn)算
- 位運(yùn)算
流程控制
if...else....
猜年齡小程序guess_age.py
:
age = 26
user_guess = int(input("your guess:"))
if user_guess == age:
print("congratulation")
elif user_guess > age:
print("Too High!")
else:
print("Too lower!")
作業(yè):
- 需求:
- 匹配成績(jī)的小程序,成績(jī)有ABCDE5個(gè)等級(jí),與分?jǐn)?shù)的對(duì)應(yīng)關(guān)系 A --> 90-100 B --> 80-90 C --> 60-79 D --> 40-59 E--> 0-39
score = int(input("Please input your score:").strip())
if score >= 90 and score <= 100:
print("A")
elif score >= 80 and score < 90:
print("B")
elif score >= 60 and score < 80:
print("C")
elif score >= 40 and score < 60:
print("D")
elif score >=0 and score < 40:
print("E")
else:
print("輸入不正確")
while
寫個(gè)程序從0到100, 每次循環(huán)+1:
count = 0
while count <= 100:
print("loop", count)
count += 1
練習(xí)1:
打印1到100的偶數(shù)?
num = 1
while num <= 100:
if not num % 2:
print(num)
num += 1
練習(xí)2:
循環(huán)打印1-100, 第50次不打印,第60-80次, 打印對(duì)應(yīng)值的平方?
num = 1
while num <= 100:
if num < 50 or 50< num < 60 or num > 80:
print(num)
elif 60 <= num <= 80:
print(num * num)
num += 1
死鎖:
只要條件成立就一直執(zhí)行
count = 0
while True:
print("forever 21", count)
count += 1
continue和break
- break 用于完全結(jié)束一個(gè)循環(huán), 跳出循環(huán)體執(zhí)行循環(huán)后面的語句
- continue 只終結(jié)本次循環(huán),接著執(zhí)行后面的循環(huán).
練習(xí)1:
猜年齡,允許用戶最多嘗試3次,3次都沒猜對(duì)的話,就直接出局了,如果猜對(duì)了,打印恭喜信息并退出.
# 設(shè)定年齡
age = 22
# 計(jì)數(shù)
count = 0
while count < 3:
guess = int(input("我猜我猜我猜猜猜>>>").strip())
if guess == age:
print("恭喜您,回答正確!")
elif guess > age:
print("哎呀,整大了...")
else:
print("往大里整撒...")
count += 1
練習(xí)2:
練習(xí)1升級(jí),嘗試3次沒有對(duì)的話,如果想要繼續(xù)玩的話,回答y或者Y就繼續(xù)讓玩三次,輸入n或N的話退出.
# 設(shè)定年齡
age = 22
# 計(jì)數(shù)
count = 0
while count < 3:
guess = int(input("我猜我猜我猜猜猜>>>").strip())
if guess == age:
print("恭喜您,回答正確!")
elif guess > age:
print("哎呀,整大了...")
else:
print("往大里整撒...")
count += 1
if count == 3:
choice = input("是否繼續(xù)?(y/n or Y/N)").strip()
if choice == "y" or choice == "Y":
count = 0
continue
elif choice == "N" or "n":
break
while...else...
與其他語言不同,python中還有一個(gè)while...else語句;
如果while正常執(zhí)行完成,沒有被break, 就會(huì)執(zhí)行else語句.
count = 0
while count <=5:
print("loop", count)
#if count == 3:
# break
count += 1
else:
print("loop run over")
練習(xí)題:
- 簡(jiǎn)述編譯型與解釋型語言的區(qū)別抱慌,且分別列出你知道的哪些語言屬于編譯型,哪些屬于解釋型?
編譯型語言,需要先進(jìn)行編譯,生成二進(jìn)制(機(jī)器可識(shí)別的)可執(zhí)行文件才可以執(zhí)行,特點(diǎn)是開發(fā)周期長(zhǎng),代碼修改后須重新編譯,由于可執(zhí)行文件機(jī)器可以直接識(shí)別,所以運(yùn)行速度快,但是無法跨平臺(tái);代表語言是c和c++等
解析型語言不需要編譯就可以直接執(zhí)行,解析型語言的運(yùn)行依賴系統(tǒng)上的解釋器,邊解釋變運(yùn)行,所以解釋型語言開發(fā)周期短,修改靈活,但是運(yùn)行速度要低于編譯型語言;代表語言為java, python, php, ruby等
- 執(zhí)行 Python 腳本的兩種方式是什么?
python3 name.py
chmod u+x nam.py && ./name.py
- Pyhton 單行注釋和多行注釋分別用什么?
單引號(hào)標(biāo)識(shí)單行注釋, 三個(gè)引號(hào)標(biāo)識(shí)多行注釋.
- 布爾值分別有什么?
False
和True
- 聲明變量注意事項(xiàng)有那些?
變量中只能包含字母,數(shù)字以及下滑線, 必須以字母或者下滑線為手寫字母,駝峰式或者下劃線式命名,避免用中文定義變量,常量約定俗成用全部大寫字母.
- 如何查看變量在內(nèi)存中的地址?
id(var)
- 寫代碼
- 實(shí)現(xiàn)用戶輸入用戶名和密碼,當(dāng)用戶名為 seven 且 密碼為 123 時(shí),顯示登陸成功,否則登陸失敗!
- 實(shí)現(xiàn)用戶輸入用戶名和密碼,當(dāng)用戶名為 seven 且 密碼為 123 時(shí),顯示登陸成功,否則登陸失敗,失敗時(shí)允許重復(fù)輸入三次
- 實(shí)現(xiàn)用戶輸入用戶名和密碼,當(dāng)用戶名為 seven 或 alex 且 密碼為 123 時(shí),顯示登陸成功,否則登陸失敗,失敗時(shí)允許重復(fù)輸入三次
count = 0
while count < 3:
user_name = input("Name: ").strip
user_password = input("Password: ").strip()
if user_name == "seven" or user_name == "alex" and user_password == "123":
print("歡迎歸來", user_name)
else:
print("登錄失敗,請(qǐng)重試")
count += 1
- 寫代碼
a. 使用while循環(huán)實(shí)現(xiàn)輸出2-3+4-5+6...+100 的和
b. 使用 while 循環(huán)實(shí)現(xiàn)輸出 1,2,3,4,5, 7,8,9, 11,12
c. 使用while 循環(huán)輸出100-50啦膜,從大到小众雷,如100塔逃,99,98...,到50時(shí)再?gòu)?循環(huán)輸出到50垃僚,然后結(jié)束
d. 使用 while 循環(huán)實(shí)現(xiàn)輸出 1-100 內(nèi)的所有奇數(shù)
e. 使用 while 循環(huán)實(shí)現(xiàn)輸出 1-100 內(nèi)的所有偶數(shù)
# a
sum = 0
count = 2
while count <= 100:
if count % 2:
sum -= count
else:
sum += count
count += 1
print(sum)
# b
count = 1
while True:
if count == 13:
break
else:
print(count)
count += 1
# c
count = 100
while count >= -1:
if count >=50:
print(count)
else:
print(49 - count)
count -= 1
# d e
count = 0
while count < 100:
if count % 2:
print("奇數(shù)", count)
else:
print("偶數(shù)", count)
count += 1
- 現(xiàn)有如下兩個(gè)變量,請(qǐng)簡(jiǎn)述 n1 和 n2 是什么關(guān)系?
n1 = 123456
n2 = n1
n2和n1的值相同,指向同一變量
- 制作趣味模板程序(編程題)
需求:等待用戶輸入名字届吁、地點(diǎn)错妖、愛好,根據(jù)用戶的名字和愛好進(jìn)行任意顯示
如:敬愛可愛的xxx疚沐,最喜歡在xxx地方干xxx
info = "敬愛可愛的%s暂氯,最喜歡在%s地方干%s"
user_name = input("Name:>>>").strip()
place = input("Place:>>>").strip()
like = input("Like:>>>").strip()
print(info % (user_name, place, like))
- 輸入一年份,判斷該年份是否是閏年并輸出結(jié)果亮蛔。(編程題)
注:凡符合下面兩個(gè)條件之一的年份是閏年痴施。 (1) 能被4整除但不能被100整除。 (2) 能被400整除。
year = int(input("請(qǐng)輸入年份:>>>").strip())
if year % 4 == 0 and year % 100 != 0 or year % 400 == 0:
print("年份", year, "是閏年")
else:
print("年份", year, "不是閏年")
- 假設(shè)一年期定期利率為3.25%晾剖,計(jì)算一下需要過多少年锉矢,一萬元的一年定期存款連本帶息能翻番?(編程題)
count = 0
bill = 1
fee = 0.0325
while True:
count += 1
bill *= (1 + fee)
print(bill)
if bill >= 2:
print(count,"年后能連本帶利息翻翻")
break
作業(yè)
編寫登陸接口
基礎(chǔ)需求:
- 讓用戶輸入用戶名密碼
- 認(rèn)證成功后顯示歡迎信息
- 輸錯(cuò)三次后退出程序
升級(jí)需求:
- 可以支持多個(gè)用戶登錄 (提示齿尽,通過列表存多個(gè)賬戶信息)
- 用戶3次認(rèn)證失敗后沽损,退出程序,再次啟動(dòng)程序嘗試登錄時(shí)循头,還是鎖定狀態(tài)(提示:需把用戶鎖定的狀態(tài)存到文件里)
import os
user_list = [
["xiaoli", "123"],
["zhangsan", "123"]
]
count = 0
flag = 0
print("開始".center(80,"-"))
while count < 3:
# 用戶輸入賬號(hào)密碼
name = input("請(qǐng)輸入您的賬號(hào):>>>").strip()
password = input("請(qǐng)輸入您的密碼:>>>").strip()
# 判斷鎖定文件是否存在
if os.path.isfile(name):
print(name, "您已經(jīng)被鎖定,請(qǐng)離開!")
if [name, password] in user_list:
print("歡迎歡迎,熱烈歡迎", name)
break
else:
buff = name
print("輸入錯(cuò)誤!")
# 判斷是否三次輸入的都是同一用戶
# 如果是,則鎖定用戶
if count == 0:
buff = name
elif count == 1:
if buff == name:
flag = 1
else:
if flag == 1 and name == buff:
print("您已經(jīng)被鎖定,請(qǐng)離開!")
with open(name, "w") as f:
f.write("lock")
count += 1
print("結(jié)束".center(80,'-'))