This commit is contained in:
louiscklaw
2025-01-31 20:12:48 +08:00
parent 30153eead3
commit 49e275d85d
29 changed files with 3080 additions and 0 deletions

Binary file not shown.

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

Binary file not shown.

View 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])

View 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:
![](./_img/table1.png)
![](./_img/table2.png)
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)`
####
#####
######
#
##
###
####
#####
######
#
##
###
####
#####
######
#
##
###
####
#####
######
#
##
###
####
#####
######
#
##
###
####
#####
######

View 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)

View 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)

View 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)