[19/09/16-星期一] Python的運算符和條件判斷語句

1、運算符iphone

(1)算術運算符函數

   + 加法運算符(若是是兩個字符串之間進行加法運算,則會進行拼串操做)優化

      a = 10 + 5    計算編碼

      a = 'hello' + ' ' + 'world'   拼串spa

   - 減法運算符命令行

      a = 10 - 5    計算code

      a = 5 - True   bool型也是int型,沒有錯誤,輸出4對象

      a = a - 2  用變量a的值減去2,而後再賦值給ablog

        a = 'hello' - 'h'   TypeError,類型錯誤排序

   * 乘法運算符(若是將字符串和數字相乘,則會對字符串進行復制操做,將字符串重複指定次數)

      a = 5 * 5

   / 除法運算符,運算時結果總會返回一個浮點類型,區別於Java,c

      a = 10 / 5 輸出2.0

      a = 5 / 2 輸出2.5

       a = 5 / 0   ZeroDivisionError: division by zero,除數不能爲0

      a = 10 / 3  除不盡,輸出3.333333335 近似值

   // 整除,只會保留計算後的整數位,總會返回一個整型。

      a = 10 // 3  輸出3

      a = 5 // 2   輸出2

   ** 冪運算,求一個值的幾回冪。

      a = 2 ** 2  輸出4

      a = 10 ** 5  10的5次冪輸出100000

      a = 16 ** 0.5    求16的平方根 輸出4

   % 取模,求兩個數相除的餘數

      a = 10 % 5  輸出 0

      a = 10 % 4  輸出 2

      a = 10 % 3  輸出 1

      a = 10 % 2  輸出 0

(2)賦值運算符

     = 能夠將等號右側的值賦值給等號左側的變量

     += a += 5 至關於 a = a + 5

     -= a -= 5 至關於 a = a - 5

     *= a *= 5 至關於 a = a * 5

    **= a **= 5 至關於 a = a ** 5   冪次方

    /= a /= 5 至關於 a = a / 5   除數留浮點數

     //= a //= 5 至關於 a = a // 5   整除

     %= a %= 5 至關於 a = a % 5  取餘

(3)關係運算符

   關係運算符用來比較兩個值之間的關係,總會返回一個布爾值,若是關係成立,返回True,不然返回False

  > 比較左側值是否大於右側值  result = 10 > 20 輸出 False

   >= 比較左側的值是否大於或等於右側的值  result = 10 >= 10 輸出 True;  result = 2 > True 輸出 True

      result = 2 > '1' TypeError: '>' not supported between instances of 'int' and 'str' 

   < 比較左側值是否小於右側值

   <= 比較左側的值是否小於或等於右側的值

   == 比較兩個對象的值是否相等

    result = 1 == 1   # True

    result = 'hello' == 'hello'   # True

    result = 'abc' == 'bcd'   # False

    result = 'abc' != 'bcd'   # True

    result = 1 == True   # True

   != 比較兩個對象的值是否不相等

     相等和不等比較的是對象的值,而不是id

   is 比較兩個對象是不是同一個對象,比較的是對象的id

   is not 比較兩個對象是否不是同一個對象,比較的是對象的id

    result = 1 is True # False

    result = 1 is not True # True

   擴展:

    result = '2' > '1'  # True

    result = '2' > '11'  # True

     在Python中能夠對兩個字符串進行大於(等於)或小於(等於)的運算, 當對字符串進行比較時,實際上比較的是字符串的Unicode編碼

  比較兩個字符串的Unicode編碼時,是逐位比較的,利用該特性能夠對字符串按照字母順序進行排序,可是對於中文來講意義不是特別大

   注意:若是不但願比較兩個字符串的Unicode編碼,則須要將其轉換爲數字而後再比較

    result = 'a' > 'b'  # False

    result = 'c' < 'd'  # True

    result = 'ab' > 'b'  # False

     print(int('2') > int('11'))

