2016-04-09 13 views
0

Bir cümleye sözcükleri ayırmaya ve her kelimeyi ayrı bir satıra yazdırmaya çalışıyorum. Ama bölünmüş işlevi kullanmasına izin verilmez. Listeler ve benzeri kullanılarak yapılmalıdır. Şimdiye kadar var:Bölme işlevini kullanmadan python'da bir dizgeyi ayırma

text=input("Enter text:")+'' 
L=len(text) 
i=0 
while i!=L: 
    bi=i 
    while text[i]!='': 
     i=i+1 
     print(text[bi:i]) 
     i=i+1 

Ama bu bir harfi kırılmış olan cümle sonuçlanır:

yani

"Merhaba"

olur:

Ayrıca
H 
He 
Hel 
Hell 
Hello 

, ne var şimdi son karakterini kapalı bırakır. Ve ben şu iletiyi alıyorum:

Traceback (most recent call last): 
    File "test.py", line 6, in <module> 
    while text[i]!='': 
IndexError: string index out of range 

Bu mesaj ne anlama geliyor?

+2

'I iç uzunluğundaki -1 ve yi iken istediğinizi belirtirseniz, boşluk için denetime yönelik bir for döngüsü kullanmalısınız –

+1

Başka bir dizeye boş bir dize eklendiğinin farkında mısınız? İlk dizgeyi değiştirmeyin (tam anlamıyla hiçbir şey eklemediğinden), değil mi? Benzer bir şekilde, dizeden alınan bazı karakterler hiçbir zaman eşit olmayacaktır (boş dize)/ –

+1

Değeri için, neden düşüş yaptığınızdan emin değilim. Beklenen ve gerçek sonuçlarınızı açıkladınız ve kodunuzu eklediniz. Başka insanların senden ne beklediğinden emin değilim. – skrrgwasme

cevap

-1

Listeler kullanmak zor bir gereklilik değilse, regex'i deneyebilirsiniz. Bu regex bir dizgeyi sözcüklere ayırır ve kelimeleri içeren bir liste döndürür. Ben senin indeksleme yanlıştır yorumladığı gibi

(\S+)\s*

Regex101

2

, her iki döngüler metnin -1 while i < L uzunluğuna olması gerekir, ayrıca düşündüğün yapmaz boş bir dize ekleyerek, w karşılaştıklarında, sözlerin bir boşlukla ayrılarak eğer daha basit bir yöntem döngü için kullanmaktır

In [1]: text = input("Enter text:") + '' 
Enter text:foo 

In [2]: len(text) # still length 3 
Out[2]: 3 

In [4]: len("") 
Out[4]: 0 

Ama: text[i] eşit '' için asla hitespace Eğer bu noktaya sahip karakter yazdırmak ve bir tmp değişkeni sıfırlamak:

text=input("Enter text:") 
tmp = "" 
for ch in text: 
    # if ch is whitespace and we have some chars 
    if ch.isspace() and tmp: 
     print(tmp) 
     tmp = "" 
    else: 
     tmp += ch 
# catch last word 
if tmp: 
    print(tmp) 
1

Python sıfır endeksli olduğu için Hatanızı alıyorsanız:

test_string = "abc" 
print(len(test_string)) # prints 3 

foo = test_string[3] # causes error because characters are at indexes 0 - 2 
        # 3 is out of range 

Sen uyumsuz konusunu adım yan edebilirsiniz bunları kullanmadan dizinler. Mümkün olduğunca, Python bir liste veya dize yineleme yapmak için bir for döngü kullanarak dizinleri yönetmesine izin: for döngü kullanarak, el, herhangi bir dizin yönetmek zorunda kalmamasıdır

s = "this is a string that I want to split" 

words = [] # create an empty list of your words 
chars = [] # create an empty list of characters 

for char in s: 

    if char == " " and chars: # if the character is a space and we've stored some chars 
     words.append("".join(chars)) # combine the stored chars into a word and add it to 
            # the word lise 
     chars = [] # clear out the stored chars 

    elif char != " ": 
     chars.append(char) # otherwise, store the char if it's not a space 

if chars: 
    words.append("".join(chars)) # add the last word found to the word list 

Not.

İlgili konular