update,
This commit is contained in:
BIN
ttng1234/quotation/Assignment 2.docx
Normal file
BIN
ttng1234/quotation/Assignment 2.docx
Normal file
Binary file not shown.
BIN
ttng1234/quotation/_img/table1.png
(Stored with Git LFS)
Normal file
BIN
ttng1234/quotation/_img/table1.png
(Stored with Git LFS)
Normal file
Binary file not shown.
BIN
ttng1234/quotation/_img/table2.png
(Stored with Git LFS)
Normal file
BIN
ttng1234/quotation/_img/table2.png
(Stored with Git LFS)
Normal file
Binary file not shown.
10
ttng1234/quotation/part_x.py
Normal file
10
ttng1234/quotation/part_x.py
Normal file
@@ -0,0 +1,10 @@
|
||||
from pprint import pprint
|
||||
|
||||
print("please enter number of your choice:")
|
||||
user_entry = eval(input())
|
||||
# [user_entry] = [1,2,3,4,5,6]
|
||||
print('Number of your entry: ', user_entry)
|
||||
pprint(user_entry[0])
|
||||
pprint(user_entry[1])
|
||||
pprint(user_entry[2])
|
||||
pprint(user_entry[3])
|
109
ttng1234/quotation/question.md
Normal file
109
ttng1234/quotation/question.md
Normal file
@@ -0,0 +1,109 @@
|
||||
# ASSIGNMENT 2
|
||||
|
||||
## Q1. 25%, Mark Six Simulation
|
||||
|
||||
Mark Six introduction
|
||||
The Mark Six Lottery is a 6 out of 49 lotto game which is conducted by HKJC Lotteries Limited, a subsidiary of The Hong Kong Jockey Club.
|
||||
|
||||
After each draw if your entry satisfies some situations, the prize will be paid.
|
||||
Mark Six Prize Qualification
|
||||
|
||||
https://bet.hkjc.com/marksix/userinfo.aspx?lang=en&file=prize_entitlement.asp
|
||||
|
||||
| 1st Prize | Pick all the 6 Drawn Numbers | Prize is determined by the total number of winning unit investments in the First Division Prize. The minimum First Division Prize Fund is set at HK$8 million |
|
||||
| --------- | ------------------------------------------ | ------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
||||
| 2nd Prize | Pick 5 Drawn Numbers plus the Extra Number | Prize is determined by the total number of winning unit investments in the Second Division Prize |
|
||||
| 3rd Prize | Pick 5 Drawn Numbers | Prize is determined by the total number of winning unit investments in the Third Division Prize |
|
||||
| 4th Prize | Pick 4 Drawn Numbers plus the Extra Number | A fixed prize of $9,600 |
|
||||
| 5th Prize | Pick 4 Drawn Numbers | A fixed prize of $640 |
|
||||
| 6th Prize | Pick 3 Drawn Numbers plus the Extra Number | A fixed prize of $320 |
|
||||
| 7th Prize | Pick 3 Drawn Numbers | A fixed prize of $40 |
|
||||
|
||||
### For simplify the question, the prizes are assumed as following:
|
||||
|
||||

|
||||