(4)邏輯運算符

  邏輯運算符主要用來作一些邏輯判斷

     not 邏輯非    能夠對符號右側的值進行非運算 

       對於布爾值,非運算會對其進行取反操做,True變False,False變True,對於非布爾值,非運算會先將其轉換爲布爾值,而後再取反

    and 邏輯與  能夠對符號兩側的值進行與運算

       只有在符號兩側的值都爲True時,纔會返回True,只要有一個False就返回False

      與運算是找False的,Python中的與運算是短路的與,若是第一個值爲False,則再也不看第二個值。

    or 邏輯或  能夠對符號兩側的值進行或運算

      或運算兩個值中只要有一個True,就會返回True,或運算是找True的

      Python中的或運算是短路的或,若是第一個值爲True,則再也不看第二個值
    如:

      a = True  a = not a    對a進行非運算

      a = 1
      a = ''
      a = not a  非布爾值先轉換後取反
        print('a =',a) 

      result = True and True   # True
      result = True and False   # False
      result = False and True   # False
      result = False and False   # False

       print(result)

      True and print('你猜我出來嗎?') 第一個值是True,會看第二個值,因此print()會執行
       False and print('你猜我出來嗎?')第一個值是False,不會看第二個值,因此print()不會執行


      result = True or True   # True
      result = True or False   # True
      result = False or True   # True
      result = False or False   # False

      False or print('你猜我出來嗎?') 第一個值爲False,繼續看第二個,因此打印語句執行
      True or print('你猜我出來嗎?') 第一個值爲True,不看第二個,因此打印語句不執行

   其餘:非布爾值的與或運算 當咱們對非布爾值進行與或運算時,Python會將其當作布爾值運算,最終會返回原值      

   與運算的規則,與運算是找False的,若是第一個值是False,則直接返回第一個值,不然返回第二個值。

   或運算的規則,或運算是找True的,若是第一個值是True,則直接返回第一個值,不然返回第二個值。

    True and True
    result = 1 and 2   # 2
    True and False
    result = 1 and 0   # 0
     False and True
    result = 0 and 1   # 0
     False and False
    result = 0 and None   # 0

    True or True
    result = 1 or 2   # 1
     True or False
    result = 1 or 0   # 1
     False or True
    result = 0 or 1   # 1
     False or False
    result = 0 or None   # None

 (5)條件運算符

   語法:語句1  if 條件表達式 else 語句2

    條件運算符在執行時,會先對條件表達式進行求值判斷,若是判斷結果爲True,則執行語句1,並返回執行結果。不然執行語句2

    print('a的值比較大!') if a > b else print('b的值比較大!')

    max = a if a > b else b,若是a>b成立,執行語句1: max=a,把a的值賦值給變量max,如果不成立執行語句2:max=b,b賦值給max

(6)優先級

  結合數學常識,先乘除後加減,實在不行加小括號。表格中越往下優先級越高。

  and的優先級高於or .   1 or 2 and 3 輸出爲1    等價於 1 or (2 and 3)

  邏輯運算符能夠連着使用。result = 1 < 2 < 3   至關於 1 < 2 and 2 < 3

2、條件判斷語句

   (1)if語句

# 條件判斷語句(if語句)
# 語法:if 條件表達式 : 
#           代碼塊
# 執行的流程:if語句在執行時,會先對條件表達式進行求值判斷,
#   若是爲True,則執行if後的語句
#   若是爲False,則不執行
# 默認狀況下,if語句只會控制緊隨其後的那條語句,若是但願if能夠控制多條語句,
#   則能夠在if後跟着一個代碼塊
# 代碼塊
#   代碼塊中保存着一組代碼,同一個代碼塊中的代碼,要麼都執行要麼都不執行
#   代碼塊就是一種爲代碼分組的機制
#   若是要編寫代碼塊,語句就不能緊隨在:後邊,而是要寫在下一行
#   代碼塊以縮進開始,直到代碼恢復到以前的縮進級別時結束
#   魯迅說過:
#       世上原本沒有路,走的人多了天然就有了!
#       xxxx
#   yyyy....
# 縮進有兩種方式,一種是使用tab鍵,一種是使用空格(四個)
#   Python的官方文檔中推薦咱們使用空格來縮進
#   Python代碼中使用的縮進方式必須統一
#   "translate_tabs_to_spaces": true,     

