Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions scripts/translation/languages.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
languages = [
{"code": "en", "name": "English", "native_name": "English"},
{"code": "es", "name": "Spanish", "native_name": "Español"},
{"code": "fa", "name": "Persian", "native_name": "فارسی"},
{"code": "fr", "name": "French", "native_name": "Français"},
{"code": "de", "name": "German", "native_name": "Deutsch"},
{"code": "zh", "name": "Chinese", "native_name": "中文"},
Expand Down
7 changes: 7 additions & 0 deletions static/js/codemirror/codemirror.js
Original file line number Diff line number Diff line change
Expand Up @@ -5247,6 +5247,13 @@ window.CodeMirror = (function() {
if (code <= 0xff) return lowTypes.charAt(code);
else if (0x590 <= code && code <= 0x5f4) return "R";
else if (0x600 <= code && code <= 0x6ff) return arabicTypes.charAt(code - 0x600);
// Treat Arabic Supplement, Arabic Extended-A and Presentation Forms
// (which contain Persian/Farsi-specific letters) as AL ("r")
// so Persian text is handled like Arabic for bidi ordering.
else if ((0x750 <= code && code <= 0x77f) ||
(0xfb50 <= code && code <= 0xfdff) ||
(0xfe70 <= code && code <= 0xfeff)) return "r";
else if (0x700 <= code && code <= 0x8ac) return "r";
else if (0x700 <= code && code <= 0x8ac) return "r";
else return "L";
}
Expand Down
108 changes: 108 additions & 0 deletions tutorials/learnpython.org/fa/Basic Operators.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,108 @@
آموزش
--------

این بخش نحوه استفاده از عملگرهای پایه در پایتون را توضیح می‌دهد.

### عملگرهای حسابی

مانند سایر زبان‌های برنامه‌نویسی، عملگرهای جمع، تفریق، ضرب و تقسیم را می‌توان با اعداد استفاده کرد.<br>

number = 1 + 2 * 3 / 4.0
print(number)

سعی کنید پیش‌بینی کنید جواب چه خواهد شد. آیا پایتون ترتیب عملیات را رعایت می‌کند؟

یک عملگر دیگر که وجود دارد عملگر باقیمانده (%) است که باقی‌مانده صحیح تقسیم را برمی‌گرداند. تقسیم‌شونده % تقسیم‌کننده = باقی‌مانده.

remainder = 11 % 3
print(remainder)

استفاده از دو علامت ضرب پشت سر هم، توان را نشان می‌دهد.

squared = 7 ** 2
cubed = 2 ** 3
print(squared)
print(cubed)

### استفاده از عملگرها با رشته‌ها

پایتون از الحاق رشته‌ها با استفاده از عملگر جمع پشتیبانی می‌کند:

helloworld = "hello" + " " + "world"
print(helloworld)

پایتون همچنین از ضرب رشته‌ها برای ساخت رشته‌ای با توالی تکراری پشتیبانی می‌کند:

lotsofhellos = "hello" * 10
print(lotsofhellos)

### استفاده از عملگرها با لیست‌ها

لیست‌ها را می‌توان با عملگر جمع به هم متصل کرد:

even_numbers = [2,4,6,8]
odd_numbers = [1,3,5,7]
all_numbers = odd_numbers + even_numbers
print(all_numbers)

مانند رشته‌ها، پایتون از ساخت لیست‌های جدید با توالی تکراری با استفاده از عملگر ضرب پشتیبانی می‌کند:

print([1,2,3] * 3)

تمرین
--------

هدف این تمرین ساخت دو لیست به نام‌های `x_list` و `y_list` است،
که هر کدام شامل ۱۰ نمونه از متغیرهای `x` و `y` باشند.
همچنین باید لیستی به نام `big_list` بسازید که
متغیرهای `x` و `y` را هر کدام ۱۰ بار، با الحاق دو لیست ساخته شده، داشته باشد.

کد آموزش
-------------

x = object()
y = object()

# TODO: این کد را تغییر دهید
x_list = [x]
y_list = [y]
big_list = []

print("x_list شامل %d شیء است" % len(x_list))
print("y_list شامل %d شیء است" % len(y_list))
print("big_list شامل %d شیء است" % len(big_list))

# کد تست
if x_list.count(x) == 10 and y_list.count(y) == 10:
print("تقریباً تمام شد...")
if big_list.count(x) == 10 and big_list.count(y) == 10:
print("عالی!")

خروجی مورد انتظار
---------------

Ex().check_object('x_list').has_equal_value(expr_code = 'len(x_list)')
Ex().check_object('y_list').has_equal_value(expr_code = 'len(y_list)')
Ex().check_object('big_list').has_equal_value(expr_code = 'len(big_list)')
success_msg('کارت عالی بود!')

حل
--------

x = object()
y = object()

# TODO: این کد را تغییر دهید
x_list = [x] * 10
y_list = [y] * 10
big_list = x_list + y_list

print("x_list شامل %d شیء است" % len(x_list))
print("y_list شامل %d شیء است" % len(y_list))
print("big_list شامل %d شیء است" % len(big_list))

# کد تست
if x_list.count(x) == 10 and y_list.count(y) == 10:
print("تقریباً تمام شد...")
if big_list.count(x) == 10 and big_list.count(y) == 10:
print("عالی!")
160 changes: 160 additions & 0 deletions tutorials/learnpython.org/fa/Basic String Operations.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,160 @@
آموزش
--------

رشته‌ها (Strings) قطعاتی از متن هستند. آن‌ها می‌توانند هر چیزی بین کوتیشن‌ها باشند:

astring = "Hello world!"
astring2 = 'Hello world!'

همانطور که می‌بینید، اولین چیزی که یاد گرفتید چاپ یک جمله ساده بود. این جمله توسط پایتون به عنوان یک رشته ذخیره شد. با این حال، به جای اینکه بلافاصله رشته‌ها را چاپ کنیم، کارهای مختلفی که می‌توانید با آن‌ها انجام دهید را بررسی خواهیم کرد.
همچنین می‌توانید از کوتیشن تکی برای مقداردهی به یک رشته استفاده کنید. اما اگر مقدار مورد نظر خودش شامل کوتیشن تکی باشد، با مشکل مواجه می‌شوید. برای مثال، برای مقداردهی رشته‌ای که در این براکت است (کوتیشن‌های تکی ' ') باید فقط از کوتیشن دوتایی استفاده کنید، مانند این:

astring = "Hello world!"
print("single quotes are ' '")

print(len(astring))

این مقدار ۱۲ را چاپ می‌کند، چون "Hello world!" شامل ۱۲ کاراکتر است، شامل علائم نگارشی و فاصله‌ها.

astring = "Hello world!"
print(astring.index("o"))

این مقدار ۴ را چاپ می‌کند، چون اولین وقوع حرف "o" چهار کاراکتر بعد از اولین کاراکتر است. توجه کنید که در عبارت دو تا "o" وجود دارد - این متد فقط اولین را پیدا می‌کند.

اما چرا ۵ چاپ نشد؟ مگر "o" پنجمین کاراکتر رشته نیست؟ برای ساده‌تر شدن کارها، پایتون (و بیشتر زبان‌های برنامه‌نویسی دیگر) شمارش را از ۰ شروع می‌کنند نه ۱. پس اندیس "o" برابر با ۴ است.

astring = "Hello world!"
print(astring.count("l"))

برای کسانی که از فونت‌های عجیب استفاده می‌کنند، این یک حرف l کوچک است، نه عدد یک. این تعداد lهای موجود در رشته را می‌شمارد. بنابراین باید ۳ چاپ کند.

astring = "Hello world!"
print(astring[3:7])

این یک برش (slice) از رشته را چاپ می‌کند، که از اندیس ۳ شروع و در اندیس ۶ تمام می‌شود. اما چرا ۶ و نه ۷؟ باز هم، بیشتر زبان‌های برنامه‌نویسی این کار را می‌کنند - این کار انجام محاسبات داخل براکت‌ها را ساده‌تر می‌کند.

اگر فقط یک عدد داخل براکت‌ها بگذارید، کاراکتر همان اندیس را به شما می‌دهد. اگر عدد اول را حذف کنید اما دونقطه را نگه دارید، از ابتدا تا عدد دوم را می‌دهد. اگر عدد دوم را حذف کنید، از عدد اول تا انتها را می‌دهد.

حتی می‌توانید اعداد منفی داخل براکت‌ها بگذارید. این یک راه آسان برای شروع از انتهای رشته به جای ابتدای آن است. به این صورت، -۳ یعنی "سومین کاراکتر از انتها".

astring = "Hello world!"
print(astring[3:7:2])

این کاراکترهای رشته را از ۳ تا ۷ با پرش یک کاراکتر چاپ می‌کند. این سینتکس برش پیشرفته است. فرم کلی آن [شروع:پایان:گام] است.

astring = "Hello world!"
print(astring[3:7])
print(astring[3:7:1])

توجه کنید که هر دو خروجی یکسانی دارند.

تابعی مانند strrev در C برای معکوس کردن رشته وجود ندارد. اما با همین نوع سینتکس برش می‌توانید به راحتی یک رشته را معکوس کنید:

astring = "Hello world!"
print(astring[::-1])

این

astring = "Hello world!"
print(astring.upper())
print(astring.lower())

این‌ها یک رشته جدید با تمام حروف بزرگ یا کوچک ایجاد می‌کنند.

astring = "Hello world!"
print(astring.startswith("Hello"))
print(astring.endswith("asdfasdfasdf"))

این برای بررسی این است که آیا رشته با چیزی شروع یا تمام می‌شود. اولی True چاپ می‌کند چون رشته با "Hello" شروع می‌شود. دومی False چاپ می‌کند چون رشته قطعاً با "asdfasdfasdf" تمام نمی‌شود.

astring = "Hello world!"
afewwords = astring.split(" ")

این رشته را به چند رشته تقسیم می‌کند که در یک لیست قرار می‌گیرند. چون این مثال با فاصله تقسیم می‌کند، اولین آیتم لیست "Hello" و دومی "world!" خواهد بود.

تمرین
--------

سعی کنید کد را اصلاح کنید تا اطلاعات درست را با تغییر رشته چاپ کند.

کد آموزش
-------------

s = "Hey there! what should this string be?"
# طول باید ۲۰ باشد
print("Length of s = %d" % len(s))

# اولین وقوع "a" باید در اندیس ۸ باشد
print("The first occurrence of the letter a = %d" % s.index("a"))

# تعداد aها باید ۲ باشد
print("a occurs %d times" % s.count("a"))

# برش رشته به بخش‌های مختلف
print("The first five characters are '%s'" % s[:5]) # از ابتدا تا ۵
print("The next five characters are '%s'" % s[5:10]) # ۵ تا ۱۰
print("The thirteenth character is '%s'" % s[12]) # فقط شماره ۱۲
print("The characters with odd index are '%s'" %s[1::2]) #(اندیس‌گذاری از ۰)
print("The last five characters are '%s'" % s[-5:]) # پنج تای آخر تا انتها

# تبدیل همه چیز به حروف بزرگ
print("String in uppercase: %s" % s.upper())

# تبدیل همه چیز به حروف کوچک
print("String in lowercase: %s" % s.lower())

# بررسی شروع رشته
if s.startswith("Str"):
print("String starts with 'Str'. Good!")

# بررسی پایان رشته
if s.endswith("ome!"):
print("String ends with 'ome!'. Good!")

# تقسیم رشته به سه رشته جداگانه،
# هرکدام فقط شامل یک کلمه
print("Split the words of the string: %s" % s.split(" "))

خروجی مورد انتظار
---------------

test_object("s", incorrect_msg="مطمئن شوید که رشته اختصاص داده شده به `s` را طبق دستور تمرین تغییر داده‌اید.")
success_msg("آفرین!")

حل
--------

s = "Strings are awesome!"
# طول باید ۲۰ باشد
print("Length of s = %d" % len(s))

# اولین وقوع "a" باید در اندیس ۸ باشد
print("The first occurrence of the letter a = %d" % s.index("a"))

# تعداد aها باید ۲ باشد
print("a occurs %d times" % s.count("a"))

# برش رشته به بخش‌های مختلف
print("The first five characters are '%s'" % s[:5]) # از ابتدا تا ۵
print("The next five characters are '%s'" % s[5:10]) # ۵ تا ۱۰
print("The thirteenth character is '%s'" % s[12]) # فقط شماره ۱۲
print("The characters with odd index are '%s'" %s[1::2]) #(اندیس‌گذاری از ۰)
print("The last five characters are '%s'" % s[-5:]) # پنج تای آخر تا انتها

# تبدیل همه چیز به حروف بزرگ
print("String in uppercase: %s" % s.upper())

# تبدیل همه چیز به حروف کوچک
print("String in lowercase: %s" % s.lower())

# بررسی شروع رشته
if s.startswith("Str"):
print("String starts with 'Str'. Good!")

# بررسی پایان رشته
if s.endswith("ome!"):
print("String ends with 'ome!'. Good!")

# تقسیم رشته به سه رشته جداگانه،
# هرکدام فقط شامل یک کلمه
print("Split the words of the string: %s" % s.split(" "))
Loading