بررسی صحت اعجاز عددی قرآن با پایتون

بِسْمِ اللَّـهِ الرَّحْمَـٰنِ الرَّحِيم

احتمالا درباره اعجاز عددی قرآن مطالبی شنیدید. مخصوصا اعجاز قرآن درباره عدد ۱۹. در آیات ۳۰ و ۳۱ سوره مدثر خدا میفرماید:

عَلَيْهَا تِسْعَةَ عَشَرَ
وَمَا جَعَلْنَا أَصْحَابَ النَّارِ إِلَّا مَلَائِكَةً ۙ وَمَا جَعَلْنَا عِدَّتَهُمْ إِلَّا فِتْنَةً لِلَّذِينَ كَفَرُوا لِيَسْتَيْقِنَ الَّذِينَ أُوتُوا الْكِتَابَ وَيَزْدَادَ الَّذِينَ آمَنُوا إِيمَانًا ۙ وَلَا يَرْتَابَ الَّذِينَ أُوتُوا الْكِتَابَ وَالْمُؤْمِنُونَ ۙ وَلِيَقُولَ الَّذِينَ فِي قُلُوبِهِمْ مَرَضٌ وَالْكَافِرُونَ مَاذَا أَرَادَ اللَّهُ بِهَٰذَا مَثَلًا ۚ كَذَٰلِكَ يُضِلُّ اللَّهُ مَنْ يَشَاءُ وَيَهْدِي مَنْ يَشَاءُ ۚ وَمَا يَعْلَمُ جُنُودَ رَبِّكَ إِلَّا هُوَ ۚ وَمَا هِيَ إِلَّا ذِكْرَىٰ لِلْبَشَرِ
نوزده فرشته بر آن گماشته‌اند.
موكلان دوزخ را جز از فرشتگان قرارنداديم. و شمار آنها جز براى امتحان كافران نيست. تا اهل كتاب يقين كنند و بر ايمان مؤمنان بيفزايد و اهل كتاب و مؤمنان شك نكنند. و تا آنان كه در دلهاشان مرضى است نگويند: خدا از اين مثَل چه مى‌خواسته است؟ خدا اينچنين هر كس را كه بخواهد گمراه مى‌كند و هر كس را كه بخواهد راه مى‌نمايد. و شمار سپاهيان پروردگارت را جز او نداند. و اين سخن جز اندرزى از براى مردم نيست.

این آیات نشان میدهند که واقعا عدد ۱۹ عددی خاص در قرآن است زیرا خود قرآن گفته است:«شمار آنها برای افزایش ایمان مومنان است»

در این نوشته قصد داریم صحت این ادعا (اعجاز عددی قرآن) را به وسیله کدهای پایتون بسنجیم. میدانید که محاسبه دستی این مسائل خیلی سخت هستند. همچنین اعجازهای معرفی شده در این دو ویدئو را بررسی میکنیم:

ویدئو ۱ - ویدئو ۲

در این محاسبات از این قرآن حالت Simple (clean) و XML استفاده میکنیم.
برای کار کردن با XML من از xml.etree.ElementTree استفاده میکنم.

۱- ۵۷

وقتی شماره سوره و تعداد آیه یک سوره را جمع میکنیم، عددی زوج یا فرد به دست میاید. این اعجاز ادعا میکند که از بین ۱۱۴ سوره قرآن، برای ۵۷ سوره این عدد زوج و برای ۵۷ سوره این عدد فرد است. برویم سراغ محاسبه:

import xml.etree.ElementTree as ET

file = &quot/path/to/quran-simple-clean.xml&quot
tree = ET.parse(file)

num = 0

def isEven(num):
    return num % 2 == 0
for i in range(114):
    suranum = int(tree.findall(&quotsura&quot)[i].get(&quotindex&quot))
    suraayanum = len(tree.findall(&quotsura&quot)[i].findall(&quotaya&quot))
    if isEven(suranum + suraayanum):
        num += 1
        print(&quotnum:&quot, num)

در خط اول کتابخانه‌های لازم را صدا میزنیم. این کتابخانه برای همه کدهایمان لازم هستند پس در بقیه کدها آن را نمینویسم.

متغیری به نام num میسازیم که تعداد سوره‌ها را ذخیره میکند.

تابعی با نام isEven برای بررسی زوج بودن ورودی میسازیم.

حلقه‌ای از ۰ تا ۱۱۳ برای بررسی سوره‌های قرآن (۱۱۴ سوره) میسازیم.

