Chuyển đổi xâu dựa trên mật mã Caesar nhưng bị sai key
Em đang viết thử 1 chương trình chuyển đổi dãy chữ vô nghĩa thành có nghĩa và ngược lại dựa trên mật mã Ceasar.

Mật mã Caesar
Trong mật mã học, mật mã Caesar, còn gọi là mật mã dịch chuyển, là một trong những mật mã đơn giản và được biết đến nhiều nhất. Mật mã là một dạng của mật mã thay thế, trong đó mỗi ký tự trong văn bản được thay thế bằng một ký tự cách nó một đoạn trong bảng chữ cái để tạo thành bản mã. Vĩ dụ, nếu độ dịch là 3, A sẽ được thay bằng D, Ă sẽ được thay bằng C và cứ thế đến hết. Phương pháp được đặt tên theo Caesar, vị hoàng đế đã sử dụng nó thường xuyên trong công việc. Bước mã hóa bằng mã Caesar thư...
Em đang viết phần chuyển đổi mà không cần biết khóa, tức là thử từng trường hợp 1 và in ra một loạt kết quả nhưng khi chạy vòng lặp thì dù số vòng lặp đủ tất cả trường hợp nhưng giá trị key trong những phần nhỏ hơn lại không tăng lên. Mọi người xem và giúp em với ạ.
Code của em:
#%% def pg(): alp = 'abcdefghijklmnopqrstuvwxyz' c = str(input("Nhap ma: ")) i = 0 ans = str() key = 0 while key < len(alp): while i < len(c): if c[i] != ' ': k= alp.index(c[i]) h= k+key if h >= len(alp): h = h - len(alp) ans = ans + alp[h] i = i + 1 else: ans = ans + ' ' i = i + 1 key = key + 1 print(ans)
Kết quả thực thi

Bạn biết chuyện gì không? Kết thúc vòng lặp con, bạn không reset lại
i = 0
vàans = ''
nên sau khi chạy lần 1,i
luôn không bé hơnlen(c)
vàans
sẽ là 1 mớ hỗn độn nữa do không reset (đề nghị bạn dùng list để lưu riêng rồi resetans
)Góp ý:
for
thay chowhile
trong trường hợp này vì nó dễ sử dụng và tránh gặp trường hợp này, mẫu:Encode with k
Decode for k in 1 to 26
Mình cũng từng chán chán làm mấy cái này
@graktung
Mình mới học Python dạo gần đây thôi nên còn yếu lắm, chỉ có thể dùng những câu lệnh cơ bản
Đúng là rảnh rỗi làm thử mấy cái này.
Cái của bạn chắc phải học sâu thêm mình mới hiểu rõ . Cảm ơn đã chia sẻ!
@aliston
Chân thành cảm ơn bạn rất nhiều. Bạn không chỉ ra mình cũng không biết sai chỗ nào . Mình sẽ ghi nhớ góp ý của bạn về cách đặt tên. Thật ra cái này rảnh ngồi làm thử nên mới đặt ngắn gọn dễ chạy thử nhưng mà từ giờ sẽ đặt tên rõ ràng để tạo thói quen tốt. Cảm ơn bạn.
cái của mình không có gì đặc biệt ngoài chạy vòng for rồi lấy item từ index ra cả mình viết cái đó cũng lâu rồi. Hỗi nãy thấy quen quen mới mò lại paste lên chứ giờ đọc lại cũng thấy chuối
Không sao đâu, mấy cái đó từ từ bạn gặp và sau này dùng rất nhiều, nên làm quen từ bây giờ là vừa rồi