Advertisement

Responsive Advertisement

Advent of Cyber 2 [2020] - Tryhackme - Write Up - Day 15

 


Task 20  [Day 15] Scripting There's a Python in my stocking!

Bạn đã bao giờ tự hỏi làm thế nào mà các chú lùn xoay sở để theo kịp đồ chơi xây dựng cho rất nhiều người trên khắp thế giới? Bạn có bao giờ buồn và nghĩ "hả, với 7 tỷ người trên thế giới và ngày càng phát triển đồng nghĩa với việc mỗi gia tinh sẽ làm việc không ngừng để chế tạo đồ chơi! Chúng sẽ không bao giờ được nghỉ ngơi!"

Vâng, tôi có một tin tốt cho bạn. Nhờ phép thuật của ông già Noel, các chú lùn có những cỗ máy có thể chế tạo đồ chơi cho chúng. Máy này yêu cầu một gia tinh thiết kế đồ chơi, sau đó mô tả cách làm đồ chơi bằng ngôn ngữ kịch bản.

Ngôn ngữ kịch bản là loại ngôn ngữ lập trình đặc biệt rất thích hợp cho các chương trình nhỏ hơn, ngắn hơn, chẳng hạn như thiết kế của một món đồ chơi.

Tài liệu này dành cho bất kỳ yêu tinh nào muốn làm việc với ông già Noel. Sau khi hoàn thành việc này, bạn sẽ có thể dễ dàng sản xuất đồ chơi và sử dụng API của ông già Noel!

Watch DarkStar's video on solving this task!

🎄 Python là gì?

Python là một ngôn ngữ lập trình thông dịch, cấp cao, có mục đích chung. Tóm lại, Python đã có sẵn rất nhiều trên nhiều máy tính và rất dễ viết.

Python có sẵn trong tất cả các hệ điều hành Linux, Hộp tấn công TryHackMe, Máy làm đồ chơi Elven và Mac OS (nhưng đáng buồn thay, không phải Windows theo mặc định).


🎅 Cài đặt & Công cụ

TryHackMe AttackBox đã được cài đặt Python. Để sử dụng nó, hãy tải lên một thiết bị đầu cuối và sau đó nhập "python3". Điều này sẽ tải một trình soạn thảo tương tác cho Python.

Chúng tôi sẽ tạo tệp vì vậy chúng tôi sẽ không cần sử dụng trình chỉnh sửa tương tác. Thay vào đó, để chạy một tệp với Python, hãy thực thi: "python3 hello.py". Chúng tôi sẽ tạo hello.py tiếp theo.

Nhưng nếu bạn chưa cài đặt Python, bạn sẽ cần cài đặt nó. Theo liên kết này và cài đặt Python cho hệ thống của bạn. Đảm bảo cài đặt một trình soạn thảo văn bản như VS Code sẽ giúp bạn viết mã Python.

🤶 Hello, World!

Nó là truyền thống cho chương trình đầu tiên của bạn là "Hello, World!" vì vậy chúng ta hãy làm điều đó.

Mở một tệp mới trong VS Code (hoặc trình soạn thảo văn bản mà bạn chọn) và gọi nó là hello.py. Phần mở rộng .py có nghĩa là nó là một tệp Python. Bây giờ gõ:

print("Hello, World!")

Lưu tệp, sau đó trong Terminal, điều hướng đến vị trí của tệp và chạy python3 hello.py Bạn sẽ thấy kết quả đầu ra trên màn hình của mình là "Hello, World!".

Hãy phân tích ý nghĩa của từng thành phần này. Hãy giải thích điều này làm gì:


👼 print()

In là một chức năng. Chúng tôi cung cấp cho nó một số văn bản và nó sẽ in ra màn hình. Chúng ta sẽ thấy nhiều hàm trong Python. Chúng rất cần thiết, vì chúng cho phép chúng tôi sử dụng lại mã.

Để xác định chức năng của riêng chúng tôi, chúng tôi sử dụng từ khóa def.

def hello():   
    print("Hello, World!") 

Chúng tôi sử dụng một tab (hoặc 4 dấu cách) bên trong các chức năng để biểu thị rằng mã thuộc về chức năng đó. Đây được gọi là phạm vi, và thật không may, chúng ta sẽ không đi sâu vào nó ở đây. Nhưng tôi sẽ liên kết một số tài nguyên ở cuối.

🧝‍♀️ "Hello, World!"

Là những gì chúng ta gọi là một chuỗi (một chuỗi ký tự). Nó chỉ là văn bản.

🧝‍♂️ Variables

Bây giờ trong phần cuối cùng, tôi đã nói "Chuỗi (một chuỗi ký tự)".

Điều đó nghĩa là gì? Trong lập trình, chúng ta cần có các kiểu dữ liệu. Mỗi bit dữ liệu đều có một kiểu chung với nó. Bạn đã biết một số.