|
||||
|
||||
Task to do
|
||||
a. Write a function for inputting the list of your entry numbers, and the tuple with list of the draw numbers and the special number,
|
||||
then outputting the unit prize.
|
||||
|
||||
Example:
|
||||
|
||||
```
|
||||
Numbers of your entry: [14, 21, 25, 34, 37, 41]
|
||||
Numbers of draw: ([21, 25, 34, 37, 41, 46], 14)
|
||||
Unit prize of your entry: 885990 (2nd prize)
|
||||
```
|
||||
|
||||
Please check in the function: ensure the input formats are as same as the example.
|
||||
|
||||
1. `np.random.choice`
|
||||
1. `np.arange`
|
||||
1. `np.random.seed(21800000)`
|
||||
|
||||
####
|
||||
|
||||
#####
|
||||
|
||||
######
|
||||
|
||||
#
|
||||
|
||||
##
|
||||
|
||||
###
|
||||
|
||||
####
|
||||
|
||||
#####
|
||||
|
||||
######
|
||||
|
||||
#
|
||||
|
||||
##
|
||||
|
||||
###
|
||||
|
||||
####
|
||||
|
||||
#####
|
||||
|
||||
######
|
||||
|
||||
#
|
||||
|
||||
##
|
||||
|
||||
###
|
||||
|
||||
####
|
||||
|
||||
#####
|
||||
|
||||
######
|
||||
|
||||
#
|
||||
|
||||
##
|
||||
|
||||
###
|
||||
|
||||
####
|
||||
|
||||
#####
|
||||
|
||||
######
|
||||
|
||||
#
|
||||
|
||||
##
|
||||
|
||||
###
|
||||
|
||||
####
|
||||
|
||||
#####
|
||||
|
||||
######
|
140
ttng1234/quotation/src/index.py
Normal file
140
ttng1234/quotation/src/index.py
Normal file
@@ -0,0 +1,140 @@
|
||||
# NOTE: os and sys are library usually for troubleshooting purpose
|
||||
import os,sys
|
||||
import numpy as np
|
||||
|
||||
# NOTE: prepare prize table for lookup,
|
||||
prize_table = [
|
||||
['1st', 21531600],
|
||||
['2nd', 885990],
|
||||
['3rd', 157500],
|
||||
['4th', 9600],
|
||||
['5th', 640],
|
||||
['6th', 320],
|
||||
['7th', 40],
|
||||
]
|
||||
|
||||
def prize_matching(all_drawn_number, user_entry_nums):
|
||||
"""
|
||||
A function that calculates the prize based on matching numbers with user entries.
|
||||
Parameters:
|
||||
all_drawn_number (tuple): Tuple containing a list of drawn numbers and an extra number.
|
||||
user_entry_nums (list): List of user's chosen numbers.
|
||||
Returns:
|
||||
list: A list representing the prize won.
|
||||
"""
|
||||
# NOTE:
|
||||
prize = ['',0]
|
||||
[drawn_numbers, extra_number] = all_drawn_number
|
||||
|
||||
# NOTE: find number of match in drawn numbers with user entry numbers
|
||||
matched_number = 0
|
||||
for user_num in user_entry_nums:
|
||||
for drawn_number in drawn_numbers:
|
||||
if (drawn_number == user_num):
|
||||
matched_number = matched_number + 1
|
||||
break
|
||||
|
||||
# NOTE: find if any extra number match user entry number
|
||||
matched_extra_number = 0
|
||||
for user_num in user_entry_nums:
|
||||
if (user_num == extra_number):
|
||||
matched_extra_number = matched_extra_number + 1
|
||||
break
|
||||
|
||||
if (matched_number == 6):
|
||||
# first_prize = True
|
||||
prize = prize_table[0]
|
||||
elif (matched_number == 5 and matched_extra_number == 1):
|
||||
# second_prize = True
|
||||
prize = prize_table[1]
|
||||
elif (matched_number == 5):
|
||||
# third_prize = True
|
||||
prize = prize_table[2]
|
||||
elif (matched_number == 4 and matched_extra_number == 1):
|
||||
# forth_prize = True
|
||||
prize = prize_table[3]
|
||||
elif (matched_number == 4):
|
||||
# fifth_prize = True
|
||||
prize = prize_table[4]
|
||||
elif (matched_number == 3 and matched_extra_number == 1):
|
||||
# sixth_prize = True
|
||||
prize = prize_table[5]
|
||||
elif (matched_number == 3):
|
||||
# seventh_prize = True
|
||||
prize = prize_table[6]
|
||||
else:
|
||||
# no prize matched
|
||||
pass
|
||||
return prize
|
||||
|
||||
def print_output(prize_result, user_entry_nums):
|
||||
# deliver prize message
|
||||
print("Numbers of your entry: ", user_entry_nums)
|
||||
print('')
|
||||
print('Result :')
|
||||
if (prize_result[1] > 0):
|
||||
print("Output prize = " + str(prize_result[0]) + " = $" + str(prize_result[1]))
|
||||
else:
|
||||
print("No prize given")
|
||||
pass
|
||||
|
||||
|
||||
keep_asking = True
|
||||
while keep_asking:
|
||||
# part a
|
||||
user_entry_numbers = input("Please entry 6 numbers of your choice:")
|
||||
user_entry_numbers = eval(user_entry_numbers)
|
||||
|
||||
# NOTE: check if number of user entered is not equal to 6
|
||||
len_equal_to_six = False
|
||||
if (len(user_entry_numbers) != 6):
|
||||
print('user entered numbers should be exactly 6')
|
||||
print('Please input the correct number.')
|
||||
print()
|
||||
else:
|
||||
len_equal_to_six = True
|
||||
|
||||
# NOTE: check if each number within range
|
||||
numbers_are_in_range = True
|
||||
for user_num in user_entry_numbers:
|
||||
if (user_num < 1 or user_num > 49):
|
||||
print('user entered number should be within 1 to 49')
|
||||
print('Please input the correct number.')
|
||||
print()
|
||||
numbers_are_in_range = False
|
||||
break
|
||||
|
||||
if (len_equal_to_six == True and numbers_are_in_range == True):
|
||||
keep_asking = False
|
||||
|
||||
# part b
|
||||
# drawn 7 numbers
|
||||
# init seed randomizer
|
||||
np.random.seed(21800000)
|
||||
|
||||
# init empty slot for number
|
||||
temp_numbers = np.arange(0, 7, 1, dtype=int)
|
||||
|
||||
# [1,2,3,4,5,6,7]
|
||||
temp_numbers = np.random.choice(range(1,49), 7)
|
||||
|
||||
# the first 6 number are considered drawn number
|
||||
# [1,2,3,4,5,6]
|
||||
drawn_nums = temp_numbers[0:6].tolist()
|
||||
|
||||
# the last one considered extra number
|
||||
# 7
|
||||
extra_num = temp_numbers[6]
|
||||
|
||||
# re-format number to duple
|
||||
# ([1,2,3,4,5,6],7)
|
||||
all_drawn_nums = (drawn_nums, extra_num)
|
||||
|
||||
# part a
|
||||
print("all drawn numbers: ", all_drawn_nums)
|
||||
print("drawn numbers: " , drawn_nums)
|
||||
print("extra number: " , extra_num)
|
||||
|
||||
# part a
|
||||
result = prize_matching(all_drawn_nums, user_entry_numbers)
|
||||
print_output(result, user_entry_numbers)
|
188
ttng1234/quotation/src/part_a.py
Normal file
188
ttng1234/quotation/src/part_a.py
Normal file
@@ -0,0 +1,188 @@
|
||||
import os,sys
|
||||
import numpy as np
|
||||
|
||||
prize_table = [
|
||||
['1st', 21531600],
|
||||
['2nd', 885990],
|
||||
['3rd', 157500],
|
||||
['4th', 9600],
|
||||
['5th', 640],
|
||||
['6th', 320],
|
||||
['7th', 40],
|
||||
]
|
||||
|
||||
def prize_matching(all_drawn_number, user_entry_nums):
|
||||
# initialize to default output
|
||||
prize = ['',0]
|
||||
|
||||
# all_drawn_number = ([1,2,3,4,...],7)
|
||||
[drawn_numbers, extra_number] = all_drawn_number
|
||||
# drawn_numbers = [1,2,3,4,...]
|
||||
# extra_number = 7
|
||||
|
||||
# match drawn number
|
||||
matched_number = 0
|
||||
# user_entry_nums = [1,2,3,4,5,6]
|
||||
for u_num in user_entry_nums:
|
||||
# 1st loop u_num = 1
|
||||
# 2nd loop u_num = 2
|
||||
|
||||
# drawn_numbers = [1,2,3,4,5,6]
|
||||
for drawn_number in drawn_numbers:
|
||||
# 1st loop drawn_number = 1
|
||||
# 2nd loop drawn_number = 2
|
||||
|
||||
if (drawn_number == u_num):
|
||||
matched_number = matched_number + 1
|
||||
break
|
||||
|
||||
|
||||
matched_extra_number = 0
|
||||
# user_entry_nums = [1,2,3,4,5,6]
|
||||
for user_num in user_entry_nums:
|
||||
# 1st loop user_num = 1
|
||||
# 2nd loop user_num = 2
|
||||
if (user_num == extra_number):
|
||||
matched_extra_number = matched_extra_number + 1
|
||||
break
|
||||
|
||||
# matched_number = n
|
||||
# matched_extra_number = n
|
||||
|
||||
# refer to HKJC https://bet.hkjc.com/marksix/userinfo.aspx?lang=en&file=prize_entitlement.asp
|
||||
if (matched_number == 6):
|
||||
# first_prize = True
|
||||
prize = prize_table[0]
|
||||
# prize = ['1st', 21531600]
|
||||
elif (matched_number == 5 and matched_extra_number == 1):
|
||||
# second_prize = True
|
||||
prize = prize_table[1]
|
||||
# prize = ['2nd', nnnnn]
|
||||
elif (matched_number == 5):
|
||||
# third_prize = True
|
||||
prize = prize_table[2]
|
||||
elif (matched_number == 4 and matched_extra_number == 1):
|
||||
# forth_prize = True
|
||||
prize = prize_table[3]
|
||||
elif (matched_number == 4):
|
||||
# fifth_prize = True
|
||||
prize = prize_table[4]
|
||||
elif (matched_number == 3 and matched_extra_number == 1):
|
||||
# sixth_prize = True
|
||||
prize = prize_table[5]
|
||||
elif (matched_number == 3):
|
||||
# seventh_prize = True
|
||||
prize = prize_table[6]
|
||||
else:
|
||||
pass
|
||||
return prize
|
||||
|
||||
def print_output(prize_result, user_entry_nums):
|
||||
# prize_result = ['1st', 21531600]
|
||||
# user_entry_nums = [1,2,3,4,5,6]
|
||||
print("Numbers of your entry: ", user_entry_nums)
|
||||
|
||||
# str(prize_result[0]) = '1st'
|
||||
# str(prize_result[1]) = '21531600'
|
||||
print("Output prize = " + str(prize_result[0]) + " = $" + str(prize_result[1]))
|
||||
pass
|
||||
|
||||
# number of entry
|
||||
# Numbers of your entry: [14, 21, 25, 34, 37, 41]
|
||||
# ask user for numbers
|
||||
print("please enter number of your choice:")
|
||||
user_entry = eval(input())
|
||||
# [user_entry] = [1,2,3,4,5,6]
|
||||
print('Number of your entry: ', user_entry)
|
||||
# user_entry[0]
|
||||
# user_entry[1]
|
||||
# user_entry[2]
|
||||
# user_entry[3]
|
||||
|
||||
# NOTE: check if number of user entered is not equal to 6
|
||||
if (len(user_entry) != 6):
|
||||
print('user entered numbers should be exactly 6')
|
||||
print('quitting ... ')
|
||||
sys.exit()
|
||||
|
||||
# NOTE: check if each number within range
|
||||
for user_num in user_entry:
|
||||
if (user_num < 1 or user_num > 49):
|
||||
print('user entered number should be within 1 to 49')
|
||||
print('quitting ... ')
|
||||
sys.exit()
|
||||
|
||||
# Number of draw
|
||||
# Numbers of draw: ([21, 25, 34, 37, 41, 46], 14)
|
||||
|
||||
# init seed randomizer
|
||||
np.random.seed(21800000)
|
||||
|
||||
# init empty slot for number
|
||||
temp_numbers = np.arange(0, 7, 1, dtype=int)
|
||||
|
||||
# drawn 7 numbers
|
||||
# [1,2,3,4,5,6,7]
|
||||
temp_numbers = np.random.choice(range(1,49), 7)
|
||||
|
||||
# the first 6 number are considered drawn number
|
||||
# [1,2,3,4,5,6]
|
||||
drawn_nums = temp_numbers[0:6].tolist()
|
||||
|
||||
# the last one considered extra number
|
||||
# 7
|
||||
extra_num = temp_numbers[6]
|
||||
|
||||
# re-format number to tuple
|
||||
# ([1,2,3,4,5,6],7)
|
||||
all_drawn_nums = (drawn_nums, extra_num)
|
||||
print(all_drawn_nums)
|
||||
|
||||
# (1,2) <- duple
|
||||
# a = (1,2)
|
||||
# print(a[0]) => 1
|
||||
# print(a[1]) => 2
|
||||
|
||||
# ("A","B","C")
|
||||
# (1,2,3) <- tuple
|
||||
# print(a[0]) => 1
|
||||
# print(a[1]) => 2
|
||||
# print(a[2]) => 3
|
||||
|
||||
# ([1,2,3,4],5) <- tuple
|
||||
|
||||
# NOTE: test prize matching
|
||||
# 1st prize
|
||||
user_numbers = [1,2,3,4,5,6]
|
||||
result = prize_matching(([1,2,3,4,5,6],7), user_numbers)
|
||||
print_output(result, user_numbers)
|
||||
|
||||
# 2
|
||||
user_numbers = [1,2,7,4,5,6]
|
||||
result = prize_matching(([1,2,3,4,5,6],7), user_numbers)
|
||||
print_output(result, user_numbers)
|
||||
|
||||
# 3
|
||||
user_numbers = [1,9,2,3,4,5]
|
||||
result = prize_matching(([1,2,3,4,5,6],7), user_numbers)
|
||||
print_output(result, user_numbers)
|
||||
|
||||
# 4
|
||||
user_numbers = [1,9,7,3,4,5]
|
||||
result = prize_matching(([1,2,3,4,5,6],7), user_numbers)
|
||||
print_output(result, user_numbers)
|
||||
|
||||
# 5
|
||||
user_numbers = [10,9,1,3,4,5]
|
||||
result = prize_matching(([1,2,3,4,5,6],7), user_numbers)
|
||||
print_output(result, user_numbers)
|
||||
|
||||
# 6
|
||||
user_numbers = [1,9,44,7,4,5]
|
||||
result = prize_matching(([1,2,3,4,5,6],7), user_numbers)
|
||||
print_output(result, user_numbers)
|
||||
|
||||
# 7
|
||||
user_numbers = [1,9,44,45,4,5]
|
||||
result = prize_matching(([1,2,3,4,5,6],7), user_numbers)
|
||||
print_output(result, user_numbers)
|
9
ttng1234/quotation/src/part_b.py
Normal file
9
ttng1234/quotation/src/part_b.py
Normal file
@@ -0,0 +1,9 @@
|
||||
import numpy as np
|
||||
|
||||
all_drawn_nums = np.random.choice(range(1,49), 7)
|
||||
drawn_nums = all_drawn_nums[0:6]
|
||||
extra_num = all_drawn_nums[6]
|
||||
|
||||
print("all drawn numbers: ", all_drawn_nums)
|
||||
print("drawn numbers: " , drawn_nums)
|
||||
print("extra number: " , extra_num)
|
Reference in New Issue
Block a user