python征程3.1(列表,迭代,函數,dic,set,的簡單應用),pythondic

來源:互聯網
上載者:User

python征程3.1(列表,迭代,函數,dic,set,的簡單應用),pythondic

1.列表的切片。

1.對list進行切片。
'''
name=["wangshuai","wangchuan","wangjingliang","wangshuai"]
#想取出前三個元素,應該怎麼做?
#(1)笨辦法
'''print(name[0],name[1],name[2])'''
#(2)用迴圈實現。
'''for i in range(len(name)):
if(i<3):
print(name[i])
else:
break'''
#(3)用切片實現。
'''print(name[0:3])'''
'''
作業:range()函數可以建立一個數列。
range(1,101)
【1,2,3.....100】
請利用切片,取出:
1.前10個數。
2.3的倍數。
3.不大於50的5的倍數。
'''
'''

 

2.倒序切片
對於list,既然python支援l【-1】取出倒數第一個元素,那麼它同樣支援倒數切片,試試:
'''
'''name=["wangshuai","wangchuan","wangjingliang","wangshuai"]
print(name[-3:-1])'''
'''
3,對字串切片。
”abcdefd“也可以看成是一種list,每個元素就是一個字元,因此字串也可以用切片操作,只是操作結果任為字串:
print("abcdefd"[0:3])
'''
print("abcdefd"[0:3])

 

2.迭代。

1.在python中,如果給定一個list或tuple,我們可以通過for'迴圈來遍曆這個list或tuple
這種便利我們稱為迭代,(lterration)
在python中,迭代是通過for in 來完成的,而很多語言比如C或者JAVA,迭代list是通過下標實現的。
可已很明顯的看出來python的for'迴圈的抽象程度是要遠高於java的。
因此,迭代的操作就是對於一個集合,無論該集合是有序還是無序,我們總是可以用for迴圈來遍曆處該集合中的某每一個元素。
在python中迭代就是for迴圈。
'''
'''
2.索引迭代。
在python中迭代永遠是出自元素本身,而非元素的索引。
'''

3.函數。

