Hướng dẫn autocomplete python input - tự động hoàn thành đầu vào python

Is there a way to, using the modules

Name:
8 or
Name:
9, get smart completion when reading an input string that only matches a specific set of values?

For instance:

read_from_list(prompt"Name:", allowed_values=["Adam", "Bert", "Cesar"])

will create prompt

Name:

If I enter

Ad

and press complete (typically via Tab-key) I get

Adam

As a bonus it shouldn't even be possible to enter a string other than

Ad
0,
Ad
1 or
Ad
2 together with a set of all their prefixes.

Update: In essence I want a Python 3 variant of Emacs's

Ad
3: https://www.gnu.org/software/emacs/manual/html_node/elisp/Minibuffer-Completion.html

Copyright 2012, Chin

Nội dung chính

  • Sơ lược về Python
  • Giới thiệu về ngôn ngữ
  • Basic stuffs
  • Biến (variable)
  • Vòng lặp
  • Đối tượng
  • Now let's get dirty
  • Bài tập 1: cat
  • Bài tập 2: echo
  • Bài tập 3: more

Nội dung chính

  • Sơ lược về Python
  • Giới thiệu về ngôn ngữ
  • Basic stuffs
  • Biến (variable)
  • Vòng lặp
  • Đối tượng
  • Now let's get dirty
  • Bài tập 1: cat
  • Bài tập 2: echo
  • Bài tập 3: more

Nội dung chính

  • Sơ lược về Python
  • Giới thiệu về ngôn ngữ
  • Basic stuffs
  • Biến (variable)
  • Vòng lặp
  • Đối tượng
  • Now let's get dirty
  • Bài tập 1: cat
  • Bài tập 2: echo
  • Bài tập 3: more

level 1
    level 2
        level 3
        vẫn level 3
    quay lại level 2
3 giống như
if <điều kiện 1>:
    <code>
elif <điều kiện 2>: # else + if = elif
    <code>
elif <điều kiện n>:
    <code>
else:
    <code>
7 nhưng không in hết một đống ra màn hình mà in dần thành từng trang ~24 dòng một. Nhấn phím enter để xuống một dòng, phím cách để xuống một trang.


Sơ lược về Python

Giới thiệu về ngôn ngữ

  • http://code.google.com/edu/languages/google-python-class/
  • Basic stuffs
  • http://www.python.org/doc/

Giới thiệu về ngôn ngữ

  • Basic stuffs

  • Biến (variable)

    Vòng lặp Nên phân biệt 2 khái niệm ở đây là ngôn ngữ Python viết hoa chữ cái đầu bằng text thường và

    Ad
    
    4 là dòng lệnh và trình thông dịch của Python.

  • Đối tượng

  • Now let's get dirty

  • Bài tập 1: cat

Basic stuffs

Biến (variable)

  • Vòng lặp

  • Đối tượng

    • Now let's get dirty

      Bài tập 1: cat

    • Bài tập 2: echo

      This work is licensed under the Creative Commons Attribution 3.0 Unported License.

    • Dưới đây là những kiến thức tóm tắt. Có thể tham khảo các nguồn khác đầy đủ hơn (có lẽ cũng dễ hơn nữa =]):

      http://www.openbookproject.net/thinkcs/python/english2e/

      hoặc `a = "abc"` # tự động escape dấu '
      
      hoặc `a = """abc"""` # escape tất cả mọi thứ
      
    • Python là một ngôn ngữ thông dịch (interpreted), tức là ngôn ngữ không cần phải biên dịch một lần ra file chạy mà đọc code đến đâu chạy đến đấy.

      Khi chạy lệnh

      Ad
      
      4 ta sẽ có một giao diện dòng lệnh giống của Unix, có thể chạy từng dòng code Python ngay trực tiếp tại đây. Ngoài ra còn có
      Ad
      
      5 là một phiên bản cải tiến hơn của dòng lệnh
      Ad
      
      4 có đánh mã màu, tự động điền khi ấn tab (autocomplete) và nhiều tính năng khác khiến việc khám phá ngôn ngữ trở nên dễ dàng hơn.

      `b = ['a', 'b', 'c']` -&gt; `b[1]` = `'b'`
      
      `c = [1, 'b', 3.5]` -&gt; `c[1]` = `3.5`
      
    • NOTE Nên phân biệt 2 khái niệm ở đây là ngôn ngữ Python viết hoa chữ cái đầu bằng text thường và

      Ad
      
      4 là dòng lệnh và trình thông dịch của Python.

      Python có mặt ở mọi nơi và dễ dàng cài đặt. Gần như tất cả các bản phân phối Linux đều cài sẵn Python, Mac OS X từ bản Lion trở đi cũng cài sẵn Python. Trên Windows có thể tải Python từ trang chủ.

