Bảng chữ cái từ điển python sang số

Trong phòng thí nghiệm hôm nay, chúng ta sẽ tìm hiểu về từ điển, một trong những cấu trúc dữ liệu hữu ích nhất trong Python. Bạn có thể coi từ điển là ánh xạ giữa một bộ khóa và một bộ giá trị. Mỗi khóa ánh xạ tới một giá trị. Sự kết hợp giữa khóa và giá trị được gọi là cặp khóa-giá trị hoặc đôi khi là một mục. Trong một từ điển tiếng Anh thực tế, các từ là chìa khóa và các định nghĩa là các giá trị. Vì vậy, được cung cấp một khóa, bạn có thể tra cứu giá trị. Trong danh bạ điện thoại, cặp tên và địa chỉ là khóa và số điện thoại là giá trị

Bảng chữ cái từ điển python sang số

Từ điển có thể rất hữu ích để biểu thị mối quan hệ một chiều giữa hai nhóm thực thể. Ví dụ: mỗi bạn có một ID Rice duy nhất. Văn phòng đăng ký liên kết mọi ID gạo với một tên. Chúng ta có thể sử dụng một từ điển để đại diện cho mối quan hệ này. Các khóa của từ điển là ID gạo và các giá trị được liên kết là tên. Trong Python, một từ điển được định nghĩa là một tập hợp các cặp khóa-giá trị. Giống như các phần tử của danh sách có thể được truy cập bằng cách sử dụng giá trị chỉ mục, giá trị của từ điển có thể được truy cập bằng cách sử dụng giá trị khóa. Trên thực tế, người ta có thể lập luận rằng danh sách là một dạng đặc biệt của từ điển trong đó các khóa là các số nguyên dương liên tiếp, bắt đầu từ không.

Tạo từ điển

Để tạo từ điển trong Python, hãy sử dụng dấu ngoặc nhọn bao quanh các cặp khóa-giá trị được phân tách bằng dấu phẩy. Mỗi cặp khóa-giá trị bao gồm hai nội dung được phân tách bằng dấu hai chấm. Điều đầu tiên là chìa khóa và điều thứ hai là giá trị. Khóa phải là một thực thể bất biến (tại sao?). Các chuỗi, số và bộ dữ liệu có thể đóng vai trò là khóa, nhưng không phải là danh sách

>>> d1 = {} 
>>> d2 = {1:'a', 7:'b', -42:'z', 'yahoo':54321, (42,'HGTTG'):'BabelFish'} 
>>> d3 = {'Alice':'832-555-000','Bob':'832-555-001','Carol':'832-55-002'}
>>> d4 = {'one':'un','two':'deux','three':'trois','four':'quatre' }

Từ điển d1 trống, trong khi từ điển d2 có năm cặp (khóa, giá trị). Các khóa của từ điển d2 là các số 1,7 và -42, chuỗi “yahoo” và bộ (42,” HGTTG ”). Từ điển d3 liên kết tên với số điện thoại, trong khi từ điển d4 liên kết từ tiếng Anh với bản dịch tiếng Pháp của chúng.

Không giống như danh sách, các phần tử được truy cập theo vị trí của chúng trong danh sách, các mục trong từ điển được truy cập bằng khóa của chúng. Không có nghĩa gì khi yêu cầu mục đầu tiên trong từ điển. Nếu bạn cố gắng in bất kỳ từ điển không trống nào ở trên, chẳng hạn như d4, thì bạn có thể thấy như sau

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}

Bạn có thể thấy các mục theo thứ tự khác trên máy của mình. Thứ tự lưu trữ các mục trong từ điển là không quan trọng. Chúng tôi không bao giờ truy cập một mục theo vị trí của nó trong từ điển

Thao tác trên từ điển

