天天看點

Day1 task1思考題練習題

01變量、運算符與資料類型

思考題

Python是怎麼誕生的?Python之父是誰?

Python的創始人為荷蘭人Guido van Rossum。1989年聖誕節期間,在阿姆斯特丹,Guido為了打發聖誕節的無趣,決心開發一個新的腳本解釋程式,作為ABC語言的一種繼承。之是以選中Python(大蟒蛇的意思)作為該程式設計語言的名字,是取自英國20世紀70年代首播的電視喜劇《Monty Python’s Flying Circus》。

Python已經成為最受歡迎的程式設計語言之一。自從2004年以後,python的使用率呈線性增長。Python 2于2000年10月16日釋出,穩定版本是Python 2.7。Python 3于2008年12月3日釋出,不完全相容Python 2。 2011年1月,它被TIOBE程式設計語言排行榜評為2010年度語言。

  • Python和C++(或者C)的差別在哪?

Python語言的最大特點:簡單,明确,優雅。

  1. 簡單:Python奉行簡潔主義,易于讀寫,它使你能夠專注于解決問題而不是去搞明白語言本身。
  2. 免費:Python是開源軟體。這意味着你不用花一分錢便能複制、閱讀、改動它,這也是Python越來越優秀的原因——它是由一群希望看到一個更加優秀的Python的人創造并經常改進着的。
  3. 相容性:Python相容衆多平台,是以開發者不會遇到使用其他語言時常會遇到的困擾。
  4. 面向對象:Python既支援面向過程,也支援面向對象程式設計。在面向過程程式設計中,程式員複用代碼,在面向對象程式設計中,使用基于資料和函數的對象。
  5. 豐富的庫:Python标準庫确實很龐大。它可以幫助你處理各種工作,包括正規表達式、文檔生成、單元測試、線程、資料庫、網頁浏覽器、CGI、FTP、電子郵件、XML、XML-RPC、HTML、WAV檔案、密碼系統、GUI(圖形使用者界面)、Tk和其他與系統有關的操作。
  6. 規範的代碼:Python采用強制縮進的方式使得代碼具有極佳的可讀性。
  7. 可擴充性和可嵌入性。如果你需要你的一段關鍵代碼運作得更快或者希望某些算法不公開,你可以把你的部分程式用C或C++編寫,然後在你的Python程式中使用它們。你可以把Python嵌入你的C/C++程式,進而向你的程式使用者提供腳本功能。
  • 相較于Python2,Python3做了哪些大的改進?

Python3的改進

  1. print 在python2 是關鍵字,python3 是函數
  2. python3 不再有unicode對象, str 即為unicode
  3. 除法的變化。python 3 除法傳回浮點數 5/2 = 2.5
  4. 優化的super() ,直接調用父類的方法
  5. 進階的解包操作, 如 a, b, *c= range(10)
  6. 限定關鍵字參數, 參數特别多的時候指定參數以防搞混
  7. 性能優化等

練習題

  • 怎樣對python中的代碼進行注釋?

單行注釋用#号,python不會解析#後的内容

【例子】

print('hello world') # 列印hello world
#我是個單行注釋
           

多行注釋 在python中用 ‘’’ 或 “”" (三個單引号\雙引号)

【例子】

'''
存放注釋的内容
'''
           
  • python有哪些運算符,這些運算符的優先級是怎樣的?

運算符

  1. 算術運算符
運算符 含義 示例

+

加:兩個對象相加,或者一進制加 x + y

-

減:兩個對象相減,或得到負數 x - y

*

乘:兩個操作數相乘,或是傳回一個被重複若幹次的字元串 x * y

/

除:兩個操作數相除(總是浮點數) x / y

%

取模:傳回除法(

/

)的餘數
x % y(x/y 的餘數)

//

取整除(地闆除):傳回商的整數部分 x // y

**

幂:傳回 x 的 y 次幂 x ** y
2. 比較運算符
運算符 含義 示例

>

大于:如果左操作數大于右操作數,則為 True x > y

<

小于:如果左操作數小于右操作數,則為 True x < y

==

等于:如果兩個操作數相等,則為 True x == y

!=

不等于:如果兩個操作數不相等,則為 True x != y

>=

大于等于:如果左操作數大于或等于右操作數,則為 True x >= y

<=

小于等于:如果左操作數小于或等于右操作數,則為 True x <= y
  1. 指派運算符
運算符 示例 等價于

=

x = 5

x = 5

(相同)

+=

x += 5

x = x + 5

-=