If/else

Python có rất nhiều module đi kèm và vô số module từ các bên thứ ba để tăng thêm tính năng cho ngôn ngữ như truy cập mạng, hệ thống file, mã hóa, giao diện đồ họa, 3D...

if <điều kiện 1>:
    <code>
elif <điều kiện 2>: # else + if = elif
    <code>
elif <điều kiện n>:
    <code>
else:
    <code>

VD:

if age > 18:
    print('legal')
elif age == 18:
    print('barely legal')
else:
    print('go home, kid')

Python có hệ thống documentation rất độc đáo, đi kèm trong code luôn. VD: vào

Ad
8 chạy lệnh sau
Ad
9
Trong Python không dùng begin/end hay {} để đánh dấu code block mà dùng indentation (việc thụt đầu dòng) để đánh dấu. Thường dùng 4 dấu cách hoặc một phím tab để indent. Không cần đóng code block vì chỉ cần khác indent tức là khác level rồi.

VD:

level 1
    level 2
        level 3
        vẫn level 3
    quay lại level 2

Vòng lặp

  • Đối tượng

      while <điều kiện>:
          <code>
    

    Now let's get dirty

    Name:
    
    0
  • Bài tập 1: cat

    Name:
    
    1

    VD:

    Name:
    
    2

    Bài tập 2: echo Python có hàm range() để tạo list tự động rất phù hợp để dùng chung với

    hoặc `a = "abc"` # tự động escape dấu '
    
    hoặc `a = """abc"""` # escape tất cả mọi thứ
    
    7.

    This work is licensed under the Creative Commons Attribution 3.0 Unported License.

Đối tượng

Now let's get dirty

Bài tập 1: cat

Bài tập 2: echo

This work is licensed under the Creative Commons Attribution 3.0 Unported License.

VD:

  • Dưới đây là những kiến thức tóm tắt. Có thể tham khảo các nguồn khác đầy đủ hơn (có lẽ cũng dễ hơn nữa =]):

  • Module

    if <điều kiện 1>:
        <code>
    elif <điều kiện 2>: # else + if = elif
        <code>
    elif <điều kiện n>:
        <code>
    else:
        <code>
    
    5 có các hàm, biến, hằng để làm việc với thời gian. VD:
    if <điều kiện 1>:
        <code>
    elif <điều kiện 2>: # else + if = elif
        <code>
    elif <điều kiện n>:
        <code>
    else:
        <code>
    
    6 sẽ pause chương trình trong 3 giây.

Now let's get dirty

Dưới đây là một chuỗi bài tập về việc implement lại các lệnh cơ bản của Unix bằng Python.

Bài tập 1: cat

if <điều kiện 1>:
    <code>
elif <điều kiện 2>: # else + if = elif
    <code>
elif <điều kiện n>:
    <code>
else:
    <code>
7 là lệnh để đưa input ra output. Chạy
if <điều kiện 1>:
    <code>
elif <điều kiện 2>: # else + if = elif
    <code>
elif <điều kiện n>:
    <code>
else:
    <code>
7 không có đối số, nó sẽ lặp vô hạn, đợi input từ người dùng và ghi ngược cái input đó ra màn hình.

