Python(一)—— 控制流:if & for & while


基操

編程語言類

編譯型

程序在執行之前需要一個專門的編譯過程,把程序編譯成 為機器語言的文件,運行時不需要重新翻譯,直接使用編譯的結果就行了。程序執行效率高,依賴編譯器,跨平台性差些。缺點:編譯之后如果需要修改就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據運行的操作系統環境編譯不同的可執行文件。編譯型語言可以理解為看一本英文書,看不懂翻譯成中文就 OK ,以后看中文版本。

C、C++、C#

解釋型

解釋性語言的程序不需要編譯,相比編譯型語言省了道工序,解釋性語言在運行程序的時候才逐行翻譯。缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。解釋型語言理解為看一本英文書,每次去看都要找一個翻譯當場翻譯,翻譯一行看一行

Java、JavaScript、Python、Erlang、PHP、Perl、Ruby

總結:編譯型語言速度快

選 python2 還是 python3

  當然選大的!python 2 到 2020 年就不再更新咯,庫也更新得差不多,python 3 面臨更好的生態環境,所以用 python 3。這里推薦用 Anaconda ,里面內置了許多有用的庫: https://www.anaconda.com/distribution/ ,根據系統位數下載就 ok ,記得配置環境變量,cmd 下輸入 python 可以看到 python 版本就 ok