در حلقه هر بار سوره از پروندهٔ XML که داده‌ایم دریافت میشود و تعداد آیات و شمارهٔ سوره در دو متغیر ذخیره میشوند.

در خط بعد، بررسی میکنیم که آیا شماره سوره به علاوه تعداد آیاتش زوج میشوند یا خیر؟ اگر بله، num به علاوه یک میشود. و همچنین در هر حلقه اگر شرط برقرار بود، num چاپ میشود. اگر دوست داشتید میتوانید خط چاپ را در خارج از حلقه قرار دهید.

حال وقتی نتیجه چاپ میشود، میبینیم عدد ۵۷ تعداد سوره‌هایی است که این عدد در آنها زوج است. پس تعداد سوره‌هایی که این عدد در آنها فرد است هم ۵۷ میشوند. این از این!

۲- ۳۳۰۳

این ویدئو ادعا میکند که جمع شماره سوره‌هایی که عددی که در بالا اشاره شد در آنها زوج است، برابر جمع تعداد آیات سوره‌هایی است که در آن عدد مذکور فرد است و آن هم برابر ۳۳۰۳ است. ببینیم ویدئو راست میگوید یا خیر. برای اعداد زوج:

num_sum = 0

def isEven(num):
    return num % 2 == 0
for i in range(114):
    suranum = int(tree.findall(&quotsura&quot)[i].get(&quotindex&quot))
    suraayanum = len(tree.findall(&quotsura&quot)[i].findall(&quotaya&quot))
    if isEven(suranum + suraayanum):
        num_sum += suranum
        print(&quotnum_sum:&quot, num_sum)

برای اعداد فرد هم دو تغییر باید در کد ایجاد کنید:

۱- بعد از if یک not بگذارید.

۲- به جای num_sum += suranum بنویسید num_sum += suraayanum.

بیشتر بخش‌های کد مثل بخش ۱ است. مهمترین تفاوتش در خط بالای پرینت است که بجای += 1 چیز دیگری نوشتیم.

بله؛ وقتی خروجی بگیریم در نهایت عدد ۳۳۰۳ را در هر دو مورد (زوج و فرد) خواهیم دید.

۳- ۶۲۳۶

ویدئو میگوید که اگر تمام حاصل جمع تمام سوره‌هایی را که جمع عددشان و تعداد آیاتشان زوج است را جمع کنیم، یعنی عدد گفته شده را در تمام آن ۵۷ سوره جمع کنیم، نتیجه میشود ۶۲۳۶ که تعداد آیات قرآن است:

sum = 0

def isEven(num):
    return num % 2 == 0
for i in range(114):
    suranum = int(tree.findall(&quotsura&quot)[i].get(&quotindex&quot))
    suraayanum = len(tree.findall(&quotsura&quot)[i].findall(&quotaya&quot))
    if isEven(suranum + suraayanum):
        sum += suranum + suraayanum
        print(&quotsum:&quot, sum)

در کد بالا، متغیر ما sum است. دوباره کل سوره‌ها را دور میکنیم و اگر suranum + suraayanum هر سوره‌ای زوج شد، این عدد سوره را به علاوه sum میکنیم.

در نهایت میبینیم که نتیجه شد ۶۲۳۶!

البته در این بخش بهتر است که تعداد آیات قرآن را هم محاسبه کنیم تا شک و شبهه‌ای باقی نماند:

sum = 0
for sura in tree.findall(&quotsura&quot):
    sum += len(sura.findall(&quotaya&quot))
print(sum)

در کد بالا متغیری بنام sum داریم که سوره به سوره میگردیم و تعداد آیاتش را با آن اضافه میکنیم. پس از اجرای برنامه میبینیم که عدد ۶۲۳۶ در نمایشگر ظاهر شد.

۴- ۶۵۵۵

ویدئو میگوید اگر همان کار بخش ۳ را روی ۵۷ سوره دیگر انجام دهیم، نتیجه میشود ۶۵۵۵ که جمع اعداد ۱ تا ۱۱۴ (تعداد سوره‌های قرآن) است. هما کد را امتحان کنید فقط با این تفاوت که بعد از if بنویسید not. نتیجه کاملا صحیح است. برای محاسبه جمع اعداد ۱ تا ۱۱۴ هم میتونیم از ۵۷×۱۱۵ استفاده کنیم که میبینیم میشود ۶۵۵۵.

۵- مدت نبوت