1.神馬是函數?
函數可以盡量的解決程式員編程中的一種的演算法的重複使用的問題
2.調用函數。
(1)可以直接使用help(abs)函數來瞭解abs的用法。所以要學會使用help()函數
'''
'''print(abs(100))
print(abs(-20))
print(abs(12.34))
#由以上可知abs()函數便是取絕對值得函數abs()
#由於該函數只能有一個參數,當你多加入參數的時候,就會出錯,如下:
print(abs(-89,-27))
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: abs() takes exactly one argument (2 given)
'''
'''
(2)cmp()函數。
cmp(x,y)用以比較x和y的大小 ,當x=y的時候,傳回值為0.
,當x>y的時候,傳回值為正值(通常為1).
,當x<y的時候,傳回值為負值(通常為-1).
(3)int()函數。
int(x):用以將其它資料類型,轉換為整型。
'''
#sum()函數接受一個list作為參數,並返回list所有元素之和。請計算1*1+2*2+3*3+4*4+。。。。+100*100
'''
#這便是一個函數,用以計算你輸入數的前n項和。
num=int(input("please input a number:"))
n=0
for i in range(num):
n+=num
num-=1
print(n)
'''
'''
(4)str()函數就是把其它類型轉換為str()類型。
a=str(123)
print(a)
print(type(a))
'''
'''4.編寫函數
在,python中定義一個函數要使用到def()語句,依次寫出函數名,括弧,括弧中的參數和冒號;然後再縮排塊中編寫函數體
,函數的傳回值用return語句返回。
我們以一個函數為例
def my_abs(x):
if(x>0):
return x
else:
return -x
num=int(input("please input your number:"))
print(my_abs(num))
#這便就是一個自訂函數的使用過程。注意:函數體內再執行的時候,一旦執行到return語句,函數就執行完畢,並將結果返回。
因此函數內部通過條件判斷和迴圈可以實現非常複雜的邏輯。
如果沒有return語句,函數執行完畢後,也會返回結果,只是結果為None
'''
'''4.返回多值。
函數可以返回多個值嗎?答案是肯定的。
比如在遊戲中,需要從一個點移動到另一個點,給出座標,位移和角度,就可以計算出的目標。
#MATH包提供了sin()和cos()函數,我們先用import引用它:
'''
'''import math
def move(x,y,step,angle):
nx=x+step+math.cos(angle)
ny=y-step+math.sin(angle)
return nx,ny
x,y=move(100,100,60,math.pi/6)
print(x,y)'''
'''
一元二次方程的定義是:ax^2+bx+c=0,試編寫一個函數,返回一元二次方程的兩個解。
注意:python中math函數包括了sqrt()函數用以計算平方根。
'''
'''
#這就是,用python來實現的一元二次方程的解法。
import math
def way(a,b,c):
if(b**2-4*a*c<0):
print("無可行解")
elif(b**2-4*a*c==0):
print("有兩個相同的根")
print("x1=x2=%d"%((-b)/(2*a)))
else:
print("有兩個不同的實數根")
print("x1=%d,x2=%d"%(((-b)+b**2-4*a*c)/(2*a)),((-b)-b**2-4*a*c)/(2*a))
print(way(1,2,1))'''
#問題出現,如何進行有兩個根的方程計算結果, print("x1=%d,x2=%d"%(((-b)+b**2-4*a*c)/(2*a)),((-b)-b**2-4*a*c)/(2*a))
# 這行代碼很明顯有一些問題。故明早修改。
'''
5,遞迴函式。
在函數內部可以調用其它函數,如果一個函數可以在內部調用自身本身,這個函數就是遞迴函式。
舉個例子:
n!=1*2*3*.....*n
若用個函數表示則為fact(n)=n*(n-1)*.....*1,且只有當n=1時需要特殊處理。
'''
'''def fact(n):
if(n<1):
print("not allow")
elif(n==1):
print("fact=%d"%(1))
else:
m=1
k=n
for i in range k:
m*=n
n-=1
return m
print(fact(4))
#注意:無法實現階乘?在進行下一步的調試。
注意有漢諾塔的作業需要看一下子,並最好能夠做出來。
'''
'''
6,定義預設參數
例如,python中的int()函數就是內建兩個參數,我們既可以傳一個參數,也可以傳兩個參數。
print(int("123"))
def power(x,n):
print("x**n=%d"%(x**n))
print(power(3,2))
#可以直接計算x的n次方。也可指定n的具體取值,這樣便可以實現計算x的冪級數了。
'''
'''作業:請定義一個greet()函數,它包含一個預設參數,如果沒有傳入,列印“hello xxx”
'''
'''
7,定義可變參數。
如果想讓一個函數能接受任意個參數,我們就可以定義一個可變參數:
def fn(*args):
print(args)
可變參數的名字前面有個*號,我們可以傳0個,1個或多個參數,給可變參數。可變參數也不是很神秘,python解譯器會把傳入的一組參數組裝成一個
tuple傳遞給可變參數,因此在函數內部,直接把arg看成一個tuple就好了。
定義可變參數的目的也是為了簡化運算,假設我們要計算人一個數的平均值,我們就可以定義一個可變參數。
'''
'''作業,做一個求平均值的函數。(無論有多少個元素)
'''
#!/usr/bin/env python
# -*- coding: utf-8 -*-
'''#!/usr/bin/env python
# -*- coding: utf-8 -*-
import math
def quadratic(a,b,c):
if a == 0:
raise TypeError('a不能為0')
if not isinstance(a,(int,float)) or not isinstance(b,(int,float)) or not isinstance(c,(int,float)):
raise TypeError('Bad operand type')
delta = math.pow(b,2) - 4*a*c
if delta < 0:
return '無實根'
x1= (math.sqrt(delta)-b)/(2*a)
x2=-(math.sqrt(delta)+b)/(2*a)
return x1,x2
print(quadratic(2,3,1))
print(quadratic(1,3,-4))'''
'''import math
def way(a,b,c):
if(a==0):
print("這就不是一個一元二次方程")
if(b**2-4*a*c<0):
print("無可行解")
elif(b**2-4*a*c==0):
print("有兩個相同的根")
print("x1=x2=%d"%((-b)/(2*a)))
else:
print("有兩個不同的實數根")
x1=(math.sqrt((b**2-4*a*c))-b)/(2*a)
x2=(math.sqrt(-(b**2-4*a*c))-b)/(2*a)
print(way(14,23,1))'''
#上面總是有問題,所以需要修改
'''學習python遇到的第一個問題:漢諾塔問題的實現。首先是不知道什麼是漢諾塔問題,然後是不知道怎麼實現。於是百度了下,結果如下:

漢諾塔:漢諾塔(又稱河內塔)問題是源於印度一個古老傳說的益智玩具。
大梵天創造世界的時候做了三根金剛石砫子,在一根柱子上從下往上按照大小順序摞著64片黃金圓盤。
大梵天命令婆羅門把圓盤從下面開始按大小順序重新擺放在另一根柱子上。
並且規定,在小圓盤上不能放大圓盤,在三根柱子之間一次只能移動一個圓盤'''

4.字典(dic)

#我們要找到名字對應的分數這件事是很困難的,所以我們引入了字典這一概念,我們把名字叫做”鍵(key),對應的成績叫做值(value)。由於dict也是集合,len()函數可
#以計算任意集合的大小。
#建立字典。
'''d={
"wangshuai":95,
"wangchuan":89,
"wangyun":90
}
#花括弧{}表示這是一個字典,然後按照key:value寫出來即可。最後一個key:value的值可以省略。
print(len(d))
print(d.values())'''
'''#訪問字典
d={
"wangshuai":95,
"wangchuan":89,
"wangyun":90
}
print(d["wangshuai"])#注意:當訪問字典的時候,必須要使d後面的括弧為中括弧【】否則會出錯。
if "liuzhe" in d:
print(d["liuzhe"])
else:
print("don't have this people")'''
#dic的第一個特點
#dic的第一個特點就是速度快,不管有多少個key都是一樣的速度,而list的速度隨著元素的增加速度下降
#缺點,dic的缺點就是佔用記憶體過大,會浪費很多記憶體,注意:由於dic中是按照key尋找,所以key不可以重複。
#dic的第二個特點
#儲存key-value序對是沒有順序的,及列印的順序與建立的順序是不同的,這可以說明dic內部是無序的。
'''d={
"wangshuai":95,
"wangchuan":89,
"wangyun":90
}
print(d)'''
#dic的第三個特點就是
#key的元素不可改變,但是list的元素是可以改變的,就不可以作為key,最常用的key還是用字串來作為key值的。
#更新dict
#dict是可變的,也就是說,可以隨時往dict中添加key-value值,比如有dic:
'''d={
"wangshuai":95,
"wangchuan":89,
"wangyun":90
}'''
#要把tom同學的成績添加進去,即用
'''d["tom"]=72
print(d)'''
#如果這個索引值(key)已經存在,就會替換它的值
#遍曆dic
#由於dict也是一個集合,所以遍曆dict和遍曆list是類似的,都可以通過for迴圈來進行
#直接使用for迴圈可以遍曆dict的鍵(key):
d={
"wangshuai":95,
"wangchuan":89,
"wangyun":90
}
for key in d:
print(key)
#由於直接使用key可以擷取對應的value,應此可以在迴圈體中直接,擷取到value的值。

5.set。

 

'''dic的作用是建立一組key和一組value的映射關係
dict的索引值(key)是不可以重複的.
有的時候我們只想要dic的索引值(key),並不需要key所對應的value值。目的就是保證這個集合的元素不會重複,這時set就派上了用場。
set持有一系列元素但和list不同的是,這些元素沒有重複的,而且是無序的。這點和dic中的key很像。
建立set的方式為調用set()函數並傳入一個list,list的元素將作為set的元素.
'''
'''a=set(["a","b","c"])#無序性體現得淋漓盡致。
print(a)'''
'''a=set(["a","b","c","a"])#無序性體現得淋漓盡致。
print(a)
print(len(a))#連長度都只會是去掉重複的元素後的集合長度。'''
'''
2.訪問set
由於set儲存的是無序的元素,所以我們沒法用訪問索引的方式來訪問元素。
訪問一個元素用set,就是判斷該元素否在set中存在。
'''
'''a=set(["alice","bloom","cook","alex"])#無序性體現得淋漓盡致。
print(a)
print("alex" in a)#可以直接判斷元素是否在set集合中存在。'''
'''
3.set的特點:
(1)set的內部結構和dict很象,唯一不同的區別是不儲存value的值,因此判斷一個元素是否在set中的速度很快。
(2)任何可變對象都是不可以存放在set中的。
(3)set中的元素是無序的。
set的這些特點用在什麼地方?
讓使用者輸入星期,可以用set來判斷使用者輸入是否正確。
'''
'''months=(["mon","tue","wed","tues","fri","sta","sun"])
x1="feb"
x2="sun"
if x1 in months:
print("ok")
else:
print("terror")
if x2 in months:
print("ok too")
else:
print("terror too")'''
'''
4,遍曆set
由於set也是一個集合,所以遍曆set和遍曆list是一樣的,都可以通過for迴圈實現。
直接使用for迴圈來實現遍曆set
'''
'''a=(["adam","lisa","bart","wangshuai"])
for name in a:
print(name)
#注意:由於set是無序的,所以for迴圈出來的結果在不同的電腦上可能是不同的。'''
'''
5.更新set。
(1)把元素添加到set中。
(2)把現有元素從set中刪除。
'''
a=set([1,2,3])
a.add(4)
print(a)#實現在set中添加一個指定元素(但是位置不定)
a.remove(1)
print(a)#實現在set中刪除一個指定元素(但是位置不定)
#但是要刪除set中不存在的元素就會報錯:所以一定要刪除set中有的元素。

 



 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.