พฤศจิกายน 27, 2559

Quiz3 : Simple Calculator

slide นำเสนอ : Quiz3.pdf  (รวม selection sort เล็กน้อย)

Programme Interface

การใช้งาน (use case)

        - คำนวณเลข 2 จำนวนง่ายๆ ได้ (บวก, ลบ, คูณ, หาร)

                1. ใส่ Input ซึ่งมี 3 ส่วนคือ ส่วนแรก ใส่ตัวตั้ง, ส่วนที่สอง กดปุ่มเพื่อเลือกเครื่องหมาย, ส่วนที่สาม ใส่ตัวบวก,ลบ,คุณ หรือ ตัวหาร
                2. กดที่ปุ่มที่มีเครื่องหมาย ' = '
                3. ผลลัพธ์จะแสดงอยู่ในช่องล่างสุด
 

        ในส่วน code

        

        ในส่วนนี้จะเป็นการสร้างช่องใส่ input ใน kv ด้วย class ที่มากับ kivy ที่ชื่อ TextInput มารับตัวเลขที่จะนำมาคำนวณ

                     

        ในส่วนนี้ใช้เป็นปุ่มที่จะรับค่าเครื่องหมาย (operator) โดยมีการ binding เมื่อ release ปุ่ม จะไปเรียกใช้ method จากไฟล์ .py เพื่อไปกำหนดค่าของเครื่องหมายตาม ปุ่มที่ถูกกด


        หลังจากได้รับ input ที่ต้องการทั้ง 3 แล้ว เมื่อผู้ใช้กดปุ่ม '=' แล้ว โปรแกรมก็จะเรียกใช้ method calculate( ) เพื่อเริ่มการคำนวณ เมื่อคำนวณเสร็จ ใน code บรรทัดสุดท้ายจะส่งค่าผลลัพธ์จะส่งค่าไปให้ทางส่วน .kv แสดงผลต่อไป
        โดยใน code การคำนวณนั้น เราไม่สามารถที่จะนำค่าที่นำมาจาก TextInput มาคำนวณทันทีเลยได้ เพราะค่าที่ได้รับมานั้นเป็น String ดังนั้นก่อนที่จะนำค่ามาคำนวณ จึงต้องเปลี่ยนค่าจะ String เป็นค่าตัวเลขที่สามารถคำนวณได้ ก็คือ int( ) หรือ float( ) แต่เนื่องจากใน use case ถัดไป int นั้นไม่สามารถที่จะ support ได้ ดังนั้นการคำนวณนี้จึงใช้ float( ) 

        - นำผลลัพธ์ที่ได้จากการคำนวณครั้งที่แล้วมาคำนวณต่อ (เป็นตัวตั้งของการคำนวณใหม่)

                1. หลังจากทำการคำนวณครั้งแรก หรือหลายครั้งไปแล้ว
                2. กดปุ่มที่แสดงผลลัพธ์ (ล่างสุด)
                3. ผลลัพธ์จากการคำนวณครั้งล่าสุด จะไปแทนที่ตัวตั้ง และรอการป้อน Input ที่เหลืออีก 2 ส่วน เพื่อใช้ไปการคำนวณต่อไป 

        ในส่วน code


        ทำการ binding ปุ่มที่แสดงผลลัพธ์ กับ method reCal( ) ซึ่งจะทำการกำหนดค่าของการคำนวณใหม่ให้ผู้ใช้ โดยจะนำค่าผลลัพธ์ครั้งล่าสุด ไปใส่แทน input1 หรือก็คือ ตัวตั้ง และกำหนดให้ input ตัวที่สอง และเครื่องหมายกลับไปเป็น default (ไม่มีค่า และกำลังหาใส่ค่า เพื่อนำไปคำนวณต่อ) จากนั้นจึง update ค่าไปให้ .kv แสดงผล ในบรรทัดสุดท้าย

ตุลาคม 18, 2559

Quiz2 : comiccreator

1. เปลี่ยนชื่อ method : on_children เป็น on_30september

           - เริ่มจากแก้ไขตามโจทย์

            - แล้วไปเพิ่มคำสั่ง on_30september ให้ถูกเรียกใช้ตามจุดต่างๆ


2. แสดงจำนวน StickMan บน statusbar

            - เพิ่ม text ที่ statusbar ด้านล่าง และเพิ่มตัวแปร smCount


           - เพิ่มการกำหนดค่าจาก drawingSpace ไปให้ statusbar หาก children = 0
           - เพิ่มการอัพเดทค่าของ smCount




           -  import : StickMan จาก comicwidgets
           - ทำการตรวจสอบชนิดของ children ใน remove หากเป็น StickMan ให้ลดจำนวน StickMan ลง 1 (sm_decrease)

            - เพิ่มการเรียกใช้ sm_increase ใน class: ToolStickman , Method: draw


3. การ remove แบบ Group
           - แยกกรณี การ remove (แบบ group / แบบไม่ group)

พฤศจิกายน 28, 2558

ปัญหา Raspberry Pi

1. รัน AS1 ได้ แต่รับค่า mouseX, mouseY เพี้ยนไป
2. การรันโปรแกรมค่อนข้างช้า
3. การต่อ wifi ไม่เสถียร

พฤศจิกายน 22, 2558

Lab Raspberry Pi

class Student:
    def __init__(self,name,Id,score):
        self.name = name
        self.id = Id
        self.score = score
    def get_name(self):
        return self.name
    def get_id(self):
        return self.id
    def get_score(self):
        return self.score
 
def setup():
    a = Student('Nay',1,50)
    b = Student('Tiny',2,70)
    c = Student('Kunkka',3,95)
    d = Student('Lina',4,79)
    e = Student('Balana',5,65)
    data = [a,b,c,d,e]
    display_data(data)
    count_grade(data)
    show_grade(data,3)
 
def count_grade(data):
    index = 0
    count = [0,0,0,0,0]
    text_temp = ['A','B','C','D','F']
    while(index < len(data)):
        if(data[index].get_score() > 80):
            count[0] += 1
        elif(data[index].get_score() > 70):
            count[1] += 1
        elif(data[index].get_score() > 60):
            count[2] += 1
        elif(data[index].get_score() > 50):
            count[3] += 1
        else:
            count[4] += 1
        index += 1  
    print('-----total grade-----')
    index = 0
    while(index < len(count)):
        print(text_temp[index],':',count[index],end = '   ')
        index += 1
    print()

def display_data(data):
    index = 0
    while(index < len(data)):
        print('---',index+1,'---')
        print('Name : ',data[index].get_name())
        print('ID : ',data[index].get_id())
        print('Score : ',data[index].get_score())
        grade_cal(data,index)
        print()
        index += 1

def grade_cal(data,index):
    print('Grade : ',end = '')
    if(data[index].get_score() > 80):
        print('A')
    elif(data[index].get_score() > 70):
        print('B')
    elif(data[index].get_score() > 60):
        print('C')
    elif(data[index].get_score() > 50):
        print('D')
    else:
        print('F')

def show_grade(data,Id):
    index = 0
    foundStudent = False  
    while(index < len(data) and not(foundStudent)):      
        if(data[index].get_id() == Id):
            foundStudent = True
        index += 1
    index -= 1  
    if(data[index].get_score() > 80):
        grade = 'A'
    elif(data[index].get_score() > 70):
        grade = 'B'
    elif(data[index].get_score() > 60):
        grade = 'C'
    elif(data[index].get_score() > 50):
        grade = 'D'
    else:
        grade = 'F'    
    print('---Grade Result---')
    print('name : ',data[index].get_name() )
    print('score : ',data[index].get_score())
    print('Grade : ',grade)

setup()