"এই" মডিউলটির উত্স কোডটি কী করছে?


192

আপনি যদি পাইথন ইন্টারপ্রেটার খোলেন এবং টাইপ করুন "এটি আমদানি করুন", যেমন আপনি জানেন, এটি মুদ্রণ করে:

টিম পিটার্স দ্বারা নির্মিত পাইথনের জেন

কদর্য চেয়ে সুন্দর।
সুস্পষ্ট বর্ণিত চেয়ে ভাল।
সহজ জটিল চেয়ে ভাল।
জটিল জটিল চেয়ে ভাল।
নেস্টেড থেকে ফ্ল্যাট ভাল।
গা Sp়ের চেয়ে বিরাগই ভাল।
পঠনযোগ্যতা গণনা।
বিশেষ কেসগুলি নিয়ম ভাঙার পক্ষে যথেষ্ট বিশেষ নয়।
যদিও ব্যবহারিকতা বিশুদ্ধতা বীট।
ত্রুটিগুলি কখনই নিঃশব্দে কাটানো উচিত নয়।
স্পষ্টভাবে নিরব না হলে।
অস্পষ্টতার মুখে অনুমান করার প্রলোভনটিকে অস্বীকার করুন।
এটির জন্য একটি - এবং অগ্রাধিকার কেবল একটিই - প্রকাশ্য উপায় থাকতে হবে।
যদিও আপনি ডাচ না হলে এই উপায়টি প্রথমে সুস্পষ্ট নাও হতে পারে।
এখন আগের চেয়ে ভাল is
যদিও কখনও কখনও এর চেয়ে ভাল হয় নাঅধিকার এখন।
যদি বাস্তবায়নটি ব্যাখ্যা করা শক্ত হয় তবে এটি একটি খারাপ ধারণা।
বাস্তবায়নটি যদি ব্যাখ্যা করা সহজ হয় তবে এটি একটি ভাল ধারণা হতে পারে।
নেমস্পেসগুলি হ'ল একটি দুর্দান্ত ধারণা - আসুন আমরা তাদের আরও কিছু করি!

পাইথন উত্সে (লিবি / এটি.পি) এই পাঠ্যটি কোডের একটি কৌতূহল টুকরা দ্বারা তৈরি করা হয়েছে:

s = """Gur Mra bs Clguba, ol Gvz Crgref

Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""

d = {}
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

print "".join([d.get(c, c) for c in s])

উত্তর:


183

এটিকে রট 13 এনকোডিং বলা হয় :

d = {}
for c in (65, 97):
    for i in range(26):
        d[chr(i+c)] = chr((i+13) % 26 + c)

বড় হাতের অক্ষরের জন্য অনুবাদ টেবিল তৈরি করে (এটি 65 এর জন্য যা) এবং ছোট হাতের অক্ষর (এটিই 97 এর জন্য) চার্সের জন্য।

print "".join([d.get(c, c) for c in s])

অনুবাদিত স্ট্রিং মুদ্রণ করে।


27
এবং এটি আসলে 2.x এবং 3.x উভয়ই আরও সহজভাবে প্রয়োগ করা যেতে পারে import codecs; print(codecs.decode(s, "rot-13"))। অ্যালগরিদমটি হাতছাড়া করে লিখে রাখা কেবল ইস্টার ডিমের আরও অবসন্নতা ছিল।
এনকোঘ্লান

12
বা ঠিক 'Gur Mra bs Clguba, ol Gvz Crgref'.decode('rot13')
অ্যালেক্স ব্র্যাসেটভিক

3
হতে পারে আমাদের যুক্ত করা উচিত যে ROT13 হ'ল মূল "এনক্রিপশন" পদ্ধতিটি পুরানো ইউজনেট দিনগুলিতে ব্যবহৃত হয়েছিল 8 ^)
জেন

53
@ অলিফোর্ড: রসিকতা হিসাবে। মডিউল যা কিছু করে, সোর্স কোডটিকে অবহেলা করা থেকে শুরু করে স্ক্র্যাচ থেকে রট 13 বাস্তবায়ন করা এমনকি এটি স্টাডলিবায় অন্তর্নির্মিত হয়ে সরাসরি পাইথনের জেন লঙ্ঘন করে। টিম পিটারস নিজেও জেনের মধ্যে কিছু সূক্ষ্ম রসিকতা ছুঁড়েছিলেন (টোডটিডিআই লাইনের ড্যাশগুলি এটি দুটি পৃথক উপায়ে করেন?)।
অবতারিত

7
@ বার্নার্ট আমি মনে করি মডিউলটির নামটিও thisরসিকতার অংশ, কারণ অন্যান্য ভাষা (যেমন জাভা) thisপাইথন কীভাবে ব্যবহার করে তার অনুরূপ ব্যবহার করে self। টাইপিং import thisটাইপের মতোই অর্থহীন দেখায় import java.self;
লুচ

25

আপনি যদি নিজের হাতে ROT13 প্রতিস্থাপন করতে চান - বা আপনার মাথায় - আপনি এটি পরীক্ষা করতে পারেন যেহেতু 13 * 2 = 26 (ইংরেজি বর্ণমালার অক্ষরের সংখ্যা), এটি মূলত একটি ইন্টারচেঞ্জ:

a <-> n
b <-> o
c <-> p
...
m <-> z

A <-> N
B <-> O
C <-> P
...
M <-> Z 

বনাম এলবিএইচ সেন্টপজিভিএফআর ইবাত রাবহতু, এলবি'হায় রিরাগনিইল জেএনফগ্রি গুর মরা বিএস ইবিজি -13 নাইটবেভগুজ নাক এর্নক গুভ্ফ জাইভাবা ইয়বিবিএক্সভেট গ্রেকজিএফ জেভিগুবগ পিবিজচগ্রি আরিউক।



11

এটি ROT13 এনকোডিং ব্যবহার করে। এটি একটি রসিকতা কারণ এটি ব্যবহৃত হয়।

স্ট্রিং ডিকোড করতে আপনি পাইথন ফাংশনও ব্যবহার করতে পারেন।

পাইথন 2:

import this
print(this.s.decode('rot13'))

পাইথন 2 এবং 3:

import codecs
print(codecs.decode(this.s, 'rot-13'))

2 মে '11 ব্যবহার করে এনকোঘ্লান মন্তব্য দ্বারা এটি লক্ষ্য করা গেছেimport codecs । আমি জানি না যে কোডেকগুলি আমদানি করার এখনও দরকার আছে বা decodeপাইথনের কিছু নির্দিষ্ট প্রকাশের সাথে যদি এর প্রাপ্যতা স্বয়ংক্রিয়ভাবে তৈরি করা হয়েছিল। আপনি যে ডকুমেন্টেশনটি decodeব্যবহার করছেন তা কি আপনি লিঙ্ক করতে পারবেন?
সিউর

1
@ Cœur এটি আইডলির পাইথন ৩.7 এও আমার পক্ষে কাজ করে না। এটি কি পাইথন 2?
ফিলিপ Š

@ ফিলিপ - ওহ, আপনি ঠিক বলেছেন, এটি পাইথন 2 নিয়ে কাজ করে তবে পাইথন 3 এর সাথে নয় But তবে পাইথন 2 তে আপনি কেবলমাত্র করতে পারেন import thisএবং এটি কোনও অতিরিক্ত কোড ছাড়াই সরাসরি মুদ্রণ করবে।
সিউর 1

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.