C:\Users\Admin>python
Python 3.7.2 (tags/v3.7.2:9a3ffc0492, Dec 23 2018, 23:09:28) [MSC v.1916 64 bit
(AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.

 

利用 Pycharm 新建項目

  • 打開 Pycharm == > new project
  • locaton 內選擇自己想要存放的 project 路徑,以及項目名稱
  • 保存即可,會在路徑下生成一個 package 文件,再往其中添加 python file 即可

 

需要注意的是:

  • 不要作死寫到虛擬環境里面去,找不到項目就自己坑自己
  • 路徑最好不要有中文,空格,除下划線之外的特殊字符

基礎

注釋

  注釋是用於 # 負號右邊的文字,主要是給作者以及程序閱讀者看的筆記,例如:

print ('Hello World')    # 注意 print 是一個函數

  在我們的程序設計當中應該更多地使用注釋:

  • 解釋假設
  • 說明重要的決定
  • 解釋更多細節
  • 說明想要解決的問題
  • 說明想要在程序中克服的困難等

代碼可以告訴我們,這件事是如何解決的,注釋當中其實也應該體現,因為閱讀這串代碼的人可能是幾個月之后的你

字面常量

  什么叫字面常量呢?就是 5 、1.23 這樣的數字,或者是  'Life is short, you need Python' 字符串,或者是 '人生苦短,我用 python' 這樣的文本

數字

  數字分為兩種類型:整型 + 浮點型

int 整型就是整數,例如:2

float 浮點數就是非整數:3.14,3.14E-3。這里,E 表示 10 的冪,比如 3.14E-3 就是 3.14*10^-3

字符串

  string 類型,是字符的一串序列,基本上可以理解字符串就是一串詞匯

格式化方法

  有時候我們希望從其他信息中構建字符串,那么可以使用 format() 方法:

age = 18
name = 'gzw'
print('{0} is {1} years old'.format(name,age))

  輸出:

gzw is 18 years old

  它是如何工作的?
一個字符串可以使用某些特定的格式(Specification),隨后, format 方法將被調用,使用這一方法中與之相應的參數替換這些格式。
在這里要注意我們第一次應用這一方法的地方,此處 {0} 對應的是變量 name ,它是該格式化方法中的第一個參數。與之類似,第二個格式 {1} 對應的是變量 age ,它是格式化方法中的第二個參數。請注意,Python 從 0 開始計數,這意味着索引中的第一位是 0,第二位是 1,以此類推。

除此之外,我們可以使用聯立字符串的方式來達到該效果:

name + 'is' +str(age) + 'years old'

 

但是這種實現方式,顯而易見不如上面的直觀,而且也容易出錯。其次,轉換至字符串的工作將由  format  方法自動完成,而不是如這般需要明確轉換至字符串。再次,當使用  format  方法時,我們可以直接改動文字而不必與變量打交道,反之亦然。

同時還應注意數字只是一個可選選項,所以你同樣可以寫成:

age = 18
name = 'gzw'
print('{} is {} years old'.format(name,age))

這樣做同樣能得到與前面的程序一樣的輸出結果。
Python 中 format 方法所做的事情便是將每個參數值替換至格式所在的位置。這之中可以有更詳細的格式,例如:

# 對於浮點數 '0.333' 保留小數點(.)后三位
print('{0:.3f}'.format(1.0/3))
# 使用下划線填充文本,並保持文字處於中間位置
# 使用 (^) 定義 '___hello___'字符串長度為 11 print('{0:_^11}'.format('hello'))
# 基於關鍵詞輸出 'gzw is 18' 
print('{name} is {age}'.format(name='gzw', age= 18))

 

輸出:

0.333
___hello___
gzw is 18

由於我們正在討論格式問題,就要注意  print  總是會以一個不可見的“新一行”字符( \n )結尾,因此重復調用  print 將會在相互獨立的一行中分別打印。為防止打印過程中出現這一換行符,你可以通過  end  指定其應以空白結尾:

print('a', end='') 
print('b', end='')

輸出結果如下:

ab

或者通過  end  指定以空格結尾:

print('a', end=' ')
print('b', end=' ')
print('c')

輸出結果如下:

a b c

轉義字符

  想象一下,如果你希望生成一串包含單引號( ' )的字符串,你應該如何指定這串字符串?例如,你想要的字符串是 "What's your name?" 。你不能指定 'What's your name?' ,因為這會使 Python 對於何處是字符串的開始、何處又是結束而感到困惑。所以,你必須指定這個單引號不代表這串字符串的結尾。這可以通過 轉義序列(Escape Sequence) 來實現。你通過 \ 來指定單引號:要注意它可是反斜杠。現在,你可以將字符串指定為 'What\'s your name?' 。
  另一種指定這一特別的字符串的方式是這樣的: "What's your name?" ,如這個例子般使用雙引號。類似地, 你必須在使用雙引號括起的字符串中對字符串內的雙引號使用轉義序列。同樣,你必須使用轉義序列 \\ 來指定反斜杠本身。
  如果想指定一串雙行字符串該怎么辦?一種方式即使用如前所述的三引號字符串,或者可以使用一個表示新一行的轉義序列—— \n 來表示新一行的開始。下面是一個例子:

'This is the first line\nThis is the second line'

  另一個你應該知道的大有用處的轉義序列是制表符: \t 。實際上還有很多的轉義序列,但我必須只在此展示最重要的一些。
  還有一件需要的事情,在一個字符串中,一個放置在末尾的反斜杠表示字符串將在下一行繼續,但不會添加新的一行。來看看例子:

"This is the first sentence. \ 
This is the second sentence."

  相當於

"This is the first sentence. This is the second sentence."

原始字符串

  如果需要指定一些未經過特殊處理的字符串,比如轉義序列,那么你需要在字符串前增加 r  或  R  來指定一個 原始(Raw) 字符串:

r"Newlines are indicated by \n"

 變量命名規則

  變量是標識符的一個例子。標識符(Identifiers) 是為 某些東西 提供的給定名稱。在命名標識符時,需要遵守以下規則:

  • 第一個字符必須是字母表中的字母(大寫 ASCII 字符或小寫 ASCII 字符或 Unicode 字符)或下划線( _ )。
  • 標識符的其它部分可以由字符(大寫 ASCII 字符或小寫 ASCII 字符或 Unicode 字符)、下划線( _ )、數字(0~9)組成。
  • 標識符名稱區分大小寫。例如, myname 和 myName 並不等同。要注意到前者是小寫字母 n 而后者是大寫字母 N 。
  • 有效 的標識符名稱可以是 i 或 name_2_3 ,無效 的標識符名稱可能是

變量一般用小駝峰命名,類函數等一般使用大駝峰命名法。

小駝峰:myStudentCount  第一個單詞全部是小寫,后面的單詞首字母大寫

大駝峰:DataBaseUser  第一個字母就大寫

 

控制流

在 Python 中有三種控制流語句—— if for 和 while

 if

  用以檢查條件:如果條件為真(True),我們將運行一塊語句(稱作 if-block 或 if 塊),否則我們將運行另一塊語句(稱作 else-block 或 else 塊)。其中 else 從句是可選的。而且要注意的是,if 判斷語句后面,一定一定要跟 : 否則不會判斷為一個 if 判斷條件,會報語法錯誤

  if 語句用以檢查條件:如果條件為真(True),我們將運行一塊語句(稱作 if-block 或 if 塊),否則我們將運行另一塊語句(稱作 else-block 或 else 塊)。其中 else 從句是可選的。

age = int(input('Please input your age: '))
if age<18 :
    print('你是小鮮肉')
else:
    print('你是老臘肉')

  比如上述語句,當輸入的 age 大於等於 18,就會輸出:你是老臘肉;小於18,就會輸出:你是小鮮肉

       再比如:

num = float(input("請輸入一個數字: "))
if num > 0:
   print("輸入值為正數")#如果輸入的數大於0則輸出:輸入值為正數
elif num == 0:
   print("輸入為0")#如果輸入的數等於0則輸出:輸入為0
else:
   print("輸入值為負數")#上述條件都不符合則輸出:輸入值為負數

 

內嵌 if

num = float(input("請輸入一個數字: "))
if num >= 0:#先進行判斷輸入的數字是否>=0,如果是則進行第二個if判斷,如果不是則直接跳過到else
   if num == 0:
      print("")
   else:
      print("正數")
else:
  print("負數")

 

多條判斷

 score = input('請輸入你的成績:')
 score = int(score)
 if score>=90:
   print('優秀')
 elif score>=75 and score<90 :
   print('良好')
 elif score>=60 and score<75:
   print('及格')
 else:
   print('不及格')

for 循環

for i in range (1,5):
    print(i)

結果:

1
2
3
4
  • range返回一個從第一個數字到第二個數字的一個數字序列。例如,range(1,5)給出序列[1, 2, 3, 4]。
  • 默認情況下,range 步距取為1。如果我們提供第三個數字,range那么它變成了步距。例如range(1,5,2)得到[1,3]。
  • range()生成一個數字序列,當for循環請求下一個項目時,它一次只生成一個數字。如果你想立刻看到完整的數字序列,使用list(range())。

同樣要記住, else 部分是可選的。當循環中包含他時,它總會在 for 循環結束后開始執行,除非程序遇到了 break 語句。

另一個需要注意的地方是 for...in 能在任何隊列中工作。

while

  while 語句能夠讓你在條件為真的前提下重復執行某塊語句。 while 語句是 循環(Looping) 語句的一種。 while 語句同樣可以擁有 else 子句作為可選選項。

import random
num = random.randint(1,100) # 90 1
count = 0 #計數器
while count<7:
    guess = input('請輸入你要猜的數字:')
    guess = int(guess)
    if guess>num:
        print('猜大了')
    elif guess<num:
        print('猜小了')
    else:
        print('恭喜猜對了,數字是:',num)
        break
count+=1
#循環體,循環的時候是在重復執行循環體里面東西
# break 在循環里面遇到break,立即結束循環,不管循環有沒有循環完
# continue 在循環里面遇到continue 那么就結束本次循環,繼續進行下一次循環

 

  while 是怎么工作的呢?

number = 23
running = True
while running:
    guess = int(input('Enter an integer : '))
    if guess == number:
        print('Congratulations, you guessed it.')
        # 這將導致 while 循環中止
        running = False
    elif guess < number:
        print('No, it is a little higher than that.')
    else:
        print('No, it is a little lower than that.')
else:
    print('The while loop is over.')
    # 在這里你可以做你想做的任何事
print('Done')    

在這一程序中,我們依舊通過猜數游戲來演示,不過新程序的優點在於能夠允許用戶持續猜測直至他猜中為止——而無需像我們在上一節中所做的那樣,每次猜測都要重新運行程序。

這種變化恰到好處地演示了 while 語句的作用。

首先我們將 input 與 if 語句移到 while 循環之中,並在 while 循環開始前將變量running 設置為 True 。程序開始時,我們首先檢查變量 running 是否為 True ,之后再執行相應的 while 塊。在這一代碼塊被執行之后,將會重新對條件進行檢查,在本例中也就是 running 變量。如果它依舊為 True ,我們將再次執行 while 塊,否則我們將繼續執行可選的 else 塊,然后進入到下一個語句中。

else 代碼塊在 while 循環的條件變為 False 時開始執行——這個開始的時機甚至可能是在第一次檢查條件的時候。如果 while 循環中存在一個 else 代碼塊,它將總是被執行,除非你通過 break 語句來中斷這一循環。

理解 elif 和 else

正常來講,我們寫 if 語句,下面可以跟哪些? elif 和 else。elif 是什么呢?上面的 num 例子內,就是個 :if - else if - else 塊合並成 if - elif -else 塊,只是讓程序更簡便而已,並且減少相應的縮進量,相當於 if 下面的又一個 if 判斷

那么 else 是啥意思呢?意思是當 if 后面的判斷條件為 False ,則執行 else 內容。相應的 while 和 for 都有對應的 else ,那么何時執行 else 呢?當 while 或者 for 循環塊內為 False 了,就執行 else ,比如說不符合 for 循環了,或者 break 了,都算沒執行完 for 循環

三元表達式

當 x>y ,則打印 aaaaa,否則打印 bbbbb,三元表達式只能有一層 else ,不能有 elseif 等

res='aaaaa' if x > y else 'bbbbbbb'

 

理解 break 和 continue

break 和 continue 是用來跳出當前層循環的。注意是當前層。也就是說假設循環是嵌套,就只能跳出 break 和 continue 所在的那一層

區別在於:一執行到 break 是后面的循環都不執行;一執行到 continue 是只跳出當前層循環,后面的循環依舊照常執行。

continue = 把老師打暈,今天不上課;break = 把老師打死,以后都不用上課。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM