Examples

Practical code examples to help you learn SAPL programming

This page contains a collection of SAPL code examples organized by category. Each example includes the code, expected output, and an explanation of key concepts. Use these examples to learn SAPL programming and as a reference for your own projects.

Basic Examples

Hello World

The traditional first program that displays "Hello, World!" to the console:

እስቲ("ሰላም ዓለም!")
sapl

Output:

ሰላም ዓለም!

The እስቲ function displays the value of its argument to the console.

Comments

Adding comments to your code for documentation:

# ይህ አስተያየት ነው
እስቲ("ይህ ኮድ ነው") # ይህም በተመሳሳይ አስተያየት ነው
sapl

Output:

ይህ ኮድ ነው

Comments start with the # character and are ignored by the interpreter.

Basic Arithmetic

Performing simple arithmetic operations:

እስቲ(5 + 3)   # ድምር
እስቲ(10 - 4)  # ልዩነት
እስቲ(3 * 7)   # 곱셈
እስቲ(20 / 5)  # ክፍፍል
እስቲ(10 % 3)  # ቀሪ
እስቲ(2 ^ 3)   # ኃይል
sapl

Output:

8
6
21
4
1
8

Variables & Data Types

Variable Declaration

Declaring variables and performing operations:

ሀ = 5
ለ = 10
እስቲ(ሀ + ለ)
sapl

Output:

15

Variables are created by assigning a value to a name. No declaration keyword is needed.

String Operations

Working with text strings:

ስም = "አበበ"
ሰላምታ = "ሰላም " + ስም + "!"
እስቲ(ሰላምታ)
sapl

Output:

ሰላም አበበ!
ሰላም አበበ!

Lists and Arrays

Creating and manipulating lists:

ቁጥሮች = [1, 2, 3, 4, 5]
እስቲ(ቁጥሮች)
sapl

Output:

[1, 2, 3, 4, 5]

Dictionaries

Working with key-value pairs:

ሰው = {
  "ስም": "አበበ",
  "ዕድሜ": 25,
  "ከተማ": "አዲስ አበባ"
}
እስቲ(ሰው)
sapl

Output:

{"ስም": "አበበ", "ዕድሜ": 25, "ከተማ": "አዲስ አበባ"}

Control Flow

If-Else Statements

Making decisions in your code:

ዕድሜ = 18

ከሆነ ዕድሜ >= 18:
    እስቲ("አዋቂ ነህ")
ካልሆነ:
    እስቲ("ልጅ ነህ")
sapl

Output:

አዋቂ ነህ

The ከሆነ statement evaluates a condition and executes code based on whether it's true or false.

Nested Conditionals

Using multiple conditions with elif:

ውጤት = 85

ከሆነ ውጤት >= 90:
    እስቲ("አማካይ ነው")
ወይም_እንደሆነ ውጤት >= 80:
    እስቲ("ጥሩ ነው")
ወይም_እንደሆነ ውጤት >= 70:
    እስቲ("አማካይ ነው")
ካልሆነ:
    እስቲ("አሳሳች ነው")
sapl

Output:

B

For Loops

Iterating through a range of numbers:

ለ ሀ በ 1 እስከ 5:
  እስቲ(ሀ)
ጨርስ
sapl

Output:

1
2
3
4
5

The loop iterates through a range of values, executing the code block for each value.

While Loops

Executing code while a condition is true:

ሀ = 1
በሚሆንበት ሀ <= 5
  እስቲ(ሀ)
  ሀ = ሀ + 1
ጨርስ
sapl

Output:

1
2
3
4
5

Break and Continue

Controlling loop execution:

# አቋርጥ ምሳሌ
ለ ሀ በ 1 እስከ 10
  ከሆነ ሀ == 6
    አቋርጥ
  ጨርስ
  እስቲ(ሀ)
ጨርስ

እስቲ("---")

# ቀጥል ምሳሌ
ለ ሀ በ 1 እስከ 10
  ከሆነ ሀ % 2 == 0
    ቀጥል
  ጨርስ
  እስቲ(ሀ)
ጨርስ
sapl

Output:

1
2
3
4
5
---
1
3
5
7
9

አቋርጥ exits the loop completely, while ቀጥል skips the current iteration and continues with the next one.

Functions

Basic Functions

Creating and calling functions:

ፈንክሽን ሰላምታ()
  እስቲ("ሰላም ዓለም!")