Thường dùng để:

  • Tạo file mới

    Name:
    
    3

    (khi chạy lệnh, cat sẽ đợi input, gõ văn bản vào và nhấn Control-D để kết thúc)

  • In nội dung file text ra màn hình

    Name:
    
    4

Ý tưởng:

  1. Nếu có argument là file thì mở file và in ra màn hình.
  2. Nếu không thì lặp vô hạn việc đọc input và ghi ra output.

NOTE Để làm được bài tập này thì cần biết thêm một số khái niệm sau Để làm được bài tập này thì cần biết thêm một số khái niệm sau

  • Module

    `b = ['a', 'b', 'c']` -&gt; `b[1]` = `'b'`
    
    `c = [1, 'b', 3.5]` -&gt; `c[1]` = `3.5`
    
    8 dùng để giao tiếp với hệ thống. Nó có một số hàm và biến khá hay ho:

    • if age > 18:
          print('legal')
      elif age == 18:
          print('barely legal')
      else:
          print('go home, kid')
      
      0 dùng để thoát chương trình khi cần.

    • if age > 18:
          print('legal')
      elif age == 18:
          print('barely legal')
      else:
          print('go home, kid')
      
      1 là một list chứa các argument của chương trình. Hãy tưởng tượng chương trình là một hàm, được hệ thống gọi, có đối số,
      if age > 18:
          print('legal')
      elif age == 18:
          print('barely legal')
      else:
          print('go home, kid')
      
      1 cho ta truy cập các đối số đó.

      VD: Nếu chạy lệnh sau trong terminal

      if age > 18:
          print('legal')
      elif age == 18:
          print('barely legal')
      else:
          print('go home, kid')
      
      3 thì sys.argv sẽ chứa giá trị
      if age > 18:
          print('legal')
      elif age == 18:
          print('barely legal')
      else:
          print('go home, kid')
      
      4

  • Hàm

    if age > 18:
        print('legal')
    elif age == 18:
        print('barely legal')
    else:
        print('go home, kid')
    
    5 dùng để nhập dữ liệu từ người dùng, luôn return một string. Có thể so sánh với
    if age > 18:
        print('legal')
    elif age == 18:
        print('barely legal')
    else:
        print('go home, kid')
    
    6 của C và
    if age > 18:
        print('legal')
    elif age == 18:
        print('barely legal')
    else:
        print('go home, kid')
    
    7 của Pascal.

  • Hàm

    if age > 18:
        print('legal')
    elif age == 18:
        print('barely legal')
    else:
        print('go home, kid')
    
    8 dùng để mở file. Return một đối tượng file.

Code mẫu:

Name:
5

Bài tập 2: echo

if age > 18:
    print('legal')
elif age == 18:
    print('barely legal')
else:
    print('go home, kid')
9 là lệnh để in ra màn hình. Cách dùng:

Name:
6

Ý tưởng:

  1. Nếu có argument là file thì mở file và in ra màn hình.
  2. Nếu không thì lặp vô hạn việc đọc input và ghi ra output.

NOTE Để làm được bài tập này thì cần biết thêm một số khái niệm sau Để làm được bài tập này thì cần biết thêm một số khái niệm sau

  • Module
    `b = ['a', 'b', 'c']` -&gt; `b[1]` = `'b'`
    
    `c = [1, 'b', 3.5]` -&gt; `c[1]` = `3.5`
    
    8 dùng để giao tiếp với hệ thống. Nó có một số hàm và biến khá hay ho:

if age > 18:
    print('legal')
elif age == 18:
    print('barely legal')
else:
    print('go home, kid')
0 dùng để thoát chương trình khi cần.

Code mẫu:

Name:
7

Bài tập 2: echo

if age > 18:
    print('legal')
elif age == 18:
    print('barely legal')
else:
    print('go home, kid')
9 là lệnh để in ra màn hình. Cách dùng:

Nếu không có argument nào thì thoát