2013-08-19 49 views
5

Chương trình của tôi giữ ngẫu nhiên bỏ qua các chữ cái! Ví dụ, 'coolstory' trở thành 'yrotsloc' và 'tuyệt vời' trở thành 'mosewa'Chương trình đảo ngược từ ngẫu nhiên bỏ qua các chữ cái?

Đây là mã:

def reverse(text): 
    length = len(text) 
    reversed_text = [] 
    for i in range(0,length + 1): 
     reversed_text += [''] 
    original_list = [] 
    for l in text: 
     original_list.append(l) 
     new_place = length - (original_list.index(l)) 
     reversed_text[new_place] = l 
    return "".join(reversed_text) 
+3

Đây là cách rất phức tạp để đảo ngược chuỗi! 'text [:: - 1]' sẽ thực hiện thủ thuật. – Ben

+1

Nó không phải là ngẫu nhiên. Đó là trên các chữ cái lặp đi lặp lại ... Bạn đang sử dụng chỉ mục ... – MakeCents

+1

Tại sao tôi chạy nó, nó mang lại cho tôi ''yrtsloc'', không phải' yrotsloc'. Mô tả của bạn sai hay đây không phải là mã thực sự của bạn? – abarnert

Trả lời

2

Hãy thử

def reverse(text): 
    return text[::-1] 
7

Điều này xảy ra khi bạn có chữ trùng lặp vì

original_list.index(l) 

sẽ luôn trả về cùng giá trị cho cùng một l. Vì vậy, new_place sẽ giống nhau đối với hai chữ cái giống nhau tại các vị trí khác nhau.

Một cách phổ biến để đảo ngược chuỗi trong Python là với cắt:

>>> s = "hello" 
>>> s[::-1] 
'olleh' 

Bạn cũng có thể sử dụng reversed(), nhưng đó trả về một reversed object (không phải là một chuỗi). Đây là tùy chọn tốt hơn nếu bạn muốn lặp qua một chuỗi theo thứ tự ngược lại:

>>> for c in reversed(s): 
...  print c 
... 
o 
l 
l 
e 
h 
+0

Điều này chắc chắn có vẻ như nó _should_ là lỗi nhưng tôi không thể xem nó giải thích các ví dụ được đưa ra trong câu hỏi như thế nào? –

+0

@JackAidley, 'reversed_text [new_place] = l' đặt vị trí hiện tại với cùng một ký tự – leon

+0

Aye, vậy làm thế nào nó tạo ra' yrotsloc' từ 'coolstory'? –

Các vấn đề liên quan