Dưới đây là một số thao tác phổ biến trên từ điển

  • Truy cập một giá trị. Các giá trị được truy cập bằng cách cung cấp một giá trị khóa. Cú pháp tương tự như truy cập danh sách, với số vị trí được thay thế bằng giá trị khóa. Ví dụ: d2[-42] sẽ lấy giá trị được liên kết với khóa -42 trong từ điển d2. Nếu khóa không tồn tại trong từ điển, Python sẽ cung cấp cho bạn thông báo lỗi hữu ích

  • Đặt giá trị. d2[-42] = ‘y’ sẽ liên kết giá trị ‘y’ với khóa -42 trong từ điển d2. Khóa không cần phải tồn tại trong từ điển để chuyển nhượng thành công. Như vậy, d2[8] = ‘foo’ sẽ ghép cặp khóa,giá trị (8,’foo’) vào từ điển d2. Tuy nhiên, bản thân từ điển sẽ phải được tạo ra sớm hơn. Nếu bạn cố gắng thêm một cặp khóa giá trị vào một từ điển không xác định, Python sẽ báo lỗi cho bạn. Hãy thử nhập d22[‘foo’]=’bar’ và xem Python nói gì

  • Truy xuất tất cả các khóa và giá trị. d2. items() sẽ trả về tất cả các cặp khóa-giá trị trong từ điển d2 dưới dạng danh sách các bộ 2 phần tử, trong đó mục đầu tiên trong bộ là khóa và mục thứ hai là giá trị của nó. d2. keys() đưa ra danh sách tất cả các khóa. d2. values() trả về danh sách tất cả các giá trị trong từ điển

  • Tìm độ dài của một từ điển. len(d2) trả về độ dài của từ điển d2. Bạn có thể sử dụng hàm len để xác định số lượng cặp khóa-giá trị mà một từ điển có

Sử dụng help(dict) để xem các phương thức từ điển khác

>>> d2 = {1:'a', 7:'b', -42:'z', 'yahoo':54321, (42,'HGTTG'):'BabelFish'} 
>>> d2[7] 
'b'
>>> d2[(42,'HGTTG')] 
'BabelFish'
>>> d2['yahoo'] 
54321
>>> d2.items() 
[((42,'HGTTG'),'BabelFish'), (1,'a'),('yahoo',54321),(-42,'z'),(7,'b')]

Điều quan trọng là phải suy nghĩ về các tình huống khi một từ điển chứ không phải một danh sách là cấu trúc tính toán phù hợp để sử dụng. Để trích dẫn Magnus Lie Hetland. “Từ điển tên sẽ cung cấp cho bạn manh mối. một cuốn sách bình thường được tạo ra để đọc từ đầu đến cuối. Nếu bạn thích, bạn có thể nhanh chóng mở nó đến bất kỳ trang nào. Điều này hơi giống một danh sách Python. Từ điển được xây dựng để bạn có thể tra cứu một từ (key) cụ thể một cách dễ dàng. ” Từ điển thường không được đọc từ đầu đến cuối như nhiều cuốn sách

Nhớ lại bài toán tìm một mục trong danh sách các mục từ Lab 01. Ở đây, chúng tôi viết một biến thể của hàm trả về True nếu mục nằm trong danh sách và nếu không thì là False. Hàm này mất thời gian tỷ lệ thuận với độ dài của danh sách trong trường hợp xấu nhất (mục không có trong danh sách)

def is_member(item,alist):
    for e in alist:
        if e == item:
           return True
    return False

Nếu chúng tôi có các mục dưới dạng khóa của từ điển, chúng tôi có thể kiểm tra tư cách thành viên trong thời gian liên tục, không phụ thuộc vào độ dài của từ điển. Chúng ta sử dụng phương thức has_key như hình bên dưới. Hoặc, chúng tôi có thể kiểm tra tư cách thành viên trực tiếp bằng cách sử dụng trong

>>> d4.has_key('three')
True
>>> 'two' in d4
True
>>> 'five' in d4
False

Bây giờ chúng ta chuyển sang các phương pháp để xem qua các mục của từ điển

Lặp lại một từ điển

Giả sử chúng ta muốn in các mục trong từ điển, mỗi mục một dòng. Chúng tôi sử dụng vòng lặp for lặp qua các khóa của từ điển

def print_dict(adict):
    for key in adict.keys():
        print key, adict[key]

Lưu ý việc sử dụng của người nghiện. keys() trả về danh sách tất cả các khóa trong từ điển adict. Sau đó, chúng tôi in một khóa và giá trị được liên kết của nó adict[key]. Hãy thử in từ điển d4 để xem chức năng này hoạt động như thế nào

>>> print_dict(d4)

Đọc thêm

Điều này kết thúc cuộc thảo luận ngắn gọn của chúng tôi về từ điển. Nếu bạn cảm thấy thoải mái với điều này, bạn đã sẵn sàng để giải các bài tập trong phòng thí nghiệm bên dưới. Để biết thêm thông tin về từ điển, vui lòng tham khảo danh sách tài nguyên sau đây

  • Think Python Chương 11 có một số ví dụ tuyệt vời bổ sung cho những ví dụ tôi đã sử dụng ở trên
  • Phần 5. 5 trong hướng dẫn của Guido Von Rossum