Nếu tôi nói: 1, 2, 3, 4, 5, 6, 7, 8, 9 "Đây có phải là những câu?" Không! Chúng là những con số. Thấy chưa, bạn đã biết các kiểu dữ liệu rồi 😜

Trong Python, nó cũng vậy. Chúng tôi có một số kiểu dữ liệu thiết yếu chứa nhiều thứ:


  • Chuỗi (một chuỗi ký tự)
  • Số nguyên - một số nguyên (-50, 50, 60, 91)
  • Float - một số dấu phẩy động (21,3, -5,1921)
  • Danh sách - danh sách các mục ([1, 2, 3], ["hi", 6, 7.91])

Và nhiều hơn ...

hello = "Hello, World!"

Chúng tôi sử dụng dấu bằng như một toán tử gán. Nó chỉ định giá trị ở phía bên phải cho nhóm ở bên trái.

Bây giờ giả sử chúng ta muốn thêm biến này vào một biến khác. Một quan niệm sai lầm phổ biến là chúng ta lấy chính cái thùng và sử dụng cái đó. Nhưng trong Python thì không. Chúng tôi chuyển qua tham khảo. Như trong, chúng tôi chỉ truyền một vị trí của biến - chúng tôi không truyền chính biến đó. Cách thay thế là chuyển theo giá trị. Điều này rất quan trọng cần hiểu vì nó có thể gây ra một số lượng lớn các cơn đau đầu sau này.

Điều này rất quan trọng trong việc làm đồ chơi. Chúng tôi đã từng có một lỗi nhỏ khi một con yêu tinh gán các biến khác nhau cho cùng một món đồ chơi. Chúng tôi nghĩ rằng chúng tôi có 800 phiên bản đồ chơi vì chúng tôi có 800 biến, nhưng hóa ra tất cả chúng đều chỉ về cùng một món đồ chơi! May mắn thay, những đứa trẻ đó đã giành được đồ chơi trong năm đó.

🦌 Operators

Hãy nói về các toán tử. Một toán tử là một cái gì đó giữa 2 biến / giá trị và thực hiện một cái gì đó với chúng. Ví dụ, toán tử cộng:

x = 3 + 1 # x = 4 

Python hỗ trợ nhiều toán tử toán học:

3 + 1 

3 / 1 # divided by 

3 * 4 # times 

2 ** 2 # 2 to the power of 2 

2 % 3 # 2``mod 3 

Điều thú vị là, các nhà khai thác không chỉ làm việc trên các con số. Chúng cũng hoạt động trên các chuỗi. Và danh sách. Và từ điển.

[3, 2] + [6, 7] # [3, 2, 6, 7] 

"Hello, " + "World!" # "Hello, World!" 

🍪 Boolean

Hai giá trị cho kiểu dữ liệu boolean là True và False. Giống như danh sách Nghịch ngợm và Tốt bụng của Ông già Noel, nó là Đúng hoặc Sai (không bao giờ là cả hai).

Đúng và Sai đều vô cùng quý giá. Trong hệ nhị phân, 1 đại diện cho Đúng và 0 đại diện cho Sai. Thông qua 2 giá trị này, chúng ta có thể biểu diễn tất cả dữ liệu trên máy tính, miễn là chúng ta đang sử dụng cổng logic. Các cổng logic đó xuất hiện trong Python dưới dạng toán tử.

Chúng tôi sẽ đi qua một số bạn có thể đã biết:

True or False # True 

Toán tử or trả về true khi bên trái hoặc bên phải là True.

Hãy nhanh chóng đi qua tất cả những người khác

True and True # True 

Điều này trả về True nếu và chỉ khi cả hai bên trái và phải là True

not True # False 

không phủ định biểu thức bên phải. Vì vậy, ngược lại với True là False.

Chúng ta có thể phủ định câu lệnh Hoặc như vậy:

not (True or False) # False 

Bây giờ nó chỉ trả về True khi cả hai bên của hoặc là False.

🥛 Các câu lệnh điều kiện - If 

Câu lệnh if là một trong những câu lệnh mạnh mẽ nhất trong mọi lập trình. Chúng tôi muốn làm điều gì đó nếu một điều kiện được đáp ứng. Nếu một đứa trẻ ngoan, chúng sẽ nhận được một món đồ chơi. Nếu không họ nhận được than!

Vì vậy, ví dụ: nếu danh sách không trống:

x = [6] if x: print("I run!") 

Vì x không rỗng nên nó có giá trị trung thực. Có nghĩa là điều này đọc là "Nếu Đúng" và nó chạy. Nếu nó đọc là "If False", nó không chạy.

Câu lệnh if chỉ chạy nếu điều kiện là True.

Bây giờ chúng ta hãy xem nó trong hành động.

name = input("What is your name? ") 

Chúng ta có thể lấy thông tin đầu vào của người dùng bằng hàm input (). Bây giờ, hãy giả sử chúng ta là một đại gia rộng rãi tại Santa's Grotto. Chúng tôi chỉ muốn để những người trong đó có tên trong câu lạc bộ đặc biệt của chúng tôi. Đầu tiên, chúng ta cần tạo một danh sách tên. Bạn có đoán được chúng tôi sẽ sử dụng gì cho việc này không?

names = ["Skidy", "DorkStar", "Ashu", "Elf"] 

Tuyệt quá! Và bây giờ nếu chúng ta có một chuỗi, chẳng hạn như Jabba, làm cách nào để kiểm tra xem tên đó có trong danh sách hay không?

"Jabba" in names # False 

Bây giờ chúng tôi muốn in một thông báo nhỏ đặc biệt nếu và chỉ khi tên người dùng đã nhập xuất hiện trong danh sách của chúng tôi. Chúng tôi có thể làm điều này với:

names = ["Skidy", "DorkStar", "Ashu", "Elf"] 
name = input("What is your name? ") 
if name in names:
     print("The Wide One has allowed you to come in.") 

Bây giờ, nếu tên của họ không xuất hiện trong danh sách tên thì sao? Chúng ta có thể sử dụng một mệnh đề khác.

names = ["Skidy", "DorkStar", "Ashu", "Elf"] 
name = input("What is your name? ") 
if name in names:     
    print("The Wise One has allowed you to come in.") 
else:     
    print("The Wise One has not allowed you to come in.")

 

🎁Một dòng về dùng mệnh đề If 

Chúng ta cũng có thể xây dựng một câu lệnh if khá độc đáo trong Python.

age = 12 name = "Jabba" if age == 12 else "Skidy" print(name) # 'Jabba' 

❄️ Loops

Các vòng lặp cho phép chúng tôi thực hiện lặp đi lặp lại cùng một đoạn mã. Đối với các vòng được mô tả tốt nhất về cách chúng được đọc:

names = ["Skidy", "DorkStar", "Ashu", "Elf"] 
for name in names:
     print(name)

Đối với mọi tên trong danh sách tên, hãy làm điều gì đó (trong trường hợp này - in tên).

Vòng lặp for có thể lặp qua các phần tử của bất kỳ vòng lặp nào có thể lặp lại. Hãy xem xét một hàm trả về một phạm vi, có thể lặp lại.

Phạm vi trả về một danh sách các số trong một phạm vi. Vì vậy, để lặp từ 1 đến 9, chúng ta sẽ làm như sau:

range(1, 9)

Phạm vi được bao gồm, do đó, 1 và 9 được bao gồm. Bây giờ lặp lại điều này:for i in range(1, 9): print(i) 

Lưu ý: Chúng tôi thường sử dụng i làm biến trong vòng lặp for vì nó là viết tắt của "item".

☃️ Thư viện

Bạn đã thấy cách tự viết mã, nhưng nếu chúng ta muốn sử dụng mã của những người khác thì sao? Điều này được gọi là sử dụng thư viện trong đó thư viện có nghĩa là một loạt mã của người khác. Chúng ta có thể cài đặt các thư viện trên dòng lệnh bằng lệnh: pip install XTrong đó X là thư viện mà chúng tôi muốn cài đặt. Điều này cài đặt thư viện từ PyPi, một cơ sở dữ liệu của các thư viện. Hãy cài đặt 2 thư viện phổ biến mà chúng ta cần:

  • Requests
  • Beautiful Soup

pip3 install requests beautifulsoup4 

Một điều rất thú vị mà bạn có thể làm với 2 thư viện này là khả năng trích xuất tất cả các liên kết trên một trang web.

# Import the libraries we downloaded earlier
# if you try importing without installing them, this step will fail
from bs4 import BeautifulSoup
import requests 

# replace testurl.com with the url you want to use.
# requests.get downloads the webpage and stores it as a variable
html = requests.get('testurl.com') 

# this parses the webpage into something that beautifulsoup can read over
soup = BeautifulSoup(html, "lxml")
# lxml is just the parser for reading the html 

# this is the line that grabs all the links # stores all the links in the links variable
links = soup.find_all('a href') 
for link in links:      
    # prints each link    
    print(link)

Đây là một giới thiệu rất ngắn về Python, nhưng đây là một số liên kết khác nếu bạn muốn tìm hiểu thêm:


Mã để phân tích cho Câu hỏi 5:

x = [1, 2, 3]

y = x

y.append(6)

print(x)

Answer the questions below

What's the output of True + True?

What's the database for installing other peoples libraries called?

What is the output of bool("False")?

What library lets us download the HTML of a webpage?

What is the output of the program provided in "Code to analyse for Question 5" in today's material?

(This code is located above the Christmas banner and below the links in the main body of this task)

What causes the previous task to output that?

Post a Comment

0 Comments