﴿بسم الله الرحمن الرحیم﴾ ۱۹ حرف دارد. ۳ تشدید دارد که به آنها حروف مخفی میگویند. یک «الف» هم در «رحمن» دارد که نوشته نمیشود ولی خوانده میشود. ۱۹+۳+۱ میشود ۲۳ که ویدئو ادعا میکند نشانه ۲۳ سال نبوت پیامبر از که ۳ سال آن مخفی (حروف مشدد) بوده. از طرفی وقتی حروف تکراری را حذف کنیم ۱۰ حرف باقی میماند که نشانه ۱۰ سال نبوت در مدینه است. این محاسبات چون سخت نبودند دستی حساب کردم.

۶- «ب» و «م» در سوره حمد

اولین آیه قرآن با «ب» شروع شده و به «م» ختم شده. جمع تعداد «ب»ها و «م»ها در سوره اول قرآن (حمد) برابر ۱۹ است:

sura = tree.find(&quotsura&quot)
sum = 0
for aya in sura.findall(&quotaya&quot):
    for char in aya.get(&quottext&quot):
        if char in &quotبم&quot:
            num += 1
print(num)

در کد بالا محتوای سوره حمد را در sura ذخیره میکنیم. به ازای هر آیه سوره، متن آیه را بررسی میکنیم. تک به تک حروف را بررسی میکنیم و اگر حرفی داخل رشته "بم" باشد، متغیر sum را که در ابتدا صفر بود، یک واحد افزایش میدهیم. در این صورت در نهایت میبینیم که خروجی ما شد ۱۹.

۷- «ب» در حمد و «س» در ناس

اولین حرف در قرآن «ب» و آخرین آن «س» است. طبق گفته ویدئو مجموع تعداد «ب»ها در اولین سوره و تعداد «س»ها در آخرین سوره میشود ۱۹. ببینیم:

num = 0
sura = tree.findall(&quotsura&quot)[0]
for aya in sura.findall(&quotaya&quot):
    for char in aya.get(&quottext&quot):
        if char == &quotب&quot:
            num += 1
sura = tree.findall(&quotsura&quot)[-1]
for aya in sura.findall(&quotaya&quot):
    for char in aya.get(&quottext&quot):
        if char == &quotس&quot:
            num += 1
print(num)

ساختار کد بالا مانند کد بخش ۶ است با این تفاوت که ما دو سوره را بررسی کردیم نه یک سوره. وقتی کد بالا را اجرا کنیم در نهایت به عدد ۱۴ میرسیم که با گفته ویدئو منطبق نیست. اگر هم هر دو حرف «ب» و «س» را برای هردو سوره حساب کنیم به عدد ۱۹ میرسیم که عدد مورد نظر است ولی نه به صورتی که در ویدئو گفته شده.

۸- تعداد سوره‌ها با آیات تک رقمی

ویدئو ادعا میکند که تنها ۱۹ سوره داریم که تعداد آیاتشان تک رقمیست:

num = 0
for sura in tree.findall(&quotsura&quot):
    if len(sura.findall(&quotaya&quot)) < 10:
        num += 1
print(num)

در کد بالا متغیری بنام num داریم که در ابتدا صفر است. کل سوره‌ها را بررسی میکنیم. اگر تعداد آیات سوره‌ای کمتر از ۱۰ بود، num را یک واحد افزایش میدهیم. در نهایت در خروجی عدد ۱۹ را میبینیم. بله درست است.

۹- تعداد حروف «بسم الله الرحمن الرحیم»

طبق گفته ویدئو، اولین آیه قرآن، ۱۹ حرف دارد. بررسی کنیم:

num = 0
for char in tree.find(&quotsura&quot).find(&quotaya&quot).get(&quottext&quot):
    if char != &quot &quot:
        num += 1
print(num)

با find اولین سوره، اولین آیه‌اش و متن آن آیه را پیدا میکنیم؛ سپس در یک حلقه کاراکترهای غیر از فاصله را میشماریم. نتیجه میشود ۱۹؛ درست است.

۱۰- اولین و آخرین آیه ۱۹ حرفی قرآن

اولین آیهٔ ۱۹حرفی قرآن که «بِسْمِ ٱللَّهِ ٱلرَّحْمَٰنِ ٱلرَّحِيمِ» است. ویدئو ادعا میکند آخرین آیه ۱۹ حرفی قرآن، آیه دوم سوره مسد است:«مَآ أَغْنَىٰ عَنْهُ مَالُهُۥ وَمَا كَسَبَ». حال کجای این قضیه حائز اهمیت است؟ آیهٔ اول با «بسـ» شروع و به «م» ختم شده است و آیه آخر با «م» شروع و به «سب» ختم شده است. دقیقا عکس هم. بررسی کنیم:

def remove(string):
    return string.replace(&quot &quot, &quot&quot)
for sura in tree.findall(&quotsura&quot):
    for aya in sura.findall(&quotaya&quot):
        if len(remove(aya.get(&quottext&quot))) == 19:
            print(sura.get(&quotname&quot), aya.get(&quotindex&quot), aya.get(&quottext&quot))

به ازای هر آیه از هر سوره بررسی میکند که آیا آیه ۱۹ حرفی است یا نه. اگر بود، نام سوره، شمارهٔ آیه و متن آیه را چاپ میکند. میبینیم آخرین خطی که چاپ میکند این است:«المسد 2 ما أغنى عنه ماله وما كسب». درست است آیه ۲ سوره مسد با آن متن. در ضمن تابع remove برای حذف فاصله از متن آیات است تا شمارش دچار خطا نشود.

۱۱- نوزدهمین آیه از آخر

طبق گفته ویدئو، آیه‌ای که به عنوان آخرین آیهٔ ۱۹ حرفی به آن اشاره شد، نوزدهمین آیه از آخر قرآن هم هست.

suras = tree.findall(&quotsura&quot)
suras = suras[::-1]
for sura in suras:
    ayas = sura.findall(&quotaya&quot)
    ayas = ayas[::-1]
    for aya in ayas:
        if len(remove(aya.get(&quottext&quot))) == 19:
            print(sura.get(&quotname&quot), aya.get(&quotindex&quot), aya.get(&quottext&quot))
            exit()

ابتدا فهرست سوره‌ها را در suras ذخیره میکنیم و آن را عکس میکنیم چون میخواهیم از آخر به اول بیاییم. سپس به ازای هر سوره، برای آیه‌ها این کار را میکنیم. به اولین آیهٔ ۱۹ حرفی از آخر که رسیدیم، مثل مرحلهٔ قبل آن را چاپ میکنیم و خارج میشویم. بله؛ همان آیه است.

۱۲- تعداد سوره‌هایی که بدون «الـ» شروع میشوند

این ویدئو میگوید که تنها ۱۹ سوره بدون «الـ» شروع میشوند. سوره‌هایی که از آنها نام برده شده، چندین اشتباه دارند. به عنوان مثال، سوره آل عمران و بقره هر دو با «الم» شروع میشوند. سوره آل عمران در فهرست وجود دارد ولی سوره بقره خیر. به نظرم نیازی به کد برای بررسی صحت این ادعا وجود ندارد و اشتباه بودن آن واضح است.

۱۳- سوره قلم

این ویدئو ادعا میکند که آخرین حرف مقطعه قرآن در اولین آیه سوره قلم (ن) است و این آیه ۱۹مین آیهٔ قرآن است که با حرف «نـ» شروع میشود. اینکه اولین آیهٔ سورهٔ قلم آخرین آیهٔ دارای حروف مقطعه است درست است. ولی ببینیم این آیه چندمین آیه است:

num = 0

for sura in tree.findall(&quotsura&quot):
    for aya in sura.findall(&quotaya&quot):
        if aya.get(&quottext&quot)[0] == &quotن&quot:
            num += 1
            if num == 19:
                print(sura.get(&quotname&quot), aya.get(&quotindex&quot), aya.get(&quottext&quot))
                exit()

به ازای هر آیه از هر سوره بررسی میکنیم که آیا اولین حرف از آیه «ن» است یا خیر. اگر بله num یک واحد افزایش میابد. اگر num نوزده شد، مثل مراحل قبل آیه چاپ میشود و برنامه به اتمام میرسد. میبینیم که گفتهٔ ویدئو درست است.

۱۴ - نام‌های رسول اکرم (ص)

در ویدئو به این اشاره شده که ۱۹مین سورهٔ قرآن سورهٔ «طه» است، بین سوره‌های دارای حروف مقطعه ۱۹مین سوره یس و بین سوره‌های بدون حروف مقطعه ۱۹مین سوره محمد (ص) است؛ و تنها این سه سوره به نام‌های مبارک نبی اکرم (ص) هستند. با توجه به اینکه دستی محاسبه کردن این موارد از نوشتن کد آسانتر است از نوشتن کد صرف نظر میکنم. همهٔ مواردی که گفتم، در صورتی است که سورهٔ فاتحه را در ابتدای قرآن به حساب نیاوریم. اگر آن را به حساب آوریم ۱۹مین سوره در کل و ۱۹مین سورهٔ بدون حروف مقطعه تغییر پیدا میکنند. بعضی‌ها میگویند سورهٔ فاتحه جزو سوره‌ها نیست و مثل مقدمهٔ قرآن است. الله علیم!

