เขียนภาษา python ( while and list )

posted on 29 Nov 2004 23:46 by veer
ต่อจากคราวที่แล้ว ที่แนะนำให้รู้จักและแปล คำสั่ง print และคำสั่ง if ไป คราวนี้ก็มาลองดูคำสั่ง while ดูบ้าง while อาจารย์ท่านหนึ่งแปลไว้ว่า ``ตราบเท่าที่'' เช่นเราเขียนโปรแกรม

i = 0
while i < 10:
i = i + 1
print i

โปรแกรมนี้ก็จะมีความหมายว่า ``ให้ i มีค่าเป็น 0 ตราบเท่าที่ i < 10 ให้เพิ่มค่า i และ print ค่า i ออกมา''

ในตอนนี้เราจะเริ่มพูดถึงเรื่อง list กันเลยน่าจะเป็น ของเล่นที่ใช้บ่อยสุดๆ ของ Python ก็ว่าได้ list ใน python จะมีข้อมูลเรียงกันหลายๆ ตัว ครอบด้วยเครื่องหมาย [ และ ] เช่น
[1, 2, 3, 4, 'Foo', 5, 'Bar']

เราสามารถให้ตัวแปรอ้างอิงไปยัง list ได้ เช่น
>>> x = [1, 2, 3, 4, 'Foo', 5, 'Bar']
>>> print x
[1, 2, 3, 4, 'Foo', 5, 'Bar']
>>>

เราสามารถเข้าถึงสมาชิกของ list บางตัวได้ เช่น
>>> x = [1, 2, 3, 4, 'Foo', 5, 'Bar']   
>>> print x[3]
4
เราสามารถเข้าถึงสมาชิกของ list เป็นกลุ่มๆ ได้ เช่น
>>> x = [1, 2, 3, 4, 'Foo', 5, 'Bar']
>>> print x[3:5]
[4, 'Foo']
เราสามารถเลือกสมาชิกบางตัวอย่างมีเงื่อนไขได้ เช่น
>>> y = [10, 3, 5, 25, 7, 9]
>>> z = [x for x in y if x >= 9]
>>> print z
[10, 25, 9]


ด้วยคำสั่งเพียงที่นี้ก็น่าจะพอเขียนอะไรเป็นเรื่องเป็นราวได้ แต่ก็ยังนึกอยู่ว่าจะเขียน อะไร :-P คราวหน้า อาจจะมีโปรแกรมที่ยากขึ้นมากหน่อย มาให้ดู

แก้ไขเมื่อ 30/11/2547 0:14:37

Comment



smilebig smileopen-mounthed smileconfused smilesad smileangry smiletonguequestionembarrassedsurprised smilewinkdouble winkcry

ทำไมภาษามัน feather เยอะจาง
champcpe: มีคนบอกว่า python เป็นตัวแทนของ Lisp ( List processing ) เขียนจริงๆ จะไม่ใช้ feature พวกนี้ก็ได้ แต่พอใช้แล้วโปรแกรมมันดูสั้นและตรงไปตรงมาขึ้น ( คิดว่า )

#2 By veer on 2004-11-30 00:15

เท่าที่เขียนมาก็คิดว่าภาษามันไม่ดีตรง
space กับ tab แล้วก็ multiple line comment นี่ล่ะ

#3 By markpeak on 2004-11-30 10:19

markpeak: multiple line comment ใช้ multi line string แทนได้
ใช้เครื่องหมาย ''' สำหรับเปิดและปิด

space กับ tab ใช้ software convert เอาได้ แบบ completely automatic?

#4 By veer on 2004-11-30 10:44

ไปชนกับเวลา print string หลายบรรทัดไง
ถ้าเขียน cgi มันต้อง print html ทีหลายบรรทัด

#5 By markpeak on 2004-11-30 11:57

เอา python list มาทำ quicksort เล่น
def qs(L):
if len(L)<=1: return L
return qs([lt for lt in L[1:] if lt<L[0]])+L[0]+qs([gt for gt in L[1:] if gt>L[0]])

#6 By Pit (194.205.123.7) on 2004-11-30 12:25

จับ ค่า ยัด ใน list ทำไงอ่ะ

#7 By gantz on 2004-11-30 12:50

เวลาเขียนนี่ ต้องประกาศที่หัวไฟล์ ถึงอะไรหรือป่าววะ วีเอ๋ย

#8 By gantz on 2004-11-30 12:52

>> จับ ค่า ยัด ใน list ทำไงอ่ะ

l = []
l.append('foo')

list เป็น basic data type ของ python เรียกใช้ได้เลย ไม่ต้องประกาศ

#9 By Pit (194.205.123.7) on 2004-11-30 13:33

ถ้าไม่รัน console แบบตัวอย่าง
ก็ต้องใส่ #!/usr/bin/python
เพื่อจะให้มัน ./ ได้

หรือไม่งั้นก็ python filename เอา

#10 By markpeak (158.108.130.107) on 2004-11-30 22:38

มัน lisp ไงนะ
lisp มัน functional ไม่ใช่เหรอ??

#11 By wonam (158.108.42.236) on 2004-12-01 11:34

wonam: python ก็พยายามมี feature ที่เป็น function แบบที่ lisp มี
็ใช้แบบ imperative ด้วย ( Lisp เองก็ไม่ใช่ pure functional
แบบ haskell)

#12 By veer on 2004-12-01 15:05

เราสามารถเข้าถึงสมาชิกของ list เป็นกลุ่มๆ ได้ เช่น
>>> x = [1, 2, 3, 4, 'Foo', 5, 'Bar']
>>> print x[3:5]
[4, 'Foo']
ไม่ทราบคำตอบผิดป่าว ต้องได้ [4,5] ไม่ใช่เหรอครับ

#13 By chatchai (61.90.55.121) on 2005-02-02 20:52

python เริ่มนับที่ 0 ค่ะไม่ใช่ 1 เวลานับตำแหน่งใน list ก้อจะนับที่ช่องหน้าตัวอักษรที่พิมเป็น 0 ไม่ใช่นับที่ตัวอักษร แล้วนับ 1 ที่หลังตัวอักษรตัวแรกค่ะ

#15 By shippo (61.91.229.199) on 2005-09-04 14:35

print x[3:5]
คือสี่กับFoo ที่เริ่มจาก 3 ถึง 5 แต่ไม่print 5 ออกมา
ถ้า่สั่ง print x[3:6] ก็จะเป็น 4 Foo 5 ไม่มี Bar

#16 By ไม่ทอน (61.19.48.2 /172.16.81.27, 61.19.48.2) on 2006-10-31 13:59

#17 By ดอกไม้ (58.9.41.86) on 2006-11-11 14:34