x -= 5

x = x - 5

*=

x *= 5

x = x * 5

/=

x /= 5

x = x / 5

%=

x %= 5

x = x % 5

//=

x //= 5

x = x // 5

**=

x **= 5

x = x ** 5

&=

x &= 5

x = x & 5

|=

x |= 5

x = x | 5

^=

x ^= 5

x = x ^ 5

>>=

x >>= 5

x = x >> 5

<<=

x <<= 5

x = x << 5

  1. 位運算符
運算符 含義 示例

&

按位與(AND):參與運算的兩個值的兩個相應位都為1,則該位的結果為1;否則為0 x & y

|

按位或(OR):參與運算的兩個值的兩個相應位有一個為1,則該位的結果為1;否則為0 x | y

~

按位翻轉/取反(NOT):對資料的每個二進制位取反,即把 1 變為 0 ,把 0 變為 1 ~x

^

按位異或(XOR):當兩個對應的二進制位相異時,結果為1 x ^ y

>>

按位右移 :運算數的各個二進制位全部右移若幹位 x >> 2

<<

按位左移:運算數的各個二進制位全部左移若幹位,高位丢棄,地位不補 0 x << 2
  1. 邏輯運算符
運算符 含義 示例
and x and y 邏輯與:如果 x 為 False,傳回 false;否則傳回 y 的計算值
or x or y 邏輯或:如果 x 是非 0,傳回 x 的值;否則傳回 y 的計算值
not not x 邏輯非:如果 x 為 False,傳回 True;如果 x 為 True,傳回 False
  1. 成員運算符
運算符 含義 示例

in

如果在指定序列中找到值/變量,傳回 True;否則傳回 False 5 in x

not in

如果在指定序列中沒有找到值/變量,傳回 True;否則傳回 False 5 not in x
  1. 身份運算符

身份運算符用于檢查兩個值(或變量)是否位于存儲器的同一部分。

注意: 兩個變量相等,并不意味着它們也相同。

運算符 含義 示例

is

如果操作數相同,則為 True(引用同一個對象) x is True

is not

如果操作數不相同,則為 True(引用不同的對象) x is not True

運算符優先級

【注】從低到高

運算符 描述
lambda Lambda表達式
or 布爾“或”
and 布爾“與”
not x 布爾“非”
in,not in 成員測試
is,is not 同一性測試
<,<=,>,>=,!=,== 比較
| 按位或
^ 按位異或
& 按位與
<<,>> 移位
+,- 加法與減法
*,/,% 乘法、除法與取餘
+x,-x 正負号
~x 按位翻轉
** 指數
x.attribute 屬性參考
x[index] 下标
x[index:index] 尋址段
f(arguments…) 函數調用
(experession,…) 綁定或元組顯示
[expression,…] 清單顯示
{key:datum,…} 字典顯示
‘expression,…’ 字元串轉換
  • python 中 is, is not 與 ==, != 的差別是什麼?

  1. is, is not 對比的是兩個變量的記憶體位址
  2. ==, != 對比的是兩個變量的值
  3. 比較的兩個變量,指向的都是位址不可變的類型(str等),那麼is,is not 和 ==,!= 是完全等價的。
  4. 對比的兩個變量,指向的是位址可變的類型(list,dict等),則兩者是有差別的。
  • python 中包含哪些資料類型?這些資料類型之間如何轉換?

python 基本資料類型

數字;字元串;元組;清單;集合;字典

資料類型轉化

str表示字元串,而int表示整數,float是浮點數,需要轉換什麼就在前面寫上什麼類型

【例子】

數字轉字元串

str()

>>> a=123
>>> type(a)
<type 'int'>
>>> b=str(a)
>>> type(b)
<type 'str'>
           

字元串轉數字

内容必須都是數字才可以轉換

>>> a='123'
>>> b=int(a)
>>> print b
123
           

02 leetcode 習題 136

給定一個非空整數數組,除了某個元素隻出現一次以外,其餘每個元素均出現兩次。找出那個隻出現了一次的元素。

嘗試使用位運算解決此題。

思路

按位異或操作具有以下性質:

1.任何數與其本身的按位異或都是0

2.任何數與0的按位異或都是其本身

于是想到:若對整數數組每一個元素都一次按位異或處理那麼最後的結果必然是隻出現一次的數。

編寫程式如下:

class Solution:
    def SingleNumber(self, nums: List[int]) -> int:
        SingleNumber = 0
        for num in nums:
            SingleNumber ^= num
        return SingleNumber