วันนี้เราจะลองมาทำโปรแกรมเปลี่ยนเลขฐาน
จาก 2 เป็น 10 กันนะครับ
.
.
.
โดยในครั้งนี้เราจะสร้างโปรแกรมด้วย Kivy ที่เป็น Python library
โค้ดต่อไปนี้คือโค้ดโดยรวมทั้งหมดเราจะทำการแบ่งช่วงเพื่อแยกอธิบาย
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
from kivy.core.window import Window
Window.size = (400, 150)
class Interface(Widget):
def __init__(self,**kwargs):
super(Interface, self).__init__(**kwargs)
self.btn1 = Button(text='2b to 10b', pos=(200,50), on_press=self.calculate,height=40,width=100)
self.textin2= TextInput(hint_text='write here',pos=(100,50),height=40)
self.label3= Label(text='0',pos=(300,50),height=40)
self.label4= Label(text='Number :',pos=(0,50),height=40)
self.add_widget((self.label4))
self.add_widget(self.btn1)
self.add_widget(self.textin2)
self.add_widget(self.label3)
def calculate(self,btn1):
result=0
for i in range(len(self.textin2.text)-1,-1,-1):
result= result + ((2**(i))*int(self.textin2.text[len(self.textin2.text)-(i+1)]))
self.label3.text=str(result)
class Myapp(App):
def build(self):
return Interface()
Myapp().run()
.
.
.
มาเริ่มต้นอธิบายโค้ดในแต่ละช่วงกัน
from kivy.app import App
from kivy.uix.widget import Widget
from kivy.uix.button import Button
from kivy.uix.textinput import TextInput
from kivy.uix.label import Label
เริ่มด้วยทำการ import module_name ที่จำเป็นต้องใช้ในการสร้างโปรแกรมมาก่อน
.
.
Window.size = (400, 150)
เริ่มด้วยการปรับขนาด resolution ของโปรแกรมเป็น กว้าง 400 สูง 150
.
class Interface(Widget):
def __init__(self,**kwargs):
super(Interface, self).__init__(**kwargs)
self.btn1 = Button(text='2b to 10b', pos=(200,50), on_press=self.calculate,height=40,width=100)
self.textin2= TextInput(hint_text='write here',pos=(100,50),height=40)
self.label3= Label(text='0',pos=(300,50),height=40)
self.label4= Label(text='Number :',pos=(0,50),height=40)
self.add_widget((self.label4))
self.add_widget(self.btn1)
self.add_widget(self.textin2)
self.add_widget(self.label3)
สร้างคลาส Interface (เป็น subclass ของ Widget class) ขึ้นมา
ภายในคลาสนี้ประกอบไปด้วย Object คือ
- ช่องใส่ข้อความ 1 อัน ชื่อ textin2
- ช่องแสดงข้อความ 2 อัน ชื่อ label3, label 4
btn1 : Text '2b to 10b', Positon X:200 Y:50, On press a button :
run function calculate
textin2 : Hint_text 'write here', Height : 40, Position X:100 Y:50
label3 : Text '0', Height : 40, Position X:300 Y:50
label4 : Text 'Number :', Height : 40, Position X:0 Y50
.
def calculate(self,btn1):
result=0
for i in range(len(self.textin2.text)-1,-1,-1):
result= result + ((2**(i))*int(self.textin2.text[len(self.textin2.text)-(i+1)]))
self.label3.text=str(result)
ส่วนของ function ของ Interface class ที่ใช้ในการคำนวณเพื่อเปลี่ยนเลขฐาน 2 ไป 10
เริ่มด้วยสร้างตัวแปร result มาเก็บค่าของ 0 type : integer
สร้างลูป for ที่จะวนโดยเริ่มจากให้ i คือ จำนวนสมาชิกของข้อความของ textin2 ถึง -1โดย ลดทีละ 1
โดยให้ result เป็นผลรวมของ
(2^i)*(ข้อมูลตำแหน่งใน textin2.text โดยเริ่มจาก 0 ถึง จำนวนมากสุดของข้อความ)
แทนค่า label3.text ด้วย result type : string
.
.
class Myapp(App):
def build(self):
return Interface()
Myapp().run()
จบด้วยการ การสร้างคลาส Myapp (เป็น subclass ของ App class)
ทำการเขียนฟังก์ชัน Build ทับอันเก่าเพื่อ return Interface()
สั่งให้ Myapp() ทำงานด้วย run method
จะได้หน้าตาของโปรแกรมออกมาแบบนี้
ใส่ตัวเลข 11110 เข้าไปในช่องว่าง
ได้คำตอบออกมาเป็น 30
ทำการตรวจคำตอบ
(2^4 * 1)+(2^3 * 1)+(2^2 * 1)+(2^1 * 1)+(2^0 * 0)
= 30
คำตอบถูกต้อง
เช็คกันอีกสักรอบ
ใส่ตัวเลข 1000001 ลงในช่องว่าง และได้คำตอบคือ 65
ทำการตรวจคำตอบ
(2^6 * 1)+(2^0 * 1) = 65
คำตอบถูกต้อง
.
.
.
ก็จบกันแล้วนะครับสำหรับการทำโปรแกรมเปลี่ยนเลขฐานจาก 2 ไป 10
ขอบคุณสำหรับการติดตามอ่านนะครับ