代写COMP 202 - Foundations of Programming Assignment 4 Fall 2024代做Python语言

COMP 202 - Foundations of Programming

Assignment 4

Fall 2024

Important notice

You will need to write three files for this assignment.  Make sure that all file names and method names are spelled exactly as described in this document. Otherwise, a 50% penalty per question will be applied.  You may make as many submissions as you like prior to the deadline,  but we will only grade your final submission  (all  prior ones  are automatically deleted). The following instructions are important:

•  Please read the entire assignment guidelines and this PDF before starting. You must do this assignment individually.

•  The work  submitted  for this  assessment  is  expected  to be your own.   The  use  of technologies such as ChatGPT is prohibited and will be considered a violation of the Code of Student Conduct.

 Do not use functions that we didnt mention in class.

 Do not use break and continue statements.

•  Make sure to follow all the programming standards and to add docstrings with three examples for each method in the assignment (you may use only one example from this

document and you should think of another two examples of your own). The main learning objectives for this assignment are:

•  Object-oriented programming:  Defining classes, creating objects, and applying meth- ods to them;

•  Nested lists;

 Dictionaries;

 Files: Working with files through Python built-in functions;

Figure 1: The file qrcode binary.txt opened in a text editor.

QR Code

A QR code (short for Quick Response Code) is a two-dimensional barcode that can store information, which can be quickly accessed by scanning it with a device like a smartphone, tablet, or dedicated QR code reader. Unlike traditional barcodes, which store data in a lin- ear fashion, QR codes use both horizontal and vertical dimensions to encode data, allowing them to hold much more information.

A QR code consists of black and white squares arranged in a grid.  The black squares rep- resent the binary ”1” and the white squares represent the binary ”0” .  The information is encoded in a format that is easily readable by devices with cameras.

In this assignment, binary representations of QR codes are stored in Txt files1.  We will first implement some helper functions.  Then we will create a TxtData class, which represents the data stored in the Txt files. Fianlly, we will implement a QR code class that represents a QR code (the data itself + other information and functionalities).

Figure 2: The file small data.txt opened in a text editor.

1    Question  1: Helper functions [25 points]

Define two functions and write your functions in a file called helper. py:

1.1    convert date  [10 points]

A function that takes in an input date   str (string) and returns a dictionary with ”Day”, ”Month”, and Year” as keys and strings as values.  The input date   str should have the for- mat ”dd/mm/yyyy” (2 digits/2 digits/4 digits) and this function should convert the string to the desired dictionary.

In your code, check that the input string has the right format.   More specifically,  check that it can be split into three parts by the ”/” character and that each part has the right length.  You can assume that the input string has the correct format if it meets these re- quirements. Raise a ValueError if any of these requirements are not met.

>>> convert_date("09/01/2024") {’Day’: ’09’, ’Month’: ’01’, ’Year’: ’2024’} >>> convert_date("00/00") Traceback (most recent call last): ValueError: Input format incorrect! >>> convert_date("9/1/2024") Traceback (most recent call last): ValueError: Input format incorrect!

1.2    get data [15 points]

A function that takes one input file path  (string) and returns a nested list of integers representing the data in the file.  The method should read the file located at file path. You can assume that the file exists.

The file should only contain ”0”s and ”1”s. Otherwise, raise a ValueError.

See below for an example. You can find the files small data and small data error can be found in figure 2 and 3.

Figure 3: The file small data error.txt opened in a text editor.

>>> get_data("small_data.txt") [[0, 1], [1, 0]] >>> get_data("small_data_error.txt") Traceback (most recent call last): ValueError: File should contain only 0s and 1s!

2    Question 2:  Class TxtData  [45 points]

Define a class TxtData that has three instance attributes:

 data: a nested list of integer representing the data;

 rows: an integer indicating the number of rows in data;

•  cols: an integer indicating the number of columns in data;

Include the following instance methods and write your class in a file called txtdata. py. This file should import the helper. py file that you created in Question 1.

2.1       init    [5 points]

A constructor that takes in data (2-D nested list) as explicit input.  Make sure to make a deep copy of the input list with the help of the deepcopy function in the copy module.  The data attribute should be initialized using the data input.  The rows and cols attributes represent the number of rows and columns of data. You can assume that the input list has at least one row and one column, and that all nested lists (if there are more than one) have the same length.

Figure 1 shows you how qrcode binary.txt looks like.

>>> my_list_simple= [[1,2,3],[4,5,6]] >>> my_txt_simple = TxtData(my_list_simple) >>> my_txt_simple.rows 2 >>> my_txt_simple.cols 3 >>> my_list = get_data("qrcode_binary.txt") >>> my_txt = TxtData(my_list) >>> my_txt.rows 33 >>> my_txt.cols 33

2.2       str    [5 points]

   str    method that returns a string of the format ”This TxtData object has ROWS rows and COLS columns.” where ROWS and COLS refer to the appropriate instance attributes.

>>> my_list_simple = [[1,2,3],[4,5,6]] >>> my_txt_simple = TxtData(my_list_simple) >>> print(my_list_simple) This TxtData object has 2 rows and 3 columns. >>> my_list = get_data("qrcode_binary.txt") >>> my_txt = TxtData(my_list) >>> print(my_txt) This TxtData object has 33 rows and 33 columns.

2.3    get pixels [5 points]

An instance method that takes in no explicit input and returns an integer indicating the total number of pixels in data - number of rows  × number of columns.

>>> my_list_simple = [[1,2,3],[4,5,6]] >>> my_txt_simple = TxtData(my_list_simple) >>> my_txt_simple.get_pixels() 6 >>> my_list = get_data("qrcode_binary.txt") >>> my_txt = TxtData(my_list) >>> my_txt.get_pixels() 1089

2.4    get data at [5 points]

An instance method that takes in two explicit inputs row (integer) and col (integer) indi- cating the position and returns an integer indicating the value in data at that position.

A ValueError should be raised if row or col is out of bound.

>>> my_list_simple = [[1,2,3],[4,5,6]] >>> my_txt_simple = TxtData(my_list_simple) >>> my_txt_simple.get_data_at(0,0) 1
>>> my_txt_simple.get_data_at(3,0) Traceback (most recent call last): ValueError: Index out of bound! >>> my_list = get_data("qrcode_binary.txt") >>> my_txt = TxtData(my_list) >>> my_txt.get_data_at(0,0) 0 >>> my_txt.get_data_at(6,8) 1

2.5    pretty   save [10 points]

An instance method that takes one explicit input file name (string) and returns nothing. It converts the data to a prettier form so that it can be scanned by our cameras as a QR code.

”1”s are changed into ” (two blocks) and ”0”s and changed into ” ” (two spaces).  It then saves the prettier QR code into a new file named file name. You can assume that there is no file with the name file name that exists beforehand.

The block character has the Unicode U+2588.  To get the character in Python, you can use either ”\u2588” or chr(0x2588).  See figure 4 for an example of a file saved from this method.

Note: do not use the replace() method.

>>> my_list = get_data("qrcode_binary.txt") >>> my_txt = TxtData(my_list) >>> my_txt.pretty_save("qrcode_pretty.txt")

2.6    equals [5 points]

An instance method that takes in one explicit input another data (TxtData) and returns a boolean indicating if the two TxtData objects are equal.

Two TxtData objects are considered equal if the data attributes are the same.

In the example below, file qrcode binary   copy . txt is an exact copy of file qrcode binary . txt, while qrcode binary   1 . txt has exactly one different value than qrcode binary . txt.

>>> my_list_simple = [[1,2,3],[4,5,6]] >>> my_txt_simple_1 = TxtData(my_list_simple) >>> my_txt_simple_2 = TxtData(my_list_simple) >>> my_txt_simple_1.equals(my_txt_simple_2) True >>> my_txt = TxtData("qrcode_binary.txt") >>> my_list = get_data("qrcode_binary.txt") >>> my_txt = TxtData(my_list) >>> my_txt_copy = TxtData("qrcode_binary_copy.txt")


Figure 4: The file saved from pretty   save method opened in a text editor.


>>> my_txt.equals(my_txt_copy) True >>> my_list_1 = get_data("qrcode_binary_1.txt") >>> my_txt_1 = TxtData(my_list_1) >>> my_txt.equals(my_txt_1) False


2.7    approximately equals [10 points]

An instance method that takes in two explicit inputs another data (TxtData) and precision (non-negative float) and returns a boolean indicating if the two TxtData objects are approx-  imately equal.

Two TxtData objects are considered approximately equal if the inconsistent rate of the two data attributes is not greater than the input precision. The inconsistent rate can be cal- culated by getting the number of inconsistent values and dividing that by the total number of values (number of pixels).

In the examples below, qrcode binary   1 . txt has exactly one different value than qrcode binary . txt and qrcode binary 2 . txt has two different values.


>>> my_list_simple_1 = [[1,2,3],[4,5,6]] >>> my_list_simple_2 = [[1,2,3],[7,8,9]] >>> my_txt_simple_1 = TxtData(my_list_simple_1) >>> my_txt_simple_2 = TxtData(my_list_simple_2) >>> my_txt_simple_1.equals(my_txt_simple_2)



False >>> my_txt_simple_1.approximately_equals(my_txt_simple_2, 0.5) True >>> my_txt = TxtData("qrcode_binary.txt") >>> my_txt_1 = TxtData("qrcode_binary_1.txt") >>> my_txt.equals(my_txt_1) False >>> my_txt.approximately_equals(my_txt_1, 1/my_txt.get_pixels()) True >>> my_txt_2 = TxtData("qrcode_binary_2.txt") >>> my_txt.approximately_equals(my_txt_2, 1/my_txt.get_pixels()) False







热门主题

课程名

mktg2509 csci 2600 38170 lng302 csse3010 phas3226 77938 arch1162 engn4536/engn6536 acx5903 comp151101 phl245 cse12 comp9312 stat3016/6016 phas0038 comp2140 6qqmb312 xjco3011 rest0005 ematm0051 5qqmn219 lubs5062m eee8155 cege0100 eap033 artd1109 mat246 etc3430 ecmm462 mis102 inft6800 ddes9903 comp6521 comp9517 comp3331/9331 comp4337 comp6008 comp9414 bu.231.790.81 man00150m csb352h math1041 eengm4100 isys1002 08 6057cem mktg3504 mthm036 mtrx1701 mth3241 eeee3086 cmp-7038b cmp-7000a ints4010 econ2151 infs5710 fins5516 fin3309 fins5510 gsoe9340 math2007 math2036 soee5010 mark3088 infs3605 elec9714 comp2271 ma214 comp2211 infs3604 600426 sit254 acct3091 bbt405 msin0116 com107/com113 mark5826 sit120 comp9021 eco2101 eeen40700 cs253 ece3114 ecmm447 chns3000 math377 itd102 comp9444 comp(2041|9044) econ0060 econ7230 mgt001371 ecs-323 cs6250 mgdi60012 mdia2012 comm221001 comm5000 ma1008 engl642 econ241 com333 math367 mis201 nbs-7041x meek16104 econ2003 comm1190 mbas902 comp-1027 dpst1091 comp7315 eppd1033 m06 ee3025 msci231 bb113/bbs1063 fc709 comp3425 comp9417 econ42915 cb9101 math1102e chme0017 fc307 mkt60104 5522usst litr1-uc6201.200 ee1102 cosc2803 math39512 omp9727 int2067/int5051 bsb151 mgt253 fc021 babs2202 mis2002s phya21 18-213 cege0012 mdia1002 math38032 mech5125 07 cisc102 mgx3110 cs240 11175 fin3020s eco3420 ictten622 comp9727 cpt111 de114102d mgm320h5s bafi1019 math21112 efim20036 mn-3503 fins5568 110.807 bcpm000028 info6030 bma0092 bcpm0054 math20212 ce335 cs365 cenv6141 ftec5580 math2010 ec3450 comm1170 ecmt1010 csci-ua.0480-003 econ12-200 ib3960 ectb60h3f cs247—assignment tk3163 ics3u ib3j80 comp20008 comp9334 eppd1063 acct2343 cct109 isys1055/3412 math350-real math2014 eec180 stat141b econ2101 msinm014/msing014/msing014b fit2004 comp643 bu1002 cm2030
联系我们
EMail: 99515681@qq.com
QQ: 99515681
留学生作业帮-留学生的知心伴侣!
工作时间:08:00-21:00
python代写
微信客服:codinghelp
站长地图