۱۵- سورهٔ علق

  • چند ادعا دربارهٔ این سوره مطرح شده است:
  • این سوره ۱۹ آیه دارد.
  • اولین آیهٔ سجده‌دار قرآن آیه ۱۹ این سوره است.
  • آیه ۱۹ این سوره از آخر قرآن اولین آیهٔ ۱۹م است.
  • اولین آیاتی که بر نبی اکرم (ص) نازل شدند ۵ آیهٔ اول این سوره بودند که جمعا ۷۶ حرف هستند که این عدد مضربی از ۱۹ است.

مورد اول که واضح است. دربارهٔ مورد دوم منظور ویدئو را نمیفهمم. بدیهی است که در ترتیب قرآن اولین آیهٔ سجده‌دار آیه ۱۹ سورهٔ علق نیست! مورد آخر میگوید که اولین آیات نازل شده بر حضرت نبی (ص) ۵ آیهٔ اول این سوره هستند. دو نظر وجود دارد. یک نظر این را تأیید میکند و نظر دیگر میگوید ۳ آیهٔ اول این سوره اولین آیات بودند. حالا بنا را بگذاریم بر ۵ آیه.

برویم مورد سوم را بررسی کنیم:

suras = tree.findall(&quotsura&quot)[::-1]
for sura in suras:
    if len(sura.findall(&quotaya&quot)) >= 19:
        print(sura.get(&quotname&quot), len(sura.findall(&quotaya&quot)))
        exit()

ابتدا مثل بخش ۱۱ فهرست سوره‌ها را به صورت برعکس ذخیره کردیم. در نهایت به ازای هر سوره اگر تعداد آیات سوره بیشتر یا برابر ۱۹ بود، نام سوره و تعداد آیات آن را چاپ میکنیم و از برنامه خارج میشویم. خروجی میشود:«العلق 19»

برای بخش آخر هم:

sum = 0
sura = tree.findall(&quotsura&quot)[95]
ayas = sura.findall(&quotaya&quot)
for i in range(5):
    aya = ayas[i]
    sum += len(remove(aya.get(&quottext&quot)))
print(sum)

سوره علق را با عنوان sura و آیاتش را با عنوان ayas ذخیره کردیم. با همان تابع remove بالا، فاصله‌ها را برداشتیم و طول آیات را با هم جمع کردیم. نتیجه شد ۷۸. دو واحد با گفتهٔ ویدئو متفاوت. فکر نکنم کد ما ایرادی داشته باشد.

۱۶- نوزدهمین «الله»

میگوید ۱۹مین الله از آخر قرآن در آیه ۱۹ سورهٔ انفطار قرار دارد که این سوره ۱۹ آیه دارد. در ضمن بین این الله و آخرین الله قرآن ۳۰ سوره وجود دارد که ۱۹ تای آنها کلا الله ندارند. اول جملهٔ اول را اعتبارسنجی کنیم:

num = 0
suras = tree.findall(&quotsura&quot)[::-1]

for sura in suras:
    ayas = sura.findall(&quotaya&quot)[::-1]
    for aya in ayas:
        words = aya.get(&quottext&quot).split(&quot &quot)[::-1]
        for word in words:
            if word in [&quotالله&quot, &quotلله&quot, &quotبالله&quot, &quotوالله&quot]:
                num += 1
                if num == 19:
                    print(sura.get(&quotname&quot), aya.get(&quotindex&quot))
                    exit()

باز هم فهرست سوره‌ها و آیه‌ها را معکوس میکنیم. آیه یا کلمه کلمه جدا میکنیم. ترتیب کلمات را هم معکوس میکنیم. به ازای هر کلمه بررسی میکنیم که آیا کلمه، الله است یا نه. در نهایت در ۱۹مین الله نام سوره و شمارهٔ آیه را چاپ میکند. نتیجه میشود:«الإنفطار 19». درست است. حالا برویم سراغ جملهٔ دوم ادعا. اینکه آخرین «الله» قرآن در سورهٔ اخلاص است درست است. نیازی به بررسی با کد نیست. سورهٔ اخلاص سورهٔ ۱۱۲ قرآن است. پس با کد زیر سوره‌های ۸۲ (انفطار) تا ۱۱۲ (اخلاص) را بررسی میکنیم:

withallah = set()
withoutallah = set()
suras = tree.findall(&quotsura&quot)[81:112:]
for sura in suras:
    for aya in sura.findall(&quotaya&quot):
        words = aya.get(&quottext&quot).split(&quot &quot)
        for word in words:
             if word in [&quotالله&quot, &quotلله&quot, &quotبالله&quot, &quotوالله&quot]:
                 withallah.add(sura.get(&quotname&quot))
                 break
    if sura.get(&quotname&quot) not in withallah:
        withoutallah.add(sura.get(&quotname&quot))
print(len(withallah))
print(len(withoutallah))

سوره‌های دارای «الله» را در مجموعهٔ اول و بدون «الله» را در مجموعهٔ دوم ذخیره میکنیم. از مجموعه استفاده میکنیم تا موارد تکراری حذف شوند. در suras سوره‌های ۸۲ تا ۱۱۲ را ذخیره میکنیم. آیه به آیه بررسی میکنیم. اگر آیه‌ای «الله» داشت سورهٔ آن را به مجموعهٔ اول اضافه میکنیم. اگر سوره‌ای در مجموعهٔ اول نبود آن را به مجموعهٔ دوم اضافه میکنیم. در نهایت خروجی را چاپ میکنیم. درست است. تعداد اعضای مجموعهٔ دوم ۱۹ است. ولی تعداد سوره‌های دارای «الله» را ۱۲ نشان میدهد در حالیکه ویدئو گفته ۱۱. چون هدف بررسی آن ۱۹ بود مهم نیست دلیل این قضیه ولی شاید خود سورهٔ انفطار را ویدئو محسوب نکرده.

۱۷- آیه ۱۹ سورهٔ توبه

دربارهٔ آیه ۱۹ سورهٔ توبه این مطالب را میخواهیم بررسی کنیم: این آیه در بین آیه‌های ۱۹ بیشترین «الله» را دارد. ابجد «الله» ضرب در شمارهٔ آیه در سوره (۱۹) میشود ۱۲۵۴ که شمارهٔ آیه از اول قرآن است. در کد زیر هم شمارهٔ آیه در کل قرآن را محاسبه میکنیم هم اینکه آیا این آیه در بین آیه‌های ۱۹م بیشترین الله را دارد یا نه:

num = 0
allahn = 0
ayaname = &quot&quot
for sura in tree.findall(&quotsura&quot):
    for aya in sura.findall(&quotaya&quot):
        num += 1
        if num == 1254:
            print(sura.get(&quotname&quot), aya.get(&quotindex&quot))
        if aya.get(&quotindex&quot) == &quot19&quot:
            allahaya = 0
            words = aya.get(&quottext&quot).split(&quot &quot)
            for word in words:
                if word in [&quotالله&quot, &quotلله&quot, &quotبالله&quot, &quotوالله&quot]:
                    allahaya += 1
            if allahaya > allahn:
                allahn = allahaya
                ayaname = sura.get(&quotname&quot) + &quot &quot + aya.get(&quotindex&quot)
print(&quotAya name:&quot, ayaname)

متغیر num برای شمارش شمارهٔ آیات از اول قرآن، allahn برای ذخیره تعداد «الله» در آیه‌ای است که بیشترین الله را دارد؛ و ayaname برای ذخیره نام سوره و شمارهٔ آیه است. بخش بررسی اینکه آیه این آیه ۱۲۵۴ است که نیاز به توضیح ندارد. در ادامه، کد بررسی میکند اگر آیه‌ای آیهٔ ۱۹ باشد، تعداد allahaya را که برای هر آیه تعداد «الله»ها را میشمارد را یک واحد افزایش میدهد. در نهایت آن را با allahn مقایسه میکند. اگر بیشتر بود allahn و ayaname را مطابق آیهٔ جدید تغییر میدهد. در نهایت ayaname را چاپ میکند. میبینیم که بله درست است. آیهٔ ۱۹ سورهٔ توبه بیشترین واژهٔ «الله» را دارد.

۱۸- سوره‌ها با اسامی حیوانات

ویدئو میگوید کلا ۵ سوره داریم که نام آنها نام یک حیوان است. اگر تعداد آیات و شمارهٔ این سوره‌ها را جمع کنیم مضرب ۱۹ میشود. چون تعداد این سوره‌ها کم است نیازی به کد نیست و بررسی دستی هم ممکن است. با بررسی متوجه میشویم این ادعا درست است.

۱۹- آیات اول ۱۹ حرفی

میگوید کلا ۴ سوره داریم که آیات اولشان ۱۹ حرفی هستند. اگر شمارهٔ این سوره‌ها را جمع کنیم میشود ۲۶۶ که مضرب ۱۹ است. کاری با تعداد این سوره‌ها نداریم. بیایید شماره‌هایشان را جمع کنیم:

suras = tree.findall(&quotsura&quot)
num = 0
for sura in suras:
if len(remove(sura.find(&quotaya&quot).get(&quottext&quot))) == 19:
num += int(sura.get(&quotindex&quot))
print(num)

به ازای هر سوره اگر طول آیهٔ اولش ۱۹ باشد (با حذف فاصله‌ها)، num به اندازهٔ شمارهٔ سوره افزایش داده میشود. در نهایت میبینیم num شده ۲۶۶ که درست است.

۲۰- حرف مقطعهٔ «ق»

در ویدئو به این اشاره شده که تنها دو سوره حرف مقطعهٔ قاف را دارند؛ سوره‌های قاف و شوری. حروف مقطعهٔ سورهٔ شوری «ق» نیست؛ «حم عسق» است. ولی اگر منظور ویدئو را این در نظر بگیریم که تنها سوره‌هایی که در حروف مقطعه‌شان حرف قاف وجود دارد بله تنها این دو سوره را داریم. ادعا این است که در هر دوی این سوره‌ها ۵۷ عدد قاف وجود دارد. این عدد از آن جهت جالب است که مضرب ۱۹ است و در هر دو سوره برابر است. و همچنین اینکه جمع تعداد آیات با شمارهٔ سوره در هر دو سوره برابر ۹۵ است. این هم دقیقا به دلایل مشابه جالب است. بررسی کنیم:

suranums = [42, 50]

result = &quot&quot

for sura in tree.findall(&quotsura&quot):
    if int(sura.get(&quotindex&quot)) in suranums:
        num = 0
        for aya in sura.findall(&quotaya&quot):
            for char in aya.get(&quottext&quot):
                if char == &quotق&quot:
                    num += 1
        result += sura.get(&quotname&quot) + &quot &quot + str(num)

print(result)

در suranums شماره این دو سوره را داریم. به ازای هر سوره بررسی میکنیم که شمارهٔ سوره آیا برابر یکی از این دو مقدار هست یا نه. اگر بله یکی یکی نویسه‌ها بررسی میشوند که آیا قاف هستند یا نه. اگر بودند num که در هر سوره صفر میشود یک واحد افزایش میابد. در نهایت نام سوره و تعداد قاف هایش در result ذخیره میشوند. پس از چاپ آن «الشورى 57ق 57» را میبینیم که طبق ادعای ویدئوست. مورد دوم (۹۵) هم که ساده‌ست و دستی قابل محاسبه است. این مورد هم درست است.

۲۱- نوزدهمین قاف

باید بررسی کنیم که آیا ۱۹مین «ق» در قرآن در آیه ۱۹ سورهٔ بقره هست یا نه:

num = 0

for sura in tree.findall(&quotsura&quot):
    for aya in sura.findall(&quotaya&quot):
        for char in aya.get(&quottext&quot):
            if char == &quotق&quot:
                num += 1
                if num == 19:
                    print(sura.get(&quotname&quot), aya.get(&quotindex&quot))
                    exit()

در کد به ازای هر نویسه در هر آیه در هر سوره بررسی میکنیم که آیا نویسه برابر «ق» هست یا نه. اگر بود num یکی افزوده میشود و اگر برابر نوزده شد نام سوره و شمارهٔ آیه چاپ میشود. نتیجه شد «البقرة 19» که درست است.

۲۲- آیه‌های شروع شده با «الله»

در ویدئو ادعا شده که فقط ۳۸ آیه با واژهٔ «الله» شروع شده‌اند. ۳۸ هم که مضرب ۱۹ است. ببینیم این ادعا درست است؟

num = 0

for sura in tree.findall(&quotsura&quot):
    for aya in sura.findall(&quotaya&quot):
        word = aya.get(&quottext&quot).split(&quot &quot)[0]
        if word == &quotالله&quot:
            num += 1

print(num)

کد که واضح است. نتیجهٔ این کد ۳۴ است. طبق گفتهٔ ویدئو نیست. ولی اگر بگوییم که «لله» هم محاسبه شود، نتیجه میشود ۳۸. ولی اگر «والله» و «بالله» را محاسبه کنیم عدد باز هم تغییر میکند. اصولا باید یا فقط «الله» را محاسبه کنیم یا «والله» و «بالله» را هم محاسبه کنیم که در هر دو صورت عدد اشتباه است.

۲۳- سوره‌های بدون الف

ویدئو میگوید ۶۷ سوره داریم که در نامشان الف وجود ندارد. اگر شمارهٔ این سوره‌ها را جمع کنیم برابر ۳۹۷۱ میشود که مضرب ۱۹ است. فعلا جملهٔ اول را راستی‌آزمایی کنیم:

withalef = 0
num = 0

for sura in tree.findall(&quotsura&quot):
    num += 1
    for char in sura.get(&quotname&quot):
        if char == &quotا&quot:
            withalef += 1
            break

print(num-withalef)

حرف به حرف نام هر سوره را بررسی میکنیم. چه الف داشته باشد چه نداشته باشد num را یک واحد افزایش میدهیم. البته میتوانستیم همان اول آن را برابر ‍۱۱۴ در نظر بگیریم. و اگر الف داشت، withalef را یک واحد افزایش میدهیم. در نهایت اختلاف این دو را محاسبه میکنیم. میشود ۱۴! خیلی با ۶۷ فاصله دارد. اگر به فهرست موجود در ویدئو و نام سوره‌ها در پروندهٔ XMLمان نگان کنیم، میبینیم خیلی سوره‌ها مثل رعد در فهرست ویدئو بدون الف هستند ولی در پروندهٔ XML با الف (الرعد). حالا اینکه کدام درست است الله اعلم.

۲۴- ۳۱ عدد دو رقمی

اینبار ادعا این است که اگر شمارهٔ هر سوره را با تعداد آیاتش جمع کنیم، این عدد برای ۳۱ سوره دو رقمی است. و اگر شمارهٔ این ۳۱ عدد را جمع کنیم میشود ۱۴۴۴ که مضرب ۱۹ است:

suras = []
sum = 0

for sura in tree.findall(&quotsura&quot):
    number = int(sura.get(&quotindex&quot)) + len(sura.findall(&quotaya&quot))
    if 10 <= number < 100:
        suras.append(sura)

for sura in suras:
    sum += int(sura.get(&quotindex&quot))

print(sum)

به ازای هر سوره بررسی میکنیم که آیا عددی که گفته شد در بازهٔ دو رقمی هست یا نه. اگر بود سوره را به لیست suras اضافه میکنیم. در نهایت در sum شمارهٔ هر سوره را اضافه میکنیم. در نهایت خروجی میشود ۱۴۴۴. درست است.

۲۵- سورهٔ مریم

میگوید در سورهٔ مریم ۱۰۸۳ واژه به کار رفته و و اگر تکرار حروف واژهٔ «مریم» در ین سوره را جمع بزنیم باز هم میشود ۱۰۸۳. و البته این عدد مضرب ۱۹ است. البته تعداد واژگان موجود در سورهٔ مریم را محاسبه کنیم:

sura = tree.findall(&quotsura&quot)[18]

wordsnum = 0

for aya in sura:
    wordsnum += len(aya.get(&quottext&quot).split(&quot &quot))

print(wordsnum)

به ازای هر آیه wordsnum را به اندازهٔ تعداد واژگان آن آیه افزایش میدهیم و در نهایت چاپ میکنیم. نتیجه شد:«۹۷۱». اشتباه است. و ادعای دوم درباره حروف واژهٔ «مریم»:

chars = &quotمریم&quot
num = 0

for aya in sura.findall(&quotaya&quot):
    for char in aya.get(&quottext&quot):
        if char in chars:
            num += 1

print(num)

به ازای هر نویسه از هر ایه میبینیم اگر نویسه در رشتهٔ «مریم» هست، num یک واحد افزایش پیدا کند و در نهایت num را چاپ میکنیم. نتیجه میشود:«۴۵۴». این هم اشتباه است!


این نوشته را با هدف اثبات یا رد اعجاز عددی قرآن برای خودم نوشتم (یا شروع کردم)؛ با انتشار عمومی آن ان شاء الله رضایت شامل حالم شود :)