Bagaimana cara menambah karakter?


103

Saya baru mengenal Python, berasal dari Java dan C. Bagaimana cara menambah karakter? Di Java atau C, karakter dan int secara praktis dapat dipertukarkan, dan dalam loop tertentu, sangat berguna bagi saya untuk dapat melakukan penambahan karakter, dan indeks array berdasarkan karakter.

Bagaimana saya bisa melakukan ini dengan Python? Sudah cukup buruk tidak memiliki tradisional untuk (;;) looper - adakah cara saya dapat mencapai apa yang ingin saya capai tanpa harus memikirkan ulang seluruh strategi saya?


4
Tradisional forlingkaran: for i in range(50): do_something_with(i). Ayolah, itu tidak terlalu buruk !!
jatanisme

@SilentGhost: Saya sedang memisahkan kamus bahasa Inggris untuk digunakan di aplikasi Android. Karena file satu per satu terlalu besar, saya telah menulis skrip Python untuk membaginya menjadi words_aa.txt, words_ab.txt, dll ... Saya perlu menulis skrip kedua untuk menghasilkan file Java dengan array yang berisi Id sumber daya file mentah dari setiap file kata (karena saya malas), dan saya tidak dapat memikirkan cara yang lebih baik untuk melakukannya.
Tom R

3
Anda sepertinya mencari sesuatu seperti[''.join(i) for i in itertools.product(string.ascii_lowercase, repeat=2)]
SilentGhost

1
@SilentGhost: Apakah hanya itu yang diperlukan? Kalau saja itu tertulis di manual.
Tom R

Jawaban:


179

Di Python 2.x, cukup gunakan fungsi orddan chr:

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

Python 3.x membuatnya lebih terorganisir dan menarik, karena perbedaan yang jelas antara byte dan unicode. Secara default, "string" adalah unicode, sehingga yang di atas berfungsi ( ordmenerima karakter Unicode dan chrmemproduksinya).

Tetapi jika Anda tertarik pada byte (seperti untuk memproses beberapa aliran data biner), semuanya menjadi lebih sederhana:

>>> 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
@Tom R. Jangan! [merindukan masa lalu]. Saat Anda mencoba dengan cepat mencapai sesuatu atau mengubah sepotong kode, konsep dan idiom Python mungkin tampak hanya menghalangi kemajuan Anda dan hampir tidak sebanding dengan kurva pembelajaran ... Bersabarlah! Anda bahkan mungkin menemukan bahwa dengan mahir dalam Python akan meningkatkan gaya Anda di Java (dan C, pada tingkat yang lebih rendah).
mjv

bekerja seperti pesona. <br> Satu-satunya perubahan yang akan saya lakukan adalah untuk z, dalam hal ini saya telah menetapkan 'a'.
pengguna45949

15

"cukup buruk tidak memiliki tradisional untuk (;;) looper" ?? Apa?

Apakah Anda mencoba melakukannya

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

Atau mungkin Anda menggunakan string.uppercaseatau string.letters?

Python tidak memilikinya for(;;)karena seringkali ada cara yang lebih baik untuk melakukannya. Itu juga tidak memiliki matematika karakter karena itu juga tidak perlu.


1
1 untuk menjawab pertanyaan dibalik pertanyaan (masalah XY, dan seterusnya). Jika saya bisa, saya akan memberi Anda lebih banyak.
Devin Jeanpierre

Terima kasih. Saya sering kali pertama bertanya "mengapa?" untuk pertanyaan seperti ini. Tapi @SilentGhost mengalahkan saya.
S. Lotot

3

Saya berasal dari PHP, di mana Anda dapat menambahkan karakter (A ke B, Z ke AA, AA ke AB, dll.) Menggunakan operator ++. Saya membuat fungsi sederhana yang melakukan hal yang sama dengan Python. Anda juga dapat mengubah daftar karakter menjadi apa pun (huruf kecil, huruf besar, dll.) Yang Anda butuhkan.

# 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

Ada cara untuk menambah karakter menggunakan ascii_lettersfrom stringpackage yang ascii_lettersmerupakan string yang berisi semua alfabet Inggris, huruf besar dan kecil:

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

Juga bisa dilakukan secara manual;

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

1

Periksa ini: MENGGUNAKAN UNTUK LOOP

for a in range(5): x='A' val=chr(ord(x)+a) print(val)
OUTPUT: ABCBDE


0
def doubleChar(str):
    result = ''
    for char in str:
        result += char * 2
    return result

print(doubleChar("amar"))

keluaran:

aammaarr
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.