ጨርስ

# ፈንክሽን መጥራት
ሰላምታ()
sapl

Output:

ሰላም ዓለም!

Functions with Parameters

Creating functions that accept parameters:

ፈንክሽን ሰላምታ(ስም)
  እስቲ("ሰላም " + ስም + "!")
ጨርስ

ሰላምታ("አበበ")
ሰላምታ("ከበደ")
sapl

Output:

ሰላም አበበ!
ሰላም ከበደ!

Return Values

Functions that return values:

ፈንክሽን ድምር(ሀ, ለ)
  መልስ ሀ + ለ
ጨርስ

ውጤት = ድምር(5, 3)
እስቲ(ውጤት)

# ሌላ ምሳሌ
ፈንክሽን ከፍተኛ(ሀ, ለ)
  ከሆነ ሀ > ለ
    መልስ ሀ
  ካልሆነ
    መልስ ለ
  ጨርስ
ጨርስ

እስቲ(ከፍተኛ(10, 5))
እስቲ(ከፍተኛ(7, 12))
sapl

Output:

8
10
12

The መልስ keyword is used to return a value from a function.

Recursive Functions

Functions that call themselves:

ፈንክሽን ፋክቶሪያል(ቁጥር)
  ከሆነ ቁጥር <= 1
    መልስ 1
  ካልሆነ
    መልስ ቁጥር * ፋክቶሪያል(ቁጥር - 1)
  ጨርስ
ጨርስ

እስቲ(ፋክቶሪያል(5))  # 5! = 5 * 4 * 3 * 2 * 1 = 120
sapl

Output:

120

Advanced Examples

File I/O

Reading from and writing to files:

# ፋይል መጻፍ
ፋይል = ፋይልክፈት("ምሳሌ.txt", "ጻፍ")
ፋይል.ጻፍ("ይህ የSAPL ፕሮግራሚንግ ቋንቋ ምሳሌ ነው።")
ፋይል.ዝጋ()

# ፋይል ማንበብ
ፋይል = ፋይልክፈት("ምሳሌ.txt", "አንብብ")
ይዘት = ፋይል.አንብብ()
ፋይል.ዝጋ()
እስቲ(ይዘት)
sapl

Output:

ይህ የSAPL ፕሮግራሚንግ ቋንቋ ምሳሌ ነው።

Error Handling

Handling exceptions with try-except:

ሞክር
  ቁጥር = ወደቁጥር("abc")
  እስቲ(ቁጥር)
ያዝ ስህተት
  እስቲ("ስህተት ተከስቷል: " + ስህተት)
ጨርስ

# ፋይል ማንበብ ሞክር
ሞክር
  ፋይል = ፋይልክፈት("የለም.txt", "አንብብ")
  ይዘት = ፋይል.አንብብ()
  ፋይል.ዝጋ()
ያዝ ስህተት
  እስቲ("ፋይሉ አልተገኘም: " + ስህተት)
ጨርስ
sapl

Output:

ስህተት ተከስቷል: Invalid conversion
ፋይሉ አልተገኘም: File not found

Working with Modules

Importing and using modules:

# ሂሳብ ሞጁል አስመጣ
አስመጣ ሂሳብ

# ሞጁል ተግባራትን መጠቀም
እስቲ(ሂሳብ.ስኩዌር(4))
እስቲ(ሂሳብ.ስኩዌርሩት(16))
እስቲ(ሂሳብ.ፓይ)
እስቲ(ሂሳብ.ሲን(ሂሳብ.ፓይ / 2))

# ሌላ ሞጁል ምሳሌ
አስመጣ ጊዜ
እስቲ(ጊዜ.አሁን())
sapl

Output:

16
4
3.141592653589793
1.0
2023-06-12 23:34:13

Data Processing

Processing data with lists and dictionaries:

# ተማሪዎች ዝርዝር
ተማሪዎች = [
  {"ስም": "አበበ", "ውጤት": 85},
  {"ስም": "ከበደ", "ውጤት": 92},
  {"ስም": "አልማዝ", "ውጤት": 78},
  {"ስም": "ሰላም", "ውጤት": 95},
  {"ስም": "ፍቅር", "ውጤት": 88}
]

# አማካይ ውጤት ማግኘት
ድምር = 0
ለ ተማሪ በ ተማሪዎች
  ድምር = ድምር + ተማሪ["ውጤት"]