# if False : print('你猜我出來麼?')

num = 10
# if num > 10 : print('num比10大!')
# print('誰也管不了我')

if False :
    print(123)
    print(456)
    print(789)
    print(101112)
# print('hello')

num = 28

# 可使用邏輯運算符來鏈接多個條件,
#   若是但願全部條件同時知足,則須要使用and
#   若是但願只要有一個條件知足便可,則須要使用or
# if num > 10 and num < 20 :
#     print('num比10大,num比20小!')

# if 10 < num < 20 :
#     print('num比10大,num比20小!')

# 在命令行讓用戶輸入一個用戶名,獲取用戶輸入,並進行判斷
# 若是用戶輸入的用戶名是admin,則顯示歡迎管理員光臨
# 若是用戶輸入的是其餘的用戶名,則什麼也不作

# input()函數
# 該函數用來獲取用戶的輸入
# input()調用後,程序會當即暫停,等待用戶輸入
#   用戶輸入完內容之後,點擊回車程序纔會繼續向下執行
#   用戶輸入完成之後,其所輸入的的內容會以返回值得形式返回
#   注意:input()的返回值是一個字符串
#   input()函數中能夠設置一個字符串做爲參數,這個字符串將會做爲提示文字顯示
# a = input('請輸入任意內容:')
# print('用戶輸入的內容是:',a)
# input()也能夠用於暫時阻止程序結束

# 獲取用戶輸入的用戶名
username = input('請輸入你的用戶名:')
# 判斷用戶名是不是admin
if username == 'admin' :
    print('歡迎管理員光臨!')
# 讓用戶在控制檯中輸入一個年齡
# age = int(input('請輸入你的年齡:'))

# 若是用戶的年齡大於18歲,則顯示你已經成年了
# if age >= 18 :
#     print('你已經成年了~~~')

# if-else語句
# 語法: 
#   if 條件表達式 :
#       代碼塊
#   else :
#       代碼塊
# 執行流程:
#   if-else語句在執行時,先對if後的條件表達式進行求值判斷
#       若是爲True,則執行if後的代碼塊
#       若是爲False,則執行else後的代碼塊

age = 7
if age > 17 :
    print('你已經成年了~~')
else :
    print('你還未成年~~')

 

  (2)if-elif-if語句

# if-elif-else語句
# 語法:
#   if 條件表達式 :
#       代碼塊
#   elif 條件表達式 :
#       代碼塊
#   elif 條件表達式 :
#       代碼塊
#   elif 條件表達式 :
#       代碼塊
#   else :
#       代碼塊
#       
# 執行流程:
#   if-elif-else語句在執行時,會自上向下依次對條件表達式進行求值判斷,
#       若是表達式的結果爲True,則執行當前代碼塊,而後語句結束
#       若是表達式的結果爲False,則繼續向下判斷,直到找到True爲止
#       若是全部的表達式都是False,則執行else後的代碼塊
#   if-elif-else中只會有一個代碼塊會執行

age = 210

# if age > 200 :
#     print('活着可真沒勁呢!')
# elif age > 100 :
#     print('你也是老大不小了!')
# elif age >= 60 :
#     print('你已經退休了!')
# elif age >= 30 :
#     print('你已是中年了!')
# elif age >= 18 :
#     print('你已經成年了!')
# else :
#     print('你仍是個小孩!')

age = 68

if age >= 18 and age < 30 :
    print('你已經成年了!')
elif age >= 30 and age < 60 :
    print('你已經中年了!')
elif age >= 60 :
    print('你已經退休了!')

 

 

練習

# 練習1:
#     編寫一個程序,獲取一個用戶輸入的整數。而後經過程序顯示這個數是奇數仍是偶數。
# 獲取用戶輸入的整數
# num = int(input('請輸入一個任意的整數:'))

