วันจันทร์ที่ 3 มิถุนายน พ.ศ. 2556

My First python programming

เนื่องจากในช่วงนี้ผมกำลังอยู่ช่วงศึกษาการเขียนโปรแกรมด้วย python และผมก็ได้โจทย์จากพี่โบ๊ต (พี่ป.เอก ที่ภาค) ผู้ซึ่งชักชวนให้มาเขียน python เป็นโจทย์ที่ไม่ยากมาก แต่แสดงให้เห็นถึงความสามารถของ pythom ครับ

ติดตาม blog ของพี่โบ๊ตได้ที่ http://sdayu.blogspot.com/

โจทย์มีอยู่ว่า
ที่มาของโจทย์ http://sdayu.blogspot.com/2013/04/blog-post_30.html

A = [random.randint(1, 150) for i in range(0,100)]

หาค่าเฉลี่ยของสมาชิกของ A ที่ละ 10 ค่า ให้อยู่ในรูปของลิสท์

หลังจากที่ผมนั่งอ่าน syntax การใช้งาน python อยู้่ช่วงระยะหนึ่ง ก็เขียน Code แก้ปัญหาดังกล่าวได้ดังนี้

import random
A = [random.randint(1, 150) for i in range(0,100)]
C=[]
for i in range(0,10):
 B= [A[j] for j in range(i*10,(i*10)+10)]
 C.append(sum(B)/len(B))
print(C)

แต่ว่าเฉลยของพี่โบ๊ตสั้นกว่า ลองไปดูกันครับ
 
import random
A = [random.randint(1, 150) for i in range(0,100)]
length = 10
average = [sum(A[a:a+length]) / len(A[a:a+length]) for a in range(0, len(A), length)]
print(average)

เราใช้ความสามารถทำ subset โดยใช้เครื่อง (Colon,:) ครับเช่น 
A=[1,2,3,4,5,6,7,8,9,10] 
print A[1:4]

ผลลัพธ์ก็จะออกมาคือ [2,3,4,5] 


**หมายเหตุ คำสั่ง range(1,6) ใน python เวอร์ชั่น 2.7 จะ return ออกเป็นลิสด์
 ในขณะที่ python 3.3 จะ return ออกมาเป็น object ถ้าเราสั่ง print(range(1,6)) ใน python3 จะได้ผลลพัธ์เป็น object แต่หากเราต้องการให้ผลลัพธ์ออกเป็น list เราจะต้องทำการ casting ค่า โดย list(range(1,6))

2 ความคิดเห็น: