Bài tập 1

Cơ sở lập trình

Dành cho Chuyên ngành Thương mại điện tử - Ngành Kinh doanh Thương mại


Cập nhật ngày 26 tháng 02 năm 2018

Hạn cuối nộp bài: 15h thứ bảy, ngày 17 tháng 03 năm 2018
Đọc kỹ Hướng dẫn làm và nộp bài tập trước khi làm bài

Trong bài tập này, bạn sẽ bắt đầu sử dụng các thành phần cơ bản của Python. Các thành phần cơ bản của một chương trình bao gồm khả năng in kết quả ra màn hình (sử dụng hàm print), khả năng đọc dữ liệu được nhập vào (sử dụng hàm input), và khả năng lưu trữ các giá trị trong một biến để chương trình có thể truy xuất giá trị khi cần. Ngoài ra, bạn sẽ luyện tập viết các chương trình sử dụng các luồng điều khiển, cũng như các cách thức xử lý với chuỗi ký tự.

Hãy đọc phần 1, 2, và 3 trong Hướng dẫn lập trình trước khi làm bài.

Câu A - Một chương trình đơn giản

Viết chương trình thực hiện các bước sau:
  1. Yêu cầu người dùng nhập một số "x"
  2. Yêu cầu người dùng nhập một số "y"
  3. In ra kết quả phép toán x mũ y
  4. In ra kết quả phép toán log cơ số 2 của x
Hướng dẫn
  1. Để xem cách sử dụng hàm print, bạn có thể xem phần nhậpxuất của Python Wikibook. Các phần này sẽ hướng dẫn cách sử dụng câu lệnh print để in giá trị các biến. Hai phần này cũng cung cấp hướng dẫn cách lấy dữ liệu nhập vào bởi người dùng trong Python (xem hàm input()).
  2. Xem phần Cơ bản về toán học trong Python Wikibook để biết cách sử dụng các phép toán cơ bản trong Python.
  3. Để tính log của một biến, bạn có thể import gói numpy. Sau đó, bạn có thể gọi numpy.log2 để tính log. Hãy xem các ví dụ về Numpy tại http://scipy.github.io/old-wiki/pages/Numpy_Example_List.
  4. Hãy đọc phần Biến và chuỗi ký tự trên Python Wikibook để biết cách lưu trữ dữ liệu sử dụng các biến. Hãy đọc mục Kết hợp các số và chuỗi để có thể làm việc với số và chuỗi trong bài tập.

Câu B - Săn nhà

Giả sử bạn đã tốt nghiệp và có một công việc tốt tại TP Hồ Chí Minh. Bạn quyết định bắt đầu dành dụm để mua một căn nhà. Giá nhà ở TP Hồ Chí Minh rất cao, bạn phải dành dụm vài năm mới có thể đủ số tiền trả trước (down payment). Trong bài này, bạn sẽ viết chương trình để tính số tháng cần thiết để có thể dành dụm đủ tiền trả trước dựa trên các giả thiết sau:
  1. Gọi giá nhà là biến total_cost
  2. Gọi phần trăm giá nhà phải trả trước là portion_down_payment. Ví dụ, portion_down_payment = 0.25 (25%)
  3. Gọi số tiền bạn đã dành dụm được là current_savings. Bạn sẽ bắt đầu với 0$.
  4. Giả sử bạn đầu tư với lãi suất năm là r (tức là, cuối mỗi tháng, bạn nhận một khoảng tiền lãi là current_savings*r/12 để nhập vào khoảng đầu tư - giá trị 12 là do r là lãi suất năm). Giả sử khoảng đầu tư của bạn có lãi suất là r = 0.04 (4%).
  5. Giả sử thu nhập hàng năm của bạn là annual_salary
  6. Giả sử bạn trích từ thu nhập hàng tháng ra một khoảng để tiết kiệm cho khoảng tiền trả trước trên. Gọi là portion_saved. (Ví dụ: portion_saved = 0.1 nếu là 10%)
  7. Cuối mỗi tháng, khoảng tiết kiệm của bạn sẽ được tăng lên bằng khoảng lãi hàng tháng nhận được cộng với khoảng tiền nộp thêm trích từ lương tháng (annual_salary / 12).
Hãy viết chương trình tính cần bao nhiêu tháng để dành dụm đủ số tiền trả trước. Các biến trên sẽ lưu các số thực, do đó, bạn nên ép kiểu sang float cho các dữ liệu người dùng nhập vào.

Chương trình nên yêu cầu người dùng nhập vào các biến sau:
  1. Thu nhập hàng năm ban đầu (annual_salary)
  2. Phần trăm thu nhập được dành cho tiết kiệm (portion_saved)
  3. Giá nhà (total_cost)
Hướng dẫn
Dưới đây là một số bước, bạn nên theo khi viết chương trình:
  • Lấy dữ liệu từ người dùng. Trong bài này, giả sử rằng người dùng luôn nhập giá trị đúng.
  • Khởi tạo các biến cần thiết. Bạn nên quyết định thông tin nào bạn cần. Hãy phân biệt rõ giá trị nào thể hiện cho các đại lượng theo năm và cái nào là đại lượng theo tháng.
Hãy kiểm tra chương trình với các đầu vào khác nhau và đảm bảo chương trình in kết quả ra như các test dưới đây.

Test Case 1
>>>
Enter your annual salary: 120000
Enter the percent of your salary to save, as a decimal: .10
Enter the cost of your dream home: 1000000
Number of months: 183
>>>

Test Case 2
>>>
Enter your annual salary: 80000
Enter the percent of your salary to save, as a decimal: .15
Enter the cost of your dream home: 500000
Number of months: 105
>>>

Câu C - Tiết kiệm, với luỹ thừa

Trong Câu B, chúng ta đã giả sử một cách phi thực tế rằng lương là không đổi. Cho nên, trong câu này, chúng ta sẽ xây dựng giải pháp mới có xem xét đến việc tăng lương mỗi 6 tháng.

Bạn hãy sao chép mã nguồn từ Câu B, sửa đổi chương trình như sau:
  1. Yêu cầu người dùng nhập vào lương tăng thêm mỗi nữa năm semi_annual_raise (một số phần trăm)
  2. Sau tháng thứ sáu, tăng lương lên theo phần trăm trên. Làm tương tự sau tháng thứ 12, tháng thứ 18,...
Hãy viết chương trình tính số tháng cần thiết để tiết kiệm đủ tiền. Giống như câu trên, giả sử rằng lãi suất r = 0.04 (4%) và phần trăm tiền trả trước là 0.25 (25%). Người dùng phải nhập những thông tin sau:
  1. Lương hàng năm ban đầu (annual_salary)
  2. Phần trăm lương được dùng để tiết kiệm (portion_saved)
  3. Giá nhà (total_cost)
  4. Mức tăng lương mỗi sáu tháng (semi_annual_raise)
Hướng dẫn
Các bước bạn nên theo khi viết chương trình:
  • Lấy dữ liệu người dùng nhập vào
  • Khởi tạo các biến cần thiết
  • Đảm bảo rằng khi bạn tăng lương, thì điều này diễn ra sau các tháng thứ 6, 12, 18,...
Hãy kiểm tra chương trình với các đầu vào khác nhau và đảm bảo chương trình in kết quả ra như các test dưới đây.

Test Case 1
>>>
Enter your annual salary: 120000
Enter the percent of your salary to save, as a decimal: .05
Enter the cost of your dream home: 500000
Enter the semi-annual raise, as a decimal: .03
Number of months: 142
>>>

Test Case 2
>>>
Enter your annual salary: 80000
Enter the percent of your salary to save, as a decimal: .1
Enter the cost of your dream home: 800000
Enter the semi-annual raise, as a decimal: .03
Number of months: 159
>>>

Test Case 3
>>>
Enter your annual salary: 75000
Enter the percent of your salary to save, as a decimal: .05
Enter the cost of your dream home: 1500000
Enter the semi-annual raise, as a decimal: .05
Number of months: 261
>>>

Câu D - Problem Set 1 trên edX

Làm 3 bài trong Problem Set 1 của khoá học 6.00.1x Introduction to Computer Science and Programming Using Python