Bản xem trước ngắn của chuỗi

Xâu là một dãy các ký tự. Trong Python, bạn truy cập các phần tử trong chuỗi theo vị trí, giống như trong danh sách. Các quy tắc truy cập tương tự được áp dụng. Ví dụ: chỉ số 0 đề cập đến phần tử đầu tiên của chuỗi

greeting = "hello"
for i in range(len(greeting)):
    print greeting[i]

Bạn có thể tìm độ dài của một chuỗi bằng hàm len. Cố gắng truy cập một phần tử ở vị trí chỉ mục trong (chuỗi) của chuỗi sẽ tạo ra Lỗi chỉ mục

Một cách rõ ràng hơn nhiều để in một chuỗi một ký tự trên mỗi dòng là lặp lại trực tiếp các ký tự của chuỗi đó

________số 8_______

Toán tử + nối các chuỗi

>>> astring = ""
>>> astring = astring + "hello" + " " + "world!"

Bạn có thể lấy thêm thông tin về chuỗi trong Python từ các nguồn sau

  • Nghĩ Python

Các thao tác danh sách khác

Cho đến nay, chúng tôi chỉ đề cập đến các hoạt động thêm phần tử vào danh sách. Chúng tôi cũng có thể xóa các phần tử khỏi danh sách bằng hai phương pháp. bật và loại bỏ

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
0

một danh sách. remove(x) xóa mục đầu tiên khỏi danh sách có giá trị là x. Python phát sinh lỗi nếu không có mục đó. alist bị sửa đổi triệt để do hoạt động này. Lưu ý rằng phần tử 5 ở cuối danh sách không bị xóa

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
1

một danh sách. pop() xóa và trả về mục cuối cùng trong danh sách. Bạn có thể chỉ định một tham số bổ sung cho phương thức pop để xóa một mục tại một vị trí chỉ mục cụ thể. Để xóa phần tử đầu tiên của danh sách không trống,

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
2

pop cũng sửa đổi triệt để danh sách

Mô-đun ngẫu nhiên

Một trong những niềm vui khi làm việc với Python là có sẵn một số lượng lớn các mô-đun mạnh mẽ có thể dễ dàng truy cập và sử dụng. Một trong số đó là mô-đun ngẫu nhiên mà chúng ta có thể sử dụng bằng cách nhập nó

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
3

Mô-đun ngẫu nhiên có nhiều trình tạo số ngẫu nhiên mà chúng ta sẽ sử dụng trong Mô-đun 1 của khóa học (trường hợp kỳ lạ của Mark V. Shaney). Ở đây chúng tôi sẽ sử dụng nó để chọn một phần tử ngẫu nhiên từ danh sách. Hàm này được gọi là sự lựa chọn và nó nhận một tham số duy nhất. một danh sách không trống và nó trả về một phần tử ngẫu nhiên từ danh sách

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
4

Cú pháp ngẫu nhiên. lựa chọn chỉ ra rằng lựa chọn chức năng đến từ mô-đun ngẫu nhiên. Hãy thử đánh giá biểu thức ngẫu nhiên. lựa chọn(alist) nhiều lần và xem liệu bạn có nhận được các lần rút thăm khác nhau từ các số 0-9 không

bài tập phòng thí nghiệm. Mật mã thay thế

Chúng tôi sẽ phát triển các chức năng để mã hóa và giải mã văn bản bằng mật mã thay thế đơn giản. Mật mã thay thế mã hóa một đoạn văn bản bằng cách thay thế từng chữ cái trong văn bản bằng một chữ cái khác, rất giống chiếc nhẫn giải mã ma thuật trong món ngũ cốc ăn sáng yêu thích của bạn. Dưới đây là một ví dụ về mật mã thay thế đơn giản. (để đơn giản, tôi chỉ hiển thị những chữ cái mà tôi cần)

d → một
e → m
H → o
tôi → ?
o → x
r → e
w → d
→ H
[dấu cách] → g

Chúng tôi sẽ sử dụng ánh xạ này để mã hóa một chuỗi bằng cách thay thế từng chữ cái một

Chào thế giới. → om??xgdxe?aH