ጨርስ

አማካይ = ድምር / ተማሪዎች.ርዝመት()
እስቲ("አማካይ ውጤት: " + አማካይ)

# ከፍተኛ ውጤት ያለው ተማሪ ማግኘት
ከፍተኛውጤት = 0
ከፍተኛተማሪ = ""

ለ ተማሪ በ ተማሪዎች
  ከሆነ ተማሪ["ውጤት"] > ከፍተኛውጤት
    ከፍተኛውጤት = ተማሪ["ውጤት"]
    ከፍተኛተማሪ = ተማሪ["ስም"]
  ጨርስ
ጨርስ

እስቲ("ከፍተኛ ውጤት ያለው ተማሪ: " + ከፍተኛተማሪ + " (" + ከፍተኛውጤት + ")")
sapl

Output:

አማካይ ውጤት: 87.6
ከፍተኛ ውጤት ያለው ተማሪ: ሰላም (95)

Simple Game

A simple number guessing game:

አስመጣ ዘፈቀደ

# ዘፈቀደ ቁጥር ማመንጨት
ቁጥር = ዘፈቀደ.ከ(1, 100)
ሙከራዎች = 0
ገምት = 0

እስቲ("ከ1 እስከ 100 ያለ ቁጥር አስብኩ። ልትገምት ትችላለህ?")

በሚሆንበት ገምት != ቁጥር
  ገምት = ወደቁጥር(አስገባ("ገምት: "))
  ሙከራዎች = ሙከራዎች + 1
  
  ከሆነ ገምት < ቁጥር
    እስቲ("ከፍ በል!")
  ከሆነደግሞ ገምት > ቁጥር
    እስቲ("ዝቅ በል!")
  ካልሆነ
    እስቲ("እንኳን ደስ አለህ! በ" + ሙከራዎች + " ሙከራዎች አግኝተሃል።")
  ጨርስ
ጨርስ
sapl

Interactive Game - Sample Output:

ከ1 እስከ 100 ያለ ቁጥር አስብኩ። ልትገምት ትችላለህ?
ገምት: 50
ከፍ በል!
ገምት: 75
ከፍ በል!
ገምት: 87
ዝቅ በል!
ገምት: 82
ከፍ በል!
ገምት: 85
እንኳን ደስ አለህ! በ5 ሙከራዎች አግኝተሃል።

Project Examples

To-Do List Application

A simple to-do list manager:

# ቱዱ ሊስት አፕሊኬሽን
ፈንክሽን ዋና()
  ቱዱዎች = []
  ምርጫ = ""
  
  በሚሆንበት ምርጫ != "5"
    # ምናሌ አሳይ
    እስቲ("
=== የቱዱ ሊስት አፕሊኬሽን ===")
    እስቲ("1. ቱዱ አሳይ")
    እስቲ("2. ቱዱ አክል")
    እስቲ("3. ቱዱ አጠናቅቅ")
    እስቲ("4. ቱዱ አጥፋ")
    እስቲ("5. ውጣ")
    
    ምርጫ = አስገባ("
ምርጫህን አስገባ: ")
    
    ከሆነ ምርጫ == "1"
      ቱዱዎችአሳይ(ቱዱዎች)
    ከሆነደግሞ ምርጫ == "2"
      ቱዱዎችአክል(ቱዱዎች)
    ከሆነደግሞ ምርጫ == "3"
      ቱዱአጠናቅቅ(ቱዱዎች)
    ከሆነደግሞ ምርጫ == "4"
      ቱዱአጥፋ(ቱዱዎች)
    ከሆነደግሞ ምርጫ == "5"
      እስቲ("ስለተጠቀምክ እናመሰግናለን!")
    ካልሆነ
      እስቲ("ልክ ያልሆነ ምርጫ። እባክህ እንደገና ሞክር።")
    ጨርስ
  ጨርስ
ጨርስ

ፈንክሽን ቱዱዎችአሳይ(ቱዱዎች)
  ከሆነ ቱዱዎች.ርዝመት() == 0
    እስቲ("
ምንም ቱዱዎች የሉም።")
    መልስ
  ጨርስ
  
  እስቲ("
=== ቱዱዎች ===")
  ለ መረጃ በ ቱዱዎች
    ምልክት = "[x]" ከሆነ መረጃ["ተጠናቅቋል"] ካልሆነ "[ ]"
    እስቲ(መረጃ["መታወቂያ"] + ". " + ምልክት + " " + መረጃ["ስራ"])
  ጨርስ
ጨርስ

ፈንክሽን ቱዱዎችአክል(ቱዱዎች)
  ስራ = አስገባ("
አዲስ ቱዱ: ")
  ቱዱዎች.አክል({
    "መታወቂያ": ቱዱዎች.ርዝመት() + 1,
    "ስራ": ስራ,
    "ተጠናቅቋል": ሐሰት
  })
  እስቲ("ቱዱ ተጨምሯል።")
ጨርስ

ፈንክሽን ቱዱአጠናቅቅ(ቱዱዎች)
  ከሆነ ቱዱዎች.ርዝመት() == 0
    እስቲ("
ምንም ቱዱዎች የሉም።")
    መልስ
  ጨርስ
  
  ቱዱዎችአሳይ(ቱዱዎች)
  መታወቂያ = ወደቁጥር(አስገባ("
የትኛውን ቱዱ ጨርሰሃል? (መታወቂያ ቁጥር አስገባ): "))
  
  ለ መረጃ በ ቱዱዎች
    ከሆነ መረጃ["መታወቂያ"] == መታወቂያ
      መረጃ["ተጠናቅቋል"] = እውነት
      እስቲ("ቱዱ ተጠናቅቋል።")
      መልስ
    ጨርስ
  ጨርስ
  
  እስቲ("ልክ ያልሆነ መታወቂያ።")
ጨርስ

ፈንክሽን ቱዱአጥፋ(ቱዱዎች)
  ከሆነ ቱዱዎች.ርዝመት() == 0
    እስቲ("
ምንም ቱዱዎች የሉም።")
    መልስ
  ጨርስ
  
  ቱዱዎችአሳይ(ቱዱዎች)
  መታወቂያ = ወደቁጥር(አስገባ("
የትኛውን ቱዱ ማጥፋት ትፈልጋለህ? (መታወቂያ ቁጥር አስገባ): "))
  
  ለ መረጃ በ ቱዱዎች
    ከሆነ መረጃ["መታወቂያ"] == መታወቂያ
      ቱዱዎች.አስወግድ(መረጃ)
      እስቲ("ቱዱ ተወግዷል።")
      መልስ
    ጨርስ
  ጨርስ
  
  እስቲ("ልክ ያልሆነ መታወቂያ።")
ጨርስ

# አፕሊኬሽን አስጀምር
ዋና()
sapl

Interactive Application - Sample Output:

=== የቱዱ ሊስት አፕሊኬሽን ===
1. ቱዱ አሳይ
2. ቱዱ አክል
3. ቱዱ አጠናቅቅ
4. ቱዱ አጥፋ
5. ውጣ

ምርጫህን አስገባ: 2

አዲስ ቱዱ: ሪፖርት መጻፍ
ቱዱ ተጨምሯል።

=== የቱዱ ሊስት አፕሊኬሽን ===
...

Simple Calculator

A basic calculator application:

# ቀላል ካልኩሌተር
ፈንክሽን ዋና()
  እስቲ("=== ቀላል ካልኩሌተር ===")
  እስቲ("ለመውጣት 'exit' ይጻፉ")
  
  በሚሆንበት እውነት
    ግባት = አስገባ("
ምሳሌ (5 + 3): ")
    
    ከሆነ ግባት == "exit"
      አቋርጥ
    ጨርስ
    
    ሞክር
      ውጤት = ግምት(ግባት)
      እስቲ("ውጤት: " + ውጤት)
    ያዝ ስህተት
      እስቲ("ስህተት: " + ስህተት)
    ጨርስ
  ጨርስ
ጨርስ

ፈንክሽን ግምት(ግባት)
  # ቀላል ግምት ፈንክሽን
  መልስ ግምትአድርግ(ግባት)
ጨርስ

# አፕሊኬሽን አስጀምር
ዋና()
sapl

Interactive Application - Sample Output:

=== ቀላል ካልኩሌተር ===
ለመውጣት 'exit' ይጻፉ

ምሳሌ (5 + 3): 5 + 3
ውጤት: 8

ምሳሌ (5 + 3): 10 * 2
ውጤት: 20

ምሳሌ (5 + 3): exit