阿里云天池 Python訓練營Task1:從變量到異常處理

本學習筆記為阿里云天池龍珠計劃Python訓練營的學習內容,學習鏈接為:https://tianchi.aliyun.com/specials/promotion/aicamppython?spm=5176.22758685.J_6770933040.1.6f103da1tESyzu

目錄

一、學習知識點概要

二、學習內容

I.變量、運算符與數據類型

II.位運算

III.條件語句

IV.循環語句?

V.異常處理

三、學習問題與解答

四、學習思考與總結


一、學習知識點概要

Python 是一種通用編程語言,其在科學計算和機器學習領域具有廣泛的應用。

本次學習包括以下內容:

  • 變量、運算符與數據類型
  • 位運算
  • 條件語句
  • 循環語句
  • 異常處理

二、學習內容

I.變量、運算符與數據類型

1.注釋

在Python中,#表示注釋,作用于整行,''' '''或""" """表示區間注釋,在三個引號之間的信息為注釋,例如:

"""
多行注釋
三個雙引號
"""
print('Hello World!')
#單行注釋'''
多行注釋
三個單引號
'''

2.位運算符

位運算符
運算符含義功能
&按位與如果兩個相應的二進制位都為1,則該位的結果值為1;否則為0
|按位或兩個相應的二進制位中只要有一個為1,該位的結果值為1
^按位異或若參加運算的兩個二進制位同號則結果為0(假)異號則結果為1(真)
~取反~是一個單目(元)運算符,用來對一個二進制數按位取反,即將0變1,將1變0
>>左移左移運算符是用來將一個數的各二進制位全部左移n位,右補0
<<右移表示將a的各二進制位右移n位,移到右端的低位被舍棄,對無符號數,高位補0

?

對位運算符的運用見后文“位運算”部分

3.三目運算符

對分支語句,例如:

a=2
b=5
if a>b:value=a
else:value=b
print(value)   #輸出結果為5

?在Python中可以運用更簡潔的寫法:

a=2
b=5
value=a if a>b else b 
print(value)

?使用 if else 實現三目運算符(條件運算符)的格式如下:

exp1 if contion else exp2

condition 是判斷條件,exp1 和 exp2 是兩個表達式。如果 condition 成立(結果為真),就執行 exp1,并把 exp1 的結果作為整個表達式的結果;如果 condition 不成立(結果為假),就執行 exp2,并把 exp2 的結果作為整個表達式的結果。

4.其他運算符

運算符名稱

示例

in存在1 in [1,2,3]
not in不存在4 not in [1,2,3]
is'hello' is 'hello'
is not不是'hello' is not 'Hello'

運算結果為布爾型數據,以上示例結果都為True。

注:

  • 比較的兩個變量,指向的都是地址不可變的類型(str等),那么is,is not 和 ==,!= 是完全等價的。
  • 對比的兩個變量,指向的是地址可變的類型(list,dict,tuple等),則兩者是有區別的。

5.基本數據類型與轉換

基本數據類型有整形(int)、浮點型(float)、布爾型(boolean),可通過type()方法查看對象的數據類型,還可以用isinstance()方法查看兩種數據的類型是否相同。

  • ? ?整形(int)即為內容為整數的數據,如:5,112,-32等;
  • ? ?浮點型(float)為含有小數點的數據,如:1.0,2.3e-07等;
  • ? ?布爾型(boolean)數據只能取兩個值,True和False。但布爾型的數據參與數字運算時,用1和0分別代表True和False。

如果我們想保留浮點型的小數點后n位,可以引入decimal包里的Decimal對象和getcontext()方法來實現,Decimal對象的默認精度為28位,例如:

import decimal
from decimal import Decimal
x=Decimal(2)/Decimal(7)
print(x)#結果為0.2857142857142857142857142857,有28位小數decimal.getcontext().prec=5
x=Decimal(2)/Decimal(7)
print(x)#結果為0.28571,有5位小數

?創建布爾型變量除了直接給變量賦值和用運算符之外,還可以用bool(x)方法創建。其中x可以是

  • 基本類型:整型、浮點型、布爾型
  • 容器類型:字符串、元組、列表、字典和集合

當x為整形或浮點型時,若x=0或x=0.0,bool(x)就為False,否則為True;

當x為容器類型的數據時,若x為空,bool(x)為False,若x 為非空,bool(x)為True。

類型轉換

  • 轉換為整型,用int(x)
  • 轉換為浮點型,用float(x)
  • 轉換為字符串,用str(object=' ')

II.位運算

位運算是直接對整數在二進制中進行操作。我們的電腦電路設計都是基于二進制的,所以在二進制層面效率很高。通常位運算多用在對程序效率要求很高的場景。

1.原碼、反碼、補碼

二進制有三種不同的表示形式:原碼、反碼和補碼,計算機內部用補碼表示。

  • 原碼:就是對象的二進制表示。原碼的首位為符號位,用于表示數據的正負,當對象為非負數時符號位為0,負數時符號位為1。取該整數的絕對值的二進制,再加上符號位。原碼只是為了讓我們看二進制更直觀,直接看出正負數和比較大小。但原碼不是計算機保存的二進制,所以不能直接參與計算。例:
  • 整數絕對值絕對值的二進制值原碼
    55000010100000101
    -55000010110000101
  • 反碼:反碼主要是針對負數的處理,非負數的反碼就是原碼。在原碼的基礎上,符號位不變,其他數值位取反,即把1變成0,把0變成1。反碼是為了在計算機中存儲二進制,但非真正的二進制值,所以也不直接參與計算。例如:
  • 整數絕對值原碼反碼
    550000010100000101
    -551000010111111010
  • 補碼:補碼主要也是針對負數。非負數不變,而負數是在反碼的基礎上加1。
  • 整數絕對值反碼補碼
    550000010100000101
    -551111101011111011

2.按位運算

上文提到的位運算符就是對兩個數的補碼直接進行操作。主要是在對應的位置上進行邏輯運算。以5和3為例:

運算符&|^~>><<
表達式5&35|35^3

~5

5<<2

3>>1

二進制表示

00000101

&

00000011

00000101

|

00000011

00000101

^

00000011

~00000101

00000101<<2

00000011>>1

運算結果

00000001

1

00000111

7

00000110

6

11111010

-6

00010100

20

00000001

1

?

3.利用位運算實現快速計算

  • 通過 <<>>?快速計算2的倍數問題:
n << 1  #計算 n*2
n >> 1  #計算 n/2,負奇數的運算不可用
n << m  #計算 n*(2^m),即乘以 2 的 m 次方
n >> m  #計算 n/(2^m),即除以 2 的 m 次方
1 << n  #計算 2^n,即2的n次方
  • ?通過 ^ 快速交換兩個整數:
a^=b
b^=a
a^=b
  • ?通過 a&(-a) 快速獲取a的最后為 1 位置的整數

III.條件語句

Python的條件語句為if-elif-else語句,與其他語言的用法相似,此處不多贅述。

assert關鍵詞

這個關鍵詞我們稱之為“斷言”,當這個關鍵詞后邊的條件為 False 時,程序自動崩潰并拋出AssetionError的異常。在進行單元測試時,可以用來在程序中置入檢查點,只有條件為 True 才能讓程序正常工作。

a=5
b=6
assert a>b#AssertionError

IV.循環語句?

Python中的While循環和For循環與其他語言中的用法相似,此處只寫一些不同的地方。

1.while - else循環

while - else循環的結構如下:

while? 布爾表達式:代碼塊
else:代碼塊

當while循環正常執行完的情況下,執行else輸出,如果while循環中執行了跳出循環的語句(如break),將不執行else代碼塊的內容。

2.for - else循環

與while - else循環類似,當for循環正常執行完的情況下,執行else輸出,如果在循環途中執行了跳出循環的語句,則不會執行else的內容。例如:

for 循環變量 in 可迭代對象:代碼塊
else:代碼塊

3.range()方法

range() 返回的是一個可迭代對象(類型是對象),而不是列表類型, 所以打印(print)的時候不會打印列表。

range(start=0,stop,step=1),range()方法有三個參數:start,stop,step

  • start: 計數從 start 開始。默認是從 0 開始。例如range(5)等價于range(0, 5);
  • stop: 計數到 stop 結束,但不包括 stop。例如:range(0, 5) 是[0, 1, 2, 3, 4]沒有5
  • step:步長,默認為1。例如:range(0, 5) 等價于 range(0, 5, 1)

4.enumerate()方法

enumerate(sequence,start=0),參數start可省略,默認為0

  • sequence:一個序列、迭代器或其他支持迭代對象。
  • start:下標起始位置。
  • 返回 enumerate(枚舉) 對象

enumerate(X)不僅返回了X中的元素,還順便給該元素一個索引值 (默認從 0 開始)。此外,用enumerate(X,j)還可以確定索引起始值為j

enumerate()方法可與for循環配合使用:

seq=['one', 'two', 'three']
for i, element in enumerate(seq):print(i, element)''' 
0 one
1 two
2 three
'''

?5.continue語句

continue語句用于終止本輪循環并開始下一輪循環,如:

for i in range(1,11):if i != 10:print('i不是10')continueprint('i是10')'''
i不是10
i不是10
i不是10
i不是10
i不是10
i不是10
i不是10
i不是10
i不是10
i是10
'''

6.pass語句

pass語句的意思是“跳過”,如果你在需要有語句的地方不寫任何語句,那么解釋器會提示出錯,pass語句就是用來解決這個問題的。其作用是為了保持程序結構的完整性。盡管pass語句不做任何操作,但如果暫時不確定要在一個位置放上什么樣的代碼,可以先放置一個pass語句,讓代碼可以正常運行。

7.推導式

  • 列表推導式
#推導式結構:[ expr for value in collection [if condition] ]x = [-4, -2, 0, 2, 4]
y = [a * 2 for a in x]
print(y)# [-8, -4, 0, 4, 8]
  • ?元組推導式
#推導式結構( expr for value in collection [if condition] )a = (x for x in range(10))
print(a)# <generator object <genexpr> at 0x0000025BE511CC48>print(tuple(a))# (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
  • 字典推導式
#推導式結構{ key_expr: value_expr for value in collection [if condition] }b = {i: i % 2 == 0 for i in range(10) if i % 3 == 0}
print(b)# {0: True, 3: False, 6: True, 9: False}
  • 集合推導式
#推導式結構{ expr for value in collection [if condition] }c = {i for i in [1, 2, 3, 4, 5, 5, 6, 4, 3, 2, 1]}
print(c)# {1, 2, 3, 4, 5, 6}

V.異常處理

異常就是運行期檢測到的錯誤。計算機語言針對可能出現的錯誤定義了異常類型,某種錯誤引發對應的異常時,異常處理程序將被啟動,從而恢復程序的正常運行。

1.Python標準異常總結

  • BaseException:所有異常的?基類
  • Exception:常規異常的?基類
  • StandardError:所有的內建標準異常的基類
  • ArithmeticError:所有數值計算異常的基類
  • FloatingPointError:浮點計算異常
  • OverflowError:數值運算超出最大限制
  • ZeroDivisionError:除數為零
  • AssertionError:斷言語句(assert)失敗
  • AttributeError:嘗試訪問未知的對象屬性
  • EOFError:沒有內建輸入,到達EOF標記
  • EnvironmentError:操作系統異常的基類
  • IOError:輸入/輸出操作失敗
  • OSError:操作系統產生的異常(例如打開一個不存在的文件)
  • WindowsError:系統調用失敗
  • ImportError:導入模塊失敗的時候
  • KeyboardInterrupt:用戶中斷執行
  • LookupError:無效數據查詢的基類
  • IndexError:索引超出序列的范圍
  • KeyError:字典中查找一個不存在的關鍵字
  • MemoryError:內存溢出(可通過刪除對象釋放內存)
  • NameError:嘗試訪問一個不存在的變量
  • UnboundLocalError:訪問未初始化的本地變量
  • ReferenceError:弱引用試圖訪問已經垃圾回收了的對象
  • RuntimeError:一般的運行時異常
  • NotImplementedError:尚未實現的方法
  • SyntaxError:語法錯誤導致的異常
  • IndentationError:縮進錯誤導致的異常
  • TabError:Tab和空格混用
  • SystemError:一般的解釋器系統異常
  • TypeError:不同類型間的無效操作
  • ValueError:傳入無效的參數
  • UnicodeError:Unicode相關的異常
  • UnicodeDecodeError:Unicode解碼時的異常
  • UnicodeEncodeError:Unicode編碼錯誤導致的異常
  • UnicodeTranslateError:Unicode轉換錯誤導致的異常

2.Python標準警告總結

  • Warning:警告的基類
  • DeprecationWarning:關于被棄用的特征的警告
  • FutureWarning:關于構造將來語義會有改變的警告
  • UserWarning:用戶代碼生成的警告
  • PendingDeprecationWarning:關于特性將會被廢棄的警告
  • RuntimeWarning:可疑的運行時行為(runtime behavior)的警告
  • SyntaxWarning:可疑語法的警告
  • ImportWarning:用于在導入模塊過程中觸發的警告
  • UnicodeWarning:與Unicode相關的警告
  • BytesWarning:與字節或字節碼相關的警告
  • ResourceWarning:與資源使用相關的警告

3.try - except語句

'''
try - except語句結構如下:try:檢測范圍
except Exception[as reason]:出現異常后的處理代碼
'''
try:f = open('test.txt')print(f.read())f.close()
except OSError:print('打開文件出錯')# 打開文件出錯
  • 首先執行try子句(即“檢測范圍”那塊代碼)
  • 若無異常發生,則忽視except語句
  • 若發生異常,那try子句的余下部分會被忽略。同時如果異常的類型和except后的異常類型相同,則會執行except子句
  • 如果一個異常沒有與任何的except匹配,這個異常將會被傳遞到上層的try中
  • 一個try語句可能包含多個except子句,分別來處理不同的特定的異常。最多只有一個分支會被執行
  • 一個except子句可以同時處理多個異常,這些異常將被放在一個括號里成為一個元組。

4.try - except - finally語句

無論try子句執行時有沒有發生異常,最終都會執行finally子句。如果執行try子句時發生異常,且沒有任何except語句把異常攔截的話,會先執行finally子句再拋出異常。結構為:

try:檢測范圍
except:出現異常后的處理代碼
finally:無論結果如何都執行這塊代碼

5.try - except - else語句

如果在執行try子句時沒有發生異常,則執行else子句。結構為:

try:檢測范圍
except:出現異常后的處理代碼
else:如果沒有異常執行這塊代碼

6.raise語句

raise語句用于拋出一個指定的異常。例如:

try:raise NameError('HiThere')
except NameError:print('An exception flew by!')# An exception flew by!

三、學習問題與解答

在學習Task1時,出現的主要問題在于對位運算的不了解,例如在用位運算實現整數集合時,就不知道為什么那些整數集合可以表示為01的長串信息。通過在網上搜索才了解到是以01長串的位置來表示這個整數位置上的符號是否是1來表示這個整數在不在集合里,然后那些運算也就能看明白了。

四、學習思考與總結

現在還有的問題基本上都是例程里出現的一些陌生的函數方法不知道什么作用,我還需要通過繼續學習才能弄明白。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387413.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387413.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387413.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python回收機制

目錄 Python的垃圾回收機制引子:一、什么是垃圾回收機制&#xff1f;二、為什么要用垃圾回收機制&#xff1f;三、垃圾回收機制原理分析1、什么是引用計數&#xff1f;2、引用計數擴展閱讀&#xff1f;&#xff08;折疊&#xff09;Python的垃圾回收機制 引子: 我們定義變量會申…

安裝openssl-devel命令

centos&#xff1a; yum install openssl-devel ubuntu&#xff1a; sudo apt-get install openssl sudo apt-get install libssl-dev

阿里云天池 Python訓練營Task2: Python基礎練習:數據結構大匯總 學習筆記

本學習筆記為阿里云天池龍珠計劃Python訓練營的學習內容&#xff0c;學習鏈接為&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 目錄 一、學習知識點概要 二、學習內容 I.列表&#xff08;list…

windows文件與Linux文件互轉

使用命令 unix2dos filename dos2unix filename

1G.小a的排列(C++)

小a的排列&#xff08;C&#xff09; 點擊做題網站鏈接 題目描述 小a有一個長度為n的排列。定義一段區間是"萌"的&#xff0c;當且僅當把區間中各個數排序后相鄰元素的差為1現在他想知道包含數x,y的長度最小的"萌"區間的左右端點 也就是說&#xff0c;我們…

阿里云天池 Python訓練營Task3: Python基礎進階:從函數到高級魔法方法 學習筆記

本學習筆記為阿里云天池龍珠計劃Python訓練營的學習內容&#xff0c;學習鏈接為&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 目錄 一、學習知識點概要 二、學習內容 I.函數 1.定義自己的函…

C# 獲取句柄程序

這個小程序需要用到系統API&#xff0c;也就是需要用到user32中的三個函數。 第一個&#xff1a;WindowFromPoint 返回一個窗口句柄 第二個&#xff1a;GetWindowText 獲取窗口標題 第三個&#xff1a;GetClassName 獲取類名 當然&#xff0c;最重要的一點就是要引用命名空間…

HBase安裝配置

HBase的安裝配置&#xff1a; 4臺主機&#xff1a;hdp0 hdp1 hdp2 hdp3 hdp0 hdp1 跑HMaster hdp2 hdp3 跑HRegionServer 將HBase解壓之后 1、確保安裝ZooKeeper&#xff1b; 2、修改hbase-env.sh export JAVA_HOME/.../jdk export HBASE_MANAGES_ZKfalse //使用外部的…

python cook讀書筆記第2章字符串和文本

使用多個界定符分割字符串 line asdf fjdk; afed, fjek,asdf, fooimport re# line re.split(r[;,\s]\s*,line)# print(line)# [asdf, fjdk, afed, fjek, asdf, foo]"""當你使用 re.split() 函數時候&#xff0c;需要特別注意的是正則表達式中是否包含一個括號…

centos7安裝oracle12c 一

本文 基本參考了下面這篇文章http://blog.csdn.net/gq5251/article/details/42004035 和http://www.linuxidc.com/Linux/2017-08/146528.htm 但是改正了一些錯誤操作系統:CentOS Linux release 7.2.1511 (Core) oracle: oarcle (12.1.0.2.0) - Standard Edition (SE2)幾點要注…

Bigtable的些許重點

分布式數據庫系統 針對于海量數據&#xff0c;可擴展&#xff0c;高吞吐量&#xff0c;低時延 不支持關系模型 通過row和column進行索引&#xff0c;row和column可以是任意字符串 所存儲的數據也是字符串 Bigtable是一個map&#xff0c;value是array of bytes&#xff0c;通…

阿里云天池 Python訓練營Task4: Python數據分析:從0完成一個數據分析實戰 學習筆記

本學習筆記為阿里云天池龍珠計劃Python訓練營的學習內容&#xff0c;學習鏈接為&#xff1a;https://tianchi.aliyun.com/specials/promotion/aicamppython?spm5176.22758685.J_6770933040.1.6f103da1tESyzu 一、學習知識點概要 本次主要通過阿里云天池的賽題【Python入門系…

JMETER從JSON響應中提取數據

如果你在這里&#xff0c;可能是因為你需要使用JMeter從Json響應中提取變量。 好消息&#xff01;您正在掌握掌握JMeter Json Extractor的權威指南。作為Rest API測試指南的補充&#xff0c;您將學習掌握Json Path Expressions 所需的一切。 我們走吧&#xff01;并且不要驚慌&…

centos7安裝oracle12c 二

環境&#xff1a;CentOS7VMware12&#xff0c;分配資源&#xff1a;CPU&#xff1a;2顆&#xff0c;內存&#xff1a;4GB&#xff0c;硬盤空間&#xff1a;30GB Oracle 12C企業版64位 下載地址&#xff1a;http://www.oracle.com/technetwork/database/enterprise-edition/down…

阿里云天池 Python訓練營Task5:Python訓練營測試 學習筆記

一、學習知識點概要 本次是Python訓練營的測試&#xff0c;在45分鐘內完成25題&#xff0c;滿分100分及格80分。題目主要考察Task1到Task3里面的Python基礎知識。在我隨到的25道題里&#xff0c;知識點有&#xff1a; 變量&#xff08;包括數據類型和容器類型&#xff09;運算…

centos7安裝oracle12c 三

場景描述&#xff1a;我在自己電腦的虛擬機上linux環境下安裝oracle11g數據庫。 Linux版本為&#xff1a;CentOS release 6.8 (Final)&#xff0c;Oracle版本為&#xff1a;linux.x64_11gR2 問題描述&#xff1a;在oracle安裝到Prerequisite Checks這一步的時候&#xff0c;出現…

mysql刪除一條記錄

mysql如何刪除一條記錄delete from 表名 where 條件實例&#xff1a;use db1delete from tb1 where id 1; 轉載于:https://www.cnblogs.com/effortsing/p/10393229.html

HBase體系結構

HBase HBase是Apache Hadoop的數據庫&#xff0c;基于HDFS文件系統 random,realtime read/write access to Big Data 開源、分布式、可擴展、面向列 larger tables--billions of rows X millions of columns 不支持表鏈接操作 不支持事務處理 HBase存儲的數據從邏輯上來…

《屬性數據分析引論》 部分課后習題R語言實踐(第三章、第四章)

目錄 前言 第三章 廣義線性模型 習題3.18 a小題 b小題 c小題 d小題 習題3.19 a小題 b小題 c小題 第四章 Logistic回歸 習題4.1 a小題 b小題 c小題 d小題 e小題 習題4.2 a小題 b小題 c小題 d小題 小結 前言 習題選自高等教育出版社譯制&#xff0c;Alan A…

Linux下SVN搭建

在Linux系統中搭建svn服務所需要用到的軟件叫做subversion&#xff0c;可以通過yum來進行安裝&#xff0c;如圖 安裝好軟件后第一件事就是創建一個倉庫目錄 [rootserver1 ~]# mkdir /svn 使用svn自帶命令建立倉庫 [rootserver1 ~]# svnadmin create /svn 進入該倉庫&#xff0c…