Để giải mã tin nhắn, người ta cần nghịch đảo của ánh xạ trên (lưu ý điều này nói gì về mặt toán học về bản chất của mật mã thay thế)

một → d
d → w
e → r
g → [dấu cách]
H →
m → e
o →H
x → o
?

Với mối quan hệ này, chúng ta có thể thực hiện quá trình thay thế giống như trước đây

om??xgdxe?aH → Xin chào thế giới

Ta da. Điều cần chú ý ở đây là các ánh xạ ở trên hoàn toàn giống với kiểu ánh xạ khóa-giá trị một chiều mà chúng ta đã thảo luận ở phần đầu của phòng thí nghiệm này. Điều này có nghĩa là từ điển là cấu trúc dữ liệu hoàn hảo để thể hiện các mối quan hệ thay thế

Bộ mã hóa Từ điển

Điều đầu tiên chúng ta cần làm là tạo một mật mã thay thế. Mật mã thay thế đơn giản nhất là mật mã Caesar được đặt theo tên của Julius Caesar, người đã sử dụng nó để mã hóa thông tin liên lạc quân sự của mình. Đó là một phép dịch trái đơn giản của bảng chữ cái bằng 3 (a → d, b → e, v.v. ). Đây là một từ điển Python đại diện cho một phần ánh xạ bộ mã hóa được sử dụng trong mật mã Caesar

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
5

Thật không may, mật mã Caesar rất dễ bị phá. Vì vậy, để bảo mật tối đa, chúng tôi sẽ tạo một bộ mã hóa ngẫu nhiên ánh xạ bảng chữ cái đầu vào. chữ cái (a-z, A-Z), số (0-9) và ký tự đặc biệt (dấu chấm câu) vào bảng chữ cái đầu ra, đối với mật mã thay thế giống như bảng chữ cái đầu vào. Chúng tôi cần ánh xạ bộ mã hóa này không thể đảo ngược, nghĩa là mỗi ký tự đầu ra tương ứng với một và chỉ một ký tự đầu vào. Chẳng hạn, giả sử chúng ta có d → a, thì chúng ta không thể có p → a. Tại sao bạn nghĩ rằng hạn chế này là cần thiết? . e. chỉ nên có một ký tự đầu ra cho mỗi ký tự đầu vào

Bây giờ chúng ta sẽ mô tả một thuật toán để xây dựng một mật mã thay thế ngẫu nhiên ánh xạ một tập hợp các ký tự tới chính nó. Giống như mật mã Caesar cổ điển, văn bản thuần túy và tin nhắn văn bản được mã hóa sẽ nằm trong cùng một bảng chữ cái. Trước khi mô tả thuật toán, chúng tôi minh họa nó trên một ví dụ nhỏ. Giả sử bảng chữ cái của chúng ta chỉ có ba ký tự. 'a', 'b' và 'c'. Tất cả các văn bản đầu vào chỉ chứa ba chữ cái này và các văn bản được mã hóa cũng sẽ chứa ba chữ cái này. Một mật mã thay thế là một ánh xạ khả nghịch từ bảng chữ cái đầu vào {‘a’,’b’,’c’} sang bảng chữ cái đầu ra {‘a’,’b’,’c’}

  • Chúng tôi bắt đầu với một ánh xạ mật mã trống. Hãy nhớ rằng việc tạo mật mã bao gồm việc chọn mã hóa cho ba chữ cái trong bảng chữ cái đầu vào

  • Đầu tiên, chúng tôi tìm một ánh xạ cho ký tự đầu vào 'a'. Chúng tôi có thể ánh xạ nó tới bất kỳ một trong số 'a', 'b' và 'c' trong bảng chữ cái đầu ra. Hãy để chúng tôi nói rằng chúng tôi (ngẫu nhiên) chọn 'b'. Mật mã của chúng tôi bao gồm ánh xạ 'a' → 'b'

  • Vì chúng tôi đã chọn 'b' để mã hóa 'a', nên chúng tôi xóa 'b' khỏi tập hợp các chữ cái có thể có trong bảng chữ cái đầu ra

  • Tiếp theo, chúng tôi tìm thấy ánh xạ cho ký tự đầu vào 'b'. Các chữ cái còn lại để chọn trong bảng chữ cái đầu ra là "a" và "c". Chúng tôi chọn ngẫu nhiên một trong số này - hãy để chúng tôi nói, 'a'. Sau đó, mật mã của chúng tôi có hai ánh xạ. 'a' → 'b' và 'b' → 'a'

  • Vì chúng tôi đã chọn 'a' từ bảng chữ cái đầu ra, tất cả những gì chúng tôi còn lại là 'c'

  • Ký tự đầu vào cuối cùng là 'c' và chỉ có một ký tự có thể có trong bảng chữ cái đầu ra để ánh xạ ký tự đó tới

  • Mật mã ngẫu nhiên chúng ta vừa xây dựng là. 'a' → 'b' và 'b' → 'a' và 'c' → 'c'

