Python3.5筆記
第六章 條件朱嘴、循環(huán)和其他語句
import語句的使用
格式1:直接導(dǎo)入
import modelname
示例:
import math
r=5
print(math.pi)
print("半徑是5的圓的面積是:%.2f"%(math.pi*r**2))
輸出:
3.141592653589793
半徑是5的圓的面積是:78.54
格式2:從modelA導(dǎo)入modelB
from modelname import sub_modelname
#另一種導(dǎo)入包的方式
from math import pi
r=5
print(pi)#這種導(dǎo)入方式糕珊,可以直接使用sub_modelname崖堤,而不必使用modelname
print("半徑是5的圓的面積是:%.2f"%(pi*r**2))
工作原理
當(dāng)我們使用import語句時(shí),Python解釋器如何找到對應(yīng)的文件柠并?
這涉及Python的搜索路徑究飞,搜索路徑由一系列目錄名組成,Python解釋器會(huì)依次從這些目錄中尋找引入的模塊堂鲤。
看起來很像環(huán)境變量亿傅,事實(shí)上可以通過定義環(huán)境變量的方式定義搜索路徑,搜索路徑是在Python編譯或安裝時(shí)確定的瘟栖,
被存儲在sys的path變量中葵擎。查看搜索路徑的方式如下:
import sys
print(sys.path)
輸出:
['D:\\pyspace\\hellopython', 'D:\\pyspace\\hellopython', 'D:\\Program Files\\Python\\python35.zip', 'D:\\Program Files\\Python\\DLLs', 'D:\\Program Files\\Python\\lib', 'D:\\Program Files\\Python', 'D:\\Program Files\\Python\\lib\\site-packages', 'D:\\Program Files\\JetBrains\\PyCharm 2018.1.4\\helpers\\pycharm_matplotlib_backend']
可以通過修改path變量改變搜索路徑的位置。
導(dǎo)入多個(gè)模塊
導(dǎo)入多個(gè)模塊時(shí)半哟,只需要將導(dǎo)入的多個(gè)模塊中間用逗號,分隔開就可以了酬滤。如:
from math import pi,sin
導(dǎo)入全部
from math import *
起別名
可以對導(dǎo)入導(dǎo)入的模塊起別名,直接在模塊名后加as 別名即可寓涨。如:
from math import pi as p
print(p)
輸出
3.141592653589793
使用逗號輸出
可以使用逗號輸出多個(gè)表達(dá)式盯串,所以不使用格式化的方式也可以同時(shí)輸出文本和變量值。如:
print("我是小智","戒良,我來自未來")
name = "我是小智"
introduce = ",我是一名工程師"
comefrome = ",我來自未來"
print(name,introduce,comefrome)
輸出:
我是小智 体捏,我來自未來
我是小智 ,我是一名工程師 ,我來自未來
花式賦值
序列解包
在Python中,交換所作的事情叫做序列解包糯崎,或可迭代解包几缭。即將多個(gè)值的序列解開,然后放到變量的序列中沃呢。
通過序列解包年栓,可以同時(shí)對多個(gè)變量賦值。如:
x,y,z = 1,2,3
print("x=",x)
print("y=",y)
print("z=",z)
print(x,y,z)
a,b,c = "a","b","c"
print(a,b,c)
student = {'name':"小明",'age':23}
#Python 字典 popitem() 方法隨機(jī)返回并刪除字典中的一對鍵和值(一般刪除末尾對)薄霜。
#如果字典已經(jīng)為空某抓,卻調(diào)用了此方法,就報(bào)出KeyError異常惰瓜。
#返回一個(gè)鍵值對(key,value)形式否副。
key,value = student.popitem()
print(key)
print(value)
print(student)
輸出:
x= 1
y= 2
z= 3
1 2 3
a b c
name
小明
{'age': 23}
需要注意的是,解包序列中的元素?cái)?shù)量必須和放置在賦值符號"="左邊的數(shù)量完全一致鸵熟,否則Python會(huì)在賦值時(shí)引發(fā)異常副编。如:
x,y,z = 1,2
print(x,y,z)
輸出
ValueError: not enough values to unpack (expected 3, got 2)
鏈?zhǔn)劫x值
可以通過多個(gè)等式為多個(gè)變量賦同一個(gè)值,這種方法叫做鏈?zhǔn)劫x值。
鏈?zhǔn)劫x值是將同一個(gè)值賦給多個(gè)變量痹届,但是要注意的是呻待,當(dāng)其中一個(gè)變量的值發(fā)生改變后,另外變量的值并不會(huì)自動(dòng)隨之改變队腐,而是仍然保持原來的值不變蚕捉。如:
x=y=z=123
print(x,y,z)
y=456
print(x,y,z)
輸出
123 123 123
123 456 123
增量賦值
使用賦值運(yùn)算符時(shí),沒有將表達(dá)式寫成類似x=x+1的形式柴淘,而是將表達(dá)式放置在賦值運(yùn)算符(=)的左邊迫淹,如:將x=x+1寫成
x+=1,這種寫法在Python中稱之為增量賦值为严。即先對變量進(jìn)行"="左邊的運(yùn)算敛熬,然后再將運(yùn)算完的結(jié)果賦給變量。如:
x=0
x+=1
print(x)
x*=10
print(x)
輸出
1
10
增量賦值不僅使用于數(shù)字第股,同樣適用于字符串应民,如:
str='hello'
str+=' world'
print(str)
str*=2
print(str)
輸出
hello world
hello worldhello world
語句塊
在Python中,冒號(:)用來標(biāo)識語句塊的開始夕吻,語句塊中每一個(gè)語句都需要縮進(jìn)(縮進(jìn)量相同)诲锹。當(dāng)退回到和已閉合的塊一樣的縮進(jìn)量時(shí),表示當(dāng)前語句塊已經(jīng)結(jié)束了涉馅。如:
a=3
if a==3:
print('a==3')
print('這是一個(gè)語句塊')
a=4#這時(shí)語句塊已經(jīng)結(jié)束了
輸出:
a==3
這是一個(gè)語句塊
Python中的布爾值
在Python中归园,標(biāo)準(zhǔn)的布爾值有:True,False。下面的值做為布爾表達(dá)式時(shí)稚矿,會(huì)被看作假庸诱。
False None () "" 0 [] {}
在Python中,除了標(biāo)準(zhǔn)值False和None盐捷、所有類型的數(shù)字0(包括浮點(diǎn)型偶翅,長整形和其他類型)、空序列(如:空字符串碉渡、空元組和空列表)以及空字典都為假。其他的值都為真母剥,包括原生的布爾值True滞诺。
標(biāo)準(zhǔn)值False=0,True=1
print(True == 0)
print(True == 1)
print(False == 0)
print(False + True + 2)
print(False)
print(True)
輸出:
False
True
True
3
False
True
bool()函數(shù)用來轉(zhuǎn)換表達(dá)式為布爾值环疼,如:
print(bool('abc'))
print(bool(0))
輸出:
True
False
IF ELSE ELIF 語句的寫法
在Python中习霹,if語句后面不需要跟括號(),只需要跟空格炫隶,然后加條件表達(dá)式即可淋叶。else 語句不是獨(dú)立語句,只能做為if語句的一部分伪阶。elif是else if的簡寫煞檩,在Python中处嫌,使用elif代替其他語句的else if。如:
#! /usr/bin/python3 #建議加上這一句斟湃,否則代碼移植到linux時(shí)熏迹,會(huì)找不到解釋器
# -*- coding:UTF-8 -*- #建議加上這一句,否則有中文時(shí)容易出現(xiàn)亂碼
#greeting = 'hello'
greeting = 'hello1'
#greeting = 'hello2'
if greeting == 'hello':
print('hello的長度是:%d'%len(greeting))
elif greeting == 'hello1':
print('greeting變量的值是:%s'%greeting)
else:
print('字符串不等于hello')
輸出:
#hello的長度是:5
greeting變量的值是:hello1
#字符串不等于hello
同一運(yùn)算符 IS
IS運(yùn)算符用來判斷兩個(gè)對象是否等同(是否為同一個(gè)對象)凝赛,使用==運(yùn)算符用來判斷兩個(gè)對象是否相等注暗。如:
x=y=(1,2,3)
z=(1,2,3)
print(x is y)
print(x is z)
輸出:
True
False
比較字符串和序列
字符串可以按照字母排序順序進(jìn)行比較,也可以對列表進(jìn)行比較操作墓猎,也可以對嵌套列表進(jìn)行比較操作捆昏。如:
print([1,2] < [2,1])
print([1,2] == [1,2])
輸出:
True
True
assert 斷言
在Python中,assert語句的格式如下:
if not condition:
crash program
為什么需要這樣的代碼呢毙沾?
在沒有完善一個(gè)程序之前骗卜,你不知道程序會(huì)在哪里出錯(cuò),與其在運(yùn)行時(shí)崩潰搀军,不如在遇到錯(cuò)誤時(shí)崩潰膨俐。
使用assert,要注意以下幾點(diǎn):
1罩句、assert斷言用來聲明某個(gè)條件是真的焚刺。
2、如果你非常確信门烂,你使用的列表中至少有一個(gè)元素乳愉,想要檢驗(yàn)這一點(diǎn),并在它非真時(shí)引發(fā)一個(gè)錯(cuò)誤屯远,那么assert語句是應(yīng)用在這種情形下的理想語句蔓姚。
3、當(dāng)assert語句失敗時(shí)慨丐,會(huì)引發(fā)一個(gè)AssertionError坡脐。
x=3
#assert x<0,'x is not zero not negative'
assert x%2==0,'x不是偶數(shù)'
輸出
assert x%2==0,'x不是偶數(shù)'
AssertionError: x不是偶數(shù)
幾種循環(huán)的寫法
while循環(huán)
while語句用于循環(huán)執(zhí)行程序,以處理需要重復(fù)處理的任務(wù)房揭。執(zhí)行的流程為:當(dāng)while條件為True時(shí)备闲,執(zhí)行循環(huán)體,直到while條件為False時(shí)捅暴,退出循環(huán)恬砂,基本語法形式如下:
while 判斷條件:
執(zhí)行語句
迭代器
示例:
x=0
while x<5:
print('x=',x)
x+=1
輸出:
x= 0
x= 1
x= 2
x= 3
x= 4
for循環(huán)
for循環(huán)可以遍歷任何序列的項(xiàng)目,如一個(gè)列表或字符串蓬痒。for循環(huán)的語法格式如下:
for iterator_var in sequence
statements
sequence是任意序列泻骤,iterator_var是序列中要遍歷的元素,statements是待執(zhí)行的語句塊。
print('---------循環(huán)字符串-------------')
for letter in 'goods':
print('當(dāng)前字母是:',letter)
print('---------循環(huán)數(shù)字序列-------------')
numbers = [1,2,3,4,5]
for number in numbers:
print('當(dāng)前數(shù)字是:%d'%number)
print('---------循環(huán)字典-------------')
dictionary = {'name':'小明','age':23,'性別':'男','愛好':'女'}
for dict in dictionary:
print('當(dāng)前字典的值是:%s=%s'%(dict,dictionary[dict]))
print('---------循環(huán)字典,使用序列解包-------------')
for key,value in dictionary.items():
print('%s:%s'%(key,value))
輸出:
---------循環(huán)字符串-------------
當(dāng)前字母是: g
當(dāng)前字母是: o
當(dāng)前字母是: o
當(dāng)前字母是: d
當(dāng)前字母是: s
---------循環(huán)數(shù)字序列-------------
當(dāng)前數(shù)字是:1
當(dāng)前數(shù)字是:2
當(dāng)前數(shù)字是:3
當(dāng)前數(shù)字是:4
當(dāng)前數(shù)字是:5
---------循環(huán)字典-------------
當(dāng)前字典的值是:性別=男
當(dāng)前字典的值是:愛好=女
當(dāng)前字典的值是:age=23
當(dāng)前字典的值是:name=小明
---------循環(huán)字典,使用序列解包-------------
性別:男
age:23
name:小明
愛好:女
迭代工具
并行迭代
在Python中狱掂,內(nèi)建的zip函數(shù)用來進(jìn)行并行迭代演痒,可以把兩個(gè)序列合并在一起,返回一個(gè)元素的列表符欠。zip函數(shù)可以作用于任意數(shù)量的序列嫡霞,并且可以應(yīng)付不等長的序列,當(dāng)序列用完時(shí)就停止希柿,此時(shí)以段序列為準(zhǔn)诊沪,當(dāng)段序列執(zhí)行結(jié)束,for循環(huán)就遍歷結(jié)束曾撤。
for num1,num2 in zip(range(3),range(100)):
print('number=',num1)
輸出
number= 0
number= 1
number= 2
反轉(zhuǎn)和排序迭代
sorted()函數(shù)返回排序后的序列端姚,reversed()函數(shù)返回反轉(zhuǎn)后的序列
print(sorted([5,3,7,1]))
print(sorted('hello world!'))
print(list(reversed('hello world')))
print(''.join(reversed('hello world')))
輸出:
[1, 3, 5, 7]
[' ', '!', 'd', 'e', 'h', 'l', 'l', 'l', 'o', 'o', 'r', 'w']
['d', 'l', 'r', 'o', 'w', ' ', 'o', 'l', 'l', 'e', 'h']
dlrow olleh
break和continue
break和continue同java,break用于跳出循環(huán)挤悉,執(zhí)行循環(huán)體外的語句渐裸,continue用于跳出當(dāng)前循環(huán),繼續(xù)執(zhí)行剩余的循環(huán)體装悲。
循環(huán)中的else語句
在while條件語句為false時(shí)昏鹃,執(zhí)行else語句
在for條件語句為false時(shí)或結(jié)束后沒有被break中段時(shí),執(zhí)行else語句诀诊。
pass語句
pass不做任何事情洞渤,只是占位語句。
習(xí)題
1 猜數(shù)字
#猜數(shù)字的游戲属瓣,猜大了提示大了载迄,猜小了提示小了,猜對了提示對了抡蛙,并告知猜了幾次
import random
random_num = random.randint(1,10)
input_num = input('你猜我手里的1-10的數(shù)字是多少护昧?')
i=0
while True:
if not input_num.isdigit():
print('輸入的不是數(shù)字')
break
input_num_int = int(input_num)
i+=1
if input_num_int > random_num:
input_num = input('你猜大了,再給你一次機(jī)會(huì)')
elif input_num_int < random_num:
input_num = input('你猜小了粗截,再給你一次機(jī)會(huì)')
else:
print('恭喜你惋耙,猜對了!你一共猜了%d次'%i)
break
2是不是阿姆斯特朗數(shù)
#如果一個(gè)n位正整數(shù)等于各位數(shù)字n次方的和熊昌,就稱該數(shù)為阿姆斯特朗數(shù)怠晴。例如:1^3+5^3+3^3=153
#1000以內(nèi)的阿姆斯特朗數(shù)還有:1、2浴捆、3、4稿械、5选泻、6、7、8页眯、9梯捕、153、370窝撵、371傀顾、407
#寫一個(gè)程序,判斷輸入的數(shù)字是否是阿姆斯特朗數(shù)
input_num = input('請輸入一個(gè)阿姆斯特朗數(shù)')
comput_result = 0
length = len(input_num)
if input_num.isdigit():
for letter in input_num:
comput_result += int(letter)**length
if comput_result == int(input_num):
print('你輸入的數(shù)字',input_num,'各位相加的結(jié)果是',comput_result,'碌奉,是阿姆斯特朗數(shù)')
else:
print('你輸入的數(shù)字',input_num,'各位相加的結(jié)果是',comput_result,'短曾,不是阿姆斯特朗數(shù)')
else:
print('輸入的不是數(shù)字!')