# # 顯示num是奇數仍是偶數
# if num % 2 == 0 :
#     print(num , "是偶數")
# else :
#     print(num , '是奇數')


# 練習2:
#     編寫一個程序,檢查任意一個年份是不是閏年。
#     若是一個年份能夠被4整除不能被100整除,或者能夠被400整除,這個年份就是閏年
# year = int(input('請輸入一個任意的年份:'))
# # 檢查這個年份是不是閏年
# # year % 4 == 0 and year % 100 != 0 or year % 400 == 0
# if year % 4 == 0 and year % 100 != 0 or year % 400 == 0 :
#     print(year,'是閏年')
# else :
#     print(year,'是平年')

# 練習3:
#     我家的狗5歲了,5歲的狗至關於多大年齡的人呢?
#     其實很是簡單,狗的前兩年每年至關於人類的10.5歲,而後每增長一年就增長四歲。
#     那麼5歲的狗相等於人類的年齡就應該是10.5+10.5+4+4+4 = 33歲 

#     編寫一個程序,獲取用戶輸入的狗的年齡,而後經過程序顯示其至關於人類的年齡。
#     若是用戶輸入負數,請顯示一個提示信息  核心代碼 print("狗的年齡是:",2*10.5+(year-2)*4)

# dog_age = float(input('請輸入狗的年齡:'))
# like_person_age = 0
# 檢查用戶輸入的是不是負數
# if dog_age < 0 :
#     print('你的輸入不合法!')
# # 若是狗的年齡在兩歲如下(包含兩歲)
# elif dog_age <= 2 :
#     # 直接將當前的年齡乘以10.5
#     like_person_age = dog_age * 10.5
# # 若是狗的年齡在兩歲以上
# else :
#     # 計算前兩歲至關於人類的年紀
#     like_person_age = 2 * 10.5
#     # 計算超過兩歲的部分相對於人類的年紀,並進行相加
#     like_person_age += ( dog_age - 2 ) * 4

# if dog_age > 0 :
#     print(dog_age,'歲的狗,年紀至關於',like_person_age,'歲的人')
#     

# 在if也能夠去嵌套if,代碼塊是能夠嵌套的,每增長一個縮進的級別,代碼塊就低一級
# 檢查用戶的輸入是否合法
# if dog_age > 0 :
#     # 若是狗的年齡在兩歲如下(包含兩歲)
#     if dog_age <= 2 :
#         # 直接將當前的年齡乘以10.5
#         like_person_age = dog_age * 10.5
#     # 若是狗的年齡在兩歲以上
#     else :
#         # 計算前兩歲至關於人類的年紀
#         like_person_age = 2 * 10.5
#         # 計算超過兩歲的部分相對於人類的年紀,並進行相加
#         like_person_age += ( dog_age - 2 ) * 4

#     print(dog_age,'歲的狗,年紀至關於',like_person_age,'歲的人')
# else :
#     print('請輸入一個合法的年齡!')


# 練習4:
#     從鍵盤輸入小明的期末成績:
#         當成績爲100時,'獎勵一輛BMW'
#         當成績爲[80-99]時,'獎勵一臺iphone'
#         當成績爲[60-79]時,'獎勵一本參考書'
#         其餘時,什麼獎勵也沒有

# 獲取小明的成績
# score = float(input('請輸入你的期末成績(0-100):'))

# # 打印分割線
# print("="*40)

# # 檢查用戶的輸入是否合法
# if 0 <= score <= 100 :
#     # 判斷髮給的獎勵
#     if score == 100 :
#         print('寶馬,拿去玩!')
#     elif score >= 80 :
#         print('蘋果手機,拿去玩!')
#     elif score >= 60 :
#         print('參考書,拿去玩!')
#     else :
#         print('棍子一根!')
# else :
#     # 用戶輸入的不合法,彈出一個友好提示
#     print('你輸入的內容不合法,拉出去斃了!')


# 練習5:
#     你們都知道,男大當婚,女大當嫁。那麼女方家長要嫁女兒,固然要提出必定的條件:
#         高:180cm以上; 富:1000萬以上; 帥:500以上;
#         若是這三個條件同時知足,則:'我必定要嫁給他'
#         若是三個條件有爲真的狀況,則:'嫁吧,比上不足,比下有餘。'
#         若是三個條件都不知足,則:'不嫁!'

# 獲取用戶的三個數據,身高、財富、顏值
height = float(input('請輸入你的身高(釐米):'))
money = float(input('請輸入你的財富(萬):'))
face = float(input('請輸入你的顏值(平方釐米):'))

# 判斷到底嫁不嫁
# 若是這三個條件同時知足,則:'我必定要嫁給他'
if height > 180 and money > 1000 and face > 500 :
    print('我必定要嫁給他!')
# 若是三個條件有爲真的狀況,則:'嫁吧,比上不足,比下有餘。'
elif height > 180 or money > 1000 or face > 500 :
    print('嫁吧,比上不足,比下有餘。')
# 若是三個條件都不知足,則:'不嫁!'
else :
    print('不嫁!')

  (3)循環語句

# 循環語句
# 循環語句可使指定的代碼塊重複指定的次數
# 循環語句分紅兩種,while循環 和 for循環
# while循環
# 語法:
#   while 條件表達式 :
#       代碼塊
#   else :
#       代碼塊
# 執行流程:
#   while語句在執行時,會先對while後的條件表達式進行求值判斷,
#       若是判斷結果爲True,則執行循環體(代碼塊),
#       循環體執行完畢,繼續對條件表達式進行求值判斷,以此類推,
#       直到判斷結果爲False,則循環終止,若是循環有對應的else,則執行else後的代碼塊

# 條件表達式恆爲True的循環語句,稱爲死循環,它會一直運行,慎用!
# while True :
#     print('hello')

# 循環的三個要件(表達式)
# 初始化表達式,經過初始化表達式初始化一個變量
# i = 0

# # 條件表達式,條件表達式用來設置循環執行的條件
# while i < 10 :
#     print(i)
#     # 更新表達式,修改初始化變量的值
#     i += 1

# 建立一個執行十次的循環
i = 0
while i < 10 :
    i += 1
    print(i,'hello')
else :
    print('else中的代碼塊')

練習

# 求100之內全部的奇數之和
# 獲取全部100之內數
# i = 0
# # 建立一個變量,用來保存結果
# result = 0
# while i < 100 :
#     i += 1
#     # 判斷i是不是奇數
#     if i % 2 != 0:
#         result += i

# print('result =',result)

# 獲取100之內全部的奇數
# i = 1
# while i < 100:
#     print(i)
#     i += 2

# 求100之內全部7的倍數之和,以及個數
i = 7 
# 建立一個變量,來保存結果
result = 0
# 建立一個計數器,用來記錄循環執行的次數
# 計數器就是一個變量,專門用來記錄次數的變量
count = 0
while i < 100:
    # 爲計數器加1
    count += 1
    result += i
    i += 7    

print('總和爲:',result,'總數量爲:',count)
# 水仙花數是指一個 n 位數(n≥3 ),它的每一個位上的數字的 n 次冪之和等於它自己(例如:1**3 + 5**3 + 3**3 = 153)。
# 求1000之內全部的水仙花數

# 獲取1000之內的三位數
i = 100
while i < 1000:

    # 假設,i的百位數是a,十位數b,個位數c
    # 求i的百位數
    a = i // 100
    # 求i的十位數
    # b = i // 10 % 10  b=(i%100)//10
    b = (i - a * 100) // 10  
    # 求i的個位數字
    c = i % 10
    # print(i , a , b , c)
    
    # 判斷i是不是水仙花數
    if a**3 + b**3 + c**3 == i :
        print(i)
    i += 1
# 獲取用戶輸入的任意數,判斷其是不是質數。
num = int(input('輸入一個任意的大於1的整數:'))

# 判斷num是不是質數,只能被1和它自身整除的數就是質數
# 獲取到全部的可能整除num的整數
i = 2
# 建立一個變量,用來記錄num是不是質數,默認認爲num是質數
flag = True
while i < num:
    # 判斷num可否被i整除
    # 若是num能被i整除,則說明num必定不是質數
    if num % i == 0 :
        # 一旦進入判斷,則證實num不是質數,則須要將flag修改成false
        flag = False
    i += 1

if flag :
    print(num,'是質數')
else :
    print(num,'不是質數')

 

# 在控制檯中打印以下圖形
# *****
# *****
# *****
# *****
# *****
# 

# 建立一個循環來控制圖形的高度
# 循環嵌套時,外層循環沒執行一次,內存循環就要執行一圈
# i = 0
# while i < 5:
#     # 建立一個內層循環來控制圖形的寬度
#     j = 0
#     while j < 5:
#         print("* ",end='') #end=''表示不換行
#         j += 1
#     print()
#     i += 1

#
# *     j<1   i=0
# **    j<2   i=1   
# ***   j<3   i=2
# ****  j<4   i=3
# ***** j<5   i=4
# 
# *****
# ****
# ***
# **
# *
i = 0
while i < 5:
    j = 0
    while j < i + 1:
        print("* ",end='')
        j += 1
    print()
    i += 1
# 練習1:
#   打印99乘法表
#   1*1=1
#   1*2=2 2*2=4
#   1*3=3 2*3=6 3*3=9
#   ...                 9*9=81

# 建立一個外層循環來控制圖形的高度
i = 0
while i < 9:
    i += 1
    
    # 建立一個內層循環來控制圖形的寬度
    j = 0
    while j < i:
        j += 1
        print(f"{j}*{i}={i*j} ",end="")

    print()
# 求100之內全部的質數
# 建立一個循環,求1-100之內全部的數
i = 2
while i <= 100:
    
    # 建立一個變量,記錄i的狀態,默認認爲i是質數
    flag = True

    # 判斷i是不是質數
    # 獲取全部可能成爲i的因數的數
    j = 2 
    while j < i:
        # 判斷i可否被j整除
        if i % j == 0:
            # i能被j整除,證實i不是質數,修改flag爲False
            flag = False
        j += 1
    # 驗證結果並輸出
    if flag :
        print(i)   

    i += 1
# break
# break能夠用來當即退出循環語句(包括else)
# continue
# continue能夠用來跳過當次循環
# break和continue都是隻對離他最近的循環起做用
# pass
# pass是用來在判斷或循環語句中佔位的,沒有任何實際意義。

# 建立一個5次的循環
# i = 0
# while i < 5:
#     if i == 3:
#         break
#     print(i)
#     i += 1
# else :
#     print('循環結束')

# i = 0
# while i < 5:
#     i += 1
#     if i == 2:
#         continue
#     print(i)
# else :
#     print('循環結束')

i = 0
if i < 5:
    pass
# 模塊,經過模塊能夠對Python進行擴展,相似於Java中外置擴展包。
# 引入一個time模塊,來統計程序執行的時間
from time import *
# time()函數能夠用來獲取當前的時間,返回的單位是秒
# 獲取程序開始的時間
# 優化前:
#   10000個數 12.298秒
#   100000個數 沒有結果
# 第一次優化
#   10000個數 1.577秒
#   100000個數 170.645秒
# 第二次優化
#   10000個數 0.068秒
#   100000個數 1.646秒
#
# 36的因數
#   2 18
#   3 12
#   4 9
#   6 6
#   
begin = time()

i = 2
while i <= 100000:
    flag = True
    j = 2 
    while j <= i ** 0.5: #優化2 i開方
        if i % j == 0:
            flag = False
            # 一旦進入判斷,則證實i必定不是質數,此時內層循環沒有繼續執行的必要
            # 使用break來退出內層的循環
            break  #優化1 跳出循環
        j += 1
    if flag :
        # print(i)  
        pass
    i += 1

# 獲取程序結束的時間
end = time()

# 計算程序執行的時間
print("程序執行花費了:",end - begin , "")
相關文章
相關標籤/搜索