Đảm bảo bạn hiểu ví dụ này trước khi tiếp tục thêm

Bài tập 1

Triển khai hàm make_encoder lấy một chuỗi ký tự làm đầu vào và trả về một từ điển trong đó các khóa là các ký tự trong chuỗi đầu vào và các giá trị là các ký tự mà chúng được ánh xạ tới. Đầu tiên, nhập mô-đun ngẫu nhiên và xác định biến chuỗi all_chars có bảng chữ cái đầu vào cho bộ mã hóa của chúng tôi. Đây cũng là bảng chữ cái đầu ra cho bộ mã hóa

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
6

Bây giờ chúng ta đã sẵn sàng để viết phác thảo hàm make_encoder. bảng chữ cái là một chuỗi có giá trị có thể là all_chars

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
7

Đây là công thức bạn nên thực hiện

  • Đầu tiên, tạo một danh sách đại diện cho bảng chữ cái đầu ra. Vì bảng chữ cái đầu vào và đầu ra giống nhau nên bước này yêu cầu bạn lấy bảng chữ cái đầu vào được cung cấp cho bạn dưới dạng một chuỗi và biểu thị nó dưới dạng danh sách. Nhớ lại rằng chúng tôi xóa các mục khỏi bảng chữ cái đầu ra trong khi xây dựng từ điển bộ mã hóa. Chuỗi là bất biến, trong khi danh sách thì không. Chúng tôi cần tính linh hoạt của một danh sách để thể hiện bảng chữ cái đầu ra trong phép tính này

  • Tiếp theo, hãy tạo một từ điển bộ mã hóa trống

  • Giờ hãy lặp qua bảng chữ cái đầu vào và thực hiện thao tác sau cho từng ký tự c

    • Chọn một phần tử ngẫu nhiên e trong danh sách bảng chữ cái đầu ra
    • Xóa phần tử đó khỏi danh sách bảng chữ cái đầu ra. Nhớ lại rằng danh sách bảng chữ cái đầu ra được sửa đổi theo bước này
    • Thêm mục (c,e) vào từ điển bộ mã hóa
  • Trả lại từ điển bộ mã hóa

Bạn có thể tạo bộ mã hóa ngẫu nhiên bằng cách gọi hàm như sau

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
8

Bài tập 2a

Viết một hàm có tên là encode_message nhận một tin nhắn văn bản gốc và một từ điển bộ mã hóa và trả về một phiên bản được mã hóa của tin nhắn văn bản gốc bằng cách sử dụng ánh xạ trong từ điển bộ mã hóa. Hãy nhớ rằng các chuỗi là danh sách các ký tự và bạn có thể lặp lại chúng bằng cách sử dụng cùng một cấu trúc lặp cho danh sách. Để nối các mục vào một chuỗi, hãy sử dụng toán tử +

>>> print d4
{'four':'quatre','three': 'trois','two': 'deux','one': 'un'}
9

Bài tập 2b

Bây giờ bạn nên kiểm tra chức năng bộ mã hóa của mình. In ra từ điển mã hóa của bạn. Chọn một từ hoặc cụm từ ngắn, đơn giản và mã hóa thủ công bằng cách sử dụng dữ liệu từ từ điển bộ mã hóa của bạn. So sánh cụm từ được mã hóa thủ công của bạn với cùng một cụm từ được đặt qua chức năng bộ mã hóa của bạn

>>> d2 = {1:'a', 7:'b', -42:'z', 'yahoo':54321, (42,'HGTTG'):'BabelFish'} 
>>> d2[7] 
'b'
>>> d2[(42,'HGTTG')] 
'BabelFish'
>>> d2['yahoo'] 
54321
>>> d2.items() 
[((42,'HGTTG'),'BabelFish'), (1,'a'),('yahoo',54321),(-42,'z'),(7,'b')]
0

Bài tập 3

Để giải mã chuỗi được mã hóa, chúng ta cần xây dựng từ điển bộ giải mã. Từ điển bộ giải mã chỉ đơn giản là nghịch đảo của từ điển bộ mã hóa. Viết hàm make_decoder lấy từ điển bộ mã hóa và trả về từ điển bộ giải mã tương ứng. Để thực hiện việc này, hãy lặp qua từ điển bộ mã hóa và điền vào một từ điển mới các cặp khóa-giá trị sao cho nếu cặp (k,v) nằm trong từ điển bộ mã hóa thì cặp (v,k) nằm trong từ điển bộ giải mã

>>> d2 = {1:'a', 7:'b', -42:'z', 'yahoo':54321, (42,'HGTTG'):'BabelFish'} 
>>> d2[7] 
'b'
>>> d2[(42,'HGTTG')] 
'BabelFish'
>>> d2['yahoo'] 
54321
>>> d2.items() 
[((42,'HGTTG'),'BabelFish'), (1,'a'),('yahoo',54321),(-42,'z'),(7,'b')]
1

Bài tập 4a

Viết một hàm bộ giải mã lấy một tin nhắn được mã hóa và một từ điển của bộ giải mã và tạo ra dạng văn bản gốc của tin nhắn được mã hóa, được giải mã theo ánh xạ được xác định trong từ điển của bộ giải mã

>>> d2 = {1:'a', 7:'b', -42:'z', 'yahoo':54321, (42,'HGTTG'):'BabelFish'} 
>>> d2[7] 
'b'
>>> d2[(42,'HGTTG')] 
'BabelFish'
>>> d2['yahoo'] 
54321
>>> d2.items() 
[((42,'HGTTG'),'BabelFish'), (1,'a'),('yahoo',54321),(-42,'z'),(7,'b')]
2

Chúng ta có cần viết một chức năng giải mã đặc biệt, giống như chúng ta đã viết cho mã hóa không?

Bài tập 4b

  • Kiểm tra bộ giải mã của bạn bằng cách so sánh giải mã thủ công với đầu ra của chức năng giải mã, giống như bạn đã làm với chức năng bộ mã hóa
  • Kiểm tra toàn bộ quy trình mã hóa-giải mã bằng cách lấy một cụm từ, mã hóa cụm từ đó thành một chuỗi được mã hóa, sau đó giải mã chuỗi đó trở lại dạng ban đầu bằng cách sử dụng các hàm đã phát triển ở trên

Bài tập 4c

Bằng cách tạo một cặp từ điển bộ mã hóa và bộ giải mã thứ hai, hãy chứng minh rằng nếu sử dụng bộ mã hóa hoặc bộ giải mã sai, thì bạn không thể giải mã thư đã mã hóa

Mã hóa nâng cao với các ký tự ASCII  

Điều gì sẽ xảy ra nếu bạn muốn có thể mã hóa một số ký tự không in được như nguồn cấp dữ liệu xuống dòng, xuống dòng, xóa lùi và tab? . Một cách là biểu diễn các ký tự không phải dưới dạng thực thể có thể in thông thường mà dưới dạng số nguyên. Điều này được thực hiện bằng cách sử dụng các ký tự ASCII . Vui lòng dành chút thời gian để đọc về chúng trong phần phụ lục bên dưới.

Bằng cách sử dụng chuỗi thoát cho các ký tự không in được, bạn có thể cẩn thận thêm tất cả chúng vào chuỗi ký tự có sẵn của mình, nhưng có một cách dễ dàng hơn. chỉ cần xác định một hàm sẽ tạo chuỗi ký tự có sẵn

Bài tập tùy chọn 1

Xác định một hàm gọi là make_alphabet lấy hai số nguyên làm đầu vào, một giá trị số nguyên ASCII bắt đầu và một giá trị kết thúc ASCII integer value. The function should simply loop through all the ASCII giá trị số nguyên, bắt đầu từ giá trị bắt đầu đã cho cho đến nhưng không bao gồm giá trị cuối đã cho. Tại mỗi lần lặp của vòng lặp, bằng cách sử dụng hàm chr, chỉ cần thêm ký tự tương đương với giá trị số nguyên ASCII vào chuỗi kết quả (được khởi tạo là . Sau khi vòng lặp kết thúc, chỉ cần trả về chuỗi kết quả.

Kiểm tra chức năng của bạn bằng cách tạo bảng chữ cái từ 32 trở lên nhưng không bao gồm 127. 32 là ký tự khoảng trắng và 126 là ký tự ~. Tất cả các ký tự có thể in được tạo bởi cuộc gọi này. . python >>> alphabet = make_alphabet(32,127) >>> print alphabet

Giờ đây, bạn có thể dễ dàng tạo một bảng chữ cái hữu ích mà không cần phải nhập một chuỗi dài

Một trong những vấn đề với các mật mã thay thế đơn giản mà chúng ta vừa tạo ra là chúng rất dễ bị bẻ khóa. Mặc dù mỗi chữ cái đã được thay thế bằng một chữ cái khác, vì mỗi chữ cái được biểu thị bằng một chữ cái duy nhất trong tin nhắn được mã hóa, tần suất tương đối mà mỗi chữ cái xuất hiện là không thay đổi. Vì tần suất xuất hiện của mỗi chữ cái trong các văn bản nói chung đã được biết rõ, nên người ta có thể dễ dàng biết được mỗi ký tự trong tin nhắn được mã hóa thực sự đại diện cho chữ cái nào. Một cách khả thi để làm cho mật mã thay thế khó bẻ khóa hơn nhiều là có nhiều khả năng cho mỗi chữ cái. Ví dụ,

d → a hoặc b
e → m hoặc z hoặc 1
H → o hoặc
tôi → ?
o → x hoặc t hoặc \
r → e hoặc %
w → d hoặc q
→ H hoặc >
[dấu cách] → g hoặc =

Lưu ý rằng số lượng khả năng cho mỗi chữ cái không nhất thiết phải giống nhau. Tuy nhiên, hạn chế là số ký tự đầu ra lớn hơn nhiều so với số ký tự đầu vào. Sử dụng loại ánh xạ này, chọn ngẫu nhiên chữ cái để thay thế từ danh sách các lựa chọn, chúng tôi nhận được loại mã hóa sau. Lưu ý rằng các chữ cái lặp đi lặp lại như l, dường như không còn lặp lại nữa

Chào thế giới. → oz?8tgdxe]a>

Ánh xạ bộ giải mã được xây dựng giống như trước đây. Nó có nhiều mục hơn và lưu ý rằng nhiều ký tự (e. g. , a, b) có thể ánh xạ trở lại một ký tự đơn (e. g. , đ)

một → d
b → d
m → e
z → e
1 → e
o → H
→ H
?
8 → tôi
] → tôi
x → o
t → o
\ → o
e → r
% → r
d → w
q → w
H →
> → h
g → [dấu cách]
= → [dấu cách]

Với ánh xạ bộ giải mã này, thông báo được mã hóa dễ dàng được giải mã

oz?8tgdxe]a> → Xin chào thế giới

Bài tập tùy chọn 2

Vì vậy, thách thức của bạn là sửa đổi các chức năng của mình khi thực hiện một mật mã thay thế đơn, đơn giản để thực hiện một mật mã thay thế nhiều lần như được mô tả ở trên. Bạn cần xác định chức năng nào trong bốn chức năng cần sửa đổi, sau đó xây dựng các phiên bản đã sửa đổi của các chức năng đó

dict ={} trong Python là gì?

Cấu trúc bảng băm khóa/giá trị hiệu quả của Python được gọi là "dict". Nội dung của một dict có thể được viết dưới dạng một chuỗi key. cặp giá trị trong dấu ngoặc nhọn { }, e. g. chính tả = {key1. giá trị1, khóa2. giá trị2,. }. "Chính tả trống" chỉ là một cặp dấu ngoặc nhọn trống {}.

Giá trị của bảng chữ cái trong Python là gì?

Phương pháp tiếp cận chung cho Bảng chữ cái Python . The ASCII value of A-Z lies in the range of 65-90, and the for a-z, the value is in the range 97 – 122.

Bạn có thể sử dụng một số làm khóa trong từ điển Python không?

Ví dụ: bạn có thể sử dụng số nguyên, số float, chuỗi hoặc Boolean làm khóa từ điển . Tuy nhiên, cả danh sách và từ điển khác đều không thể đóng vai trò là khóa từ điển vì danh sách và từ điển có thể thay đổi.

Tôi có thể hoán đổi khóa và giá trị trong từ điển Python không?

Bạn có thể hoán đổi khóa và giá trị trong từ điển với khả năng hiểu từ điển và phương thức items() .