আমি কীভাবে একটি বাড়ানো যেতে পারি?


103

আমি জাভা এবং সি থেকে আগত পাইথনে নতুন I জাভা বা সি-তে অক্ষর এবং অন্তরগুলি কার্যতঃ বিনিময়যোগ্য এবং নির্দিষ্ট লুপগুলিতে বর্ধিত চরগুলি এবং অক্ষর অনুসারে সূচি অ্যারে করতে সক্ষম হওয়া আমার পক্ষে খুব দরকারী।

পাইথনে আমি কীভাবে এটি করতে পারি? (;;) লুপারের জন্য traditionalতিহ্যবাহী না থাকার পক্ষে যথেষ্ট খারাপ - আমার সম্পূর্ণ কৌশলটি পুনর্বিবেচনা না করে আমি যা অর্জন করতে চাই তার কোনও উপায় আছে কি?


4
প্রথাগত forলুপ: for i in range(50): do_something_with(i)। এসো, এতটা খারাপ না !!
jathanism

@ সাইলেন্টগোস্ট: অ্যান্ড্রয়েড অ্যাপে ব্যবহারের জন্য আমি একটি ইংরেজী অভিধান বিভক্ত করছি split ফাইলটি স্বতন্ত্রভাবে অনেক বড় হওয়ায়, আমি সেগুলিকে শব্দ_আ.এ.এস.এক্স.টি., টেক্সট_এব.এস.এক্সটি ইত্যাদিতে বিভক্ত করার জন্য একটি পাইথন স্ক্রিপ্ট লিখেছি ... আইডি সম্বলিত একটি অ্যারে সহ জাভা ফাইল তৈরি করতে আমার দ্বিতীয় স্ক্রিপ্ট লিখতে হবে প্রতিটি ওয়ার্ড ফাইলের কাঁচা ফাইল সংস্থানগুলির (কারণ আমি অলস), এবং আমি এটি করার আরও ভাল উপায়ের কথা ভাবতে পারি না।
টম আর

3
আপনি এমন [''.join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)]
কিছুর

1
@ সাইলেন্টগোস্ট: এটাই কি লাগে? যদি এটি ম্যানুয়ালটিতে বলা হয়।
টম আর

উত্তর:


178

পাইথন ২.x এ, কেবলমাত্র ordএবং chrকার্যাদি ব্যবহার করুন :

>>> ord('c')
99
>>> ord('c') + 1
100
>>> chr(ord('c') + 1)
'd'
>>> 

বাইট এবং ইউনিকোডের স্পষ্ট পার্থক্যের কারণে পাইথন ৩.x এটিকে আরও সুসংহত এবং আকর্ষণীয় করে তুলেছে। ডিফল্টরূপে, "স্ট্রিং" ইউনিকোড হয়, সুতরাং উপরের কাজগুলি ( ordইউনিকোড অক্ষর গ্রহণ chrকরে এবং সেগুলি উত্পাদন করে)।

তবে আপনি যদি বাইটগুলিতে আগ্রহী হন (যেমন কিছু বাইনারি ডেটা স্ট্রিম প্রক্রিয়াকরণের জন্য), জিনিসগুলি আরও সহজ:

>>> bstr = bytes('abc', 'utf-8')
>>> bstr
b'abc'
>>> bstr[0]
97
>>> bytes([97, 98, 99])
b'abc'
>>> bytes([bstr[0] + 1, 98, 99])
b'bbc'

5
@ টম আর। না! [পুরানো দিনগুলি মিস করুন] আপনি যখন দ্রুত কোনও কিছু অর্জন করার চেষ্টা করছেন বা পাইথনের কোড, ধারণা এবং আইডিয়মগুলির কোনও টুকরো রূপান্তর করেছেন কেবল আপনার অগ্রগতি কেবল বাধাগ্রস্থ হতে পারে এবং শেখার বক্ররেখার পক্ষে মূল্যবান নয় ... ধৈর্য ধরুন! আপনি এমনকি দেখতে পাচ্ছেন যে পাইথনে দক্ষতা অর্জন জাভাতে আপনার স্টাইলকে উন্নত করবে (এবং সি, কিছুটা কম)।
এমজেভি

একটি কবজ মত কাজ। <br> আমি কেবল পরিবর্তনটি z এর জন্য করব, এক্ষেত্রে আমি একটি 'এ' বরাদ্দ করেছি।
ব্যবহারকারী 45949

15

"(;;) লুপের জন্য প্রচলিত না থাকার পক্ষে যথেষ্ট খারাপ" ?? কি?

আপনি কি করার চেষ্টা করছেন?

import string
for c in string.lowercase:
    ...do something with c...

অথবা সম্ভবত আপনি ব্যবহার করছেন string.uppercaseবা string.letters?

পাইথনের নেই for(;;)কারণ এটি করার জন্য আরও ভাল উপায় রয়েছে। এটির চরিত্র গণিতও নেই কারণ এটি প্রয়োজনীয়ও নয়।


1
প্রশ্নের পিছনে প্রশ্নের উত্তর দেওয়ার চেষ্টা করার জন্য +1 (এক্সওয়াই সমস্যা, এবং আরও কিছু)। আমি যদি পারতাম তবে তোমাকে আরও দিতাম।
ডেভিন জিনপিয়ের

ধন্যবাদ। আমি প্রায়শই জিজ্ঞাসা করি "কেন?" এই জাতীয় প্রশ্নের জন্য। তবে @ সাইলেন্টগোস্ট আমাকে এতে মারধর করেছে।
এস .লট

3

আমি পিএইচপি থেকে এসেছি, যেখানে আপনি ++ অপারেটর ব্যবহার করে চর বৃদ্ধি করতে পারেন (A থেকে B, Z থেকে AA, AA থেকে AB ইত্যাদি) incre আমি একটি সাধারণ ফাংশন করেছি যা পাইথনে একই কাজ করে। আপনি চরগুলির তালিকা যা কিছু প্রয়োজন (ছোট ছোট, বড় হাতের অক্ষর ইত্যাদি) যা আপনার প্রয়োজন হিসাবে পরিবর্তন করতে পারেন।

# Increment char (a -> b, az -> ba)
def inc_char(text, chlist = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'):
    # Unique and sort
    chlist = ''.join(sorted(set(str(chlist))))
    chlen = len(chlist)
    if not chlen:
        return ''
    text = str(text)
    # Replace all chars but chlist
    text = re.sub('[^' + chlist + ']', '', text)
    if not len(text):
        return chlist[0]
    # Increment
    inc = ''
    over = False
    for i in range(1, len(text)+1):
        lchar = text[-i]
        pos = chlist.find(lchar) + 1
        if pos < chlen:
            inc = chlist[pos] + inc
            over = False
            break
        else:
            inc = chlist[0] + inc
            over = True
    if over:
        inc += chlist[0]
    result = text[0:-len(inc)] + inc
    return result

2

প্যাকেজ ascii_lettersথেকে অক্ষর বাড়াতে একটি উপায় রয়েছে stringযা ascii_lettersএকটি স্ট্রিং যা সমস্ত ইংরেজি বর্ণমালা, বড় হাতের এবং ছোট হাতের অক্ষরে থাকে:

>>> from string import ascii_letters
>>> ascii_letters[ascii_letters.index('a') + 1]
'b'
>>> ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'

এছাড়াও এটি ম্যানুয়ালি করা যেতে পারে;

>>> letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> letters[letters.index('c') + 1]
'd'

1

এটি দেখুন: লুপের জন্য ব্যবহার করা

for a in range(5): x='A' val=chr(ord(x)+a) print(val)
আউটপুট: এবিসিবিডি


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