联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-23:00
  • 微信:codinghelp

您当前位置:首页 >> Python编程Python编程

日期:2024-03-02 10:24

CSE 231 Spring 2024

Computer Project 05

1. Assignment Overview (learning objectives)

In this assignment, you will practice with files, lists and error-handling using exceptions. You are only allowed

to use Lists and tuples. Any use of other advanced data structures (e.g., Dictionaries, Classes, etc.) will result in

a zero on the project.

2. Important Note about submission

3. Assignment Deliverable

The deliverable for this assignment is the following file:

proj05.py – the source code for your Python program

Be sure to use the specified file name and to submit it for grading via Codio before the project deadline.

4. Assignment Background

Yu-Gi-Oh! Trading Card Game which is based on the manga series of the

same name and anime spin-off series Yu-Gi-Oh! Duel Monsters both

created by Kazuki Takahashi and were released in 1996 and 2000. As the

moment of writing this project, this franchise is currently celebrating its 25th

anniversary. This franchise has developed thousands of iconic cards like:

Dark Magician, Blue-Eyes White Dragon, Elemental Hero Neos, Stardust

Dragon, and much more.

As beloved as this series is with its strategic focus on monster cards, spell,

and trap cards, it is not a hobby for everybody. Collecting some of these

cards can be expensive, especially when they are popular in the competitive

circuit. This project will read a dataset of these cards and show their prices

on the market and how much does it cost to build a deck of these cards when

bought in said market. The files used in this project were adapted from the

following sources:

1) Card data: https://www.kaggle.com/datasets/ioexception/yugioh-cards/code

2) Decklists: https://ygoprodeck.com/

This assignment is worth 50 points (5.0% of course grade), and must be completed before 11:59 PM

EST on Tuesday, March 5th.

After the due date, your score will be deducted by 10% for every 5 hours late or a fraction of it. No

submissions will be accepted after 24 hours from the due date. The penalty will be applied on the

full project score.

The project will be automatically submitted by the due date (03/05). If you want to keep working on it

after the deadline with penalty, you must manually click on “Mark as uncompleted”, acknowledge the

penalty message and manually click on “Mark as completed” when done.

CSE 231 Spring 2024

These files contain the following information of each card:

a) card_id (str): Unique card identifier

b) card_name (str): Card name

c) card_type (str): “Spell”, “Trap”, and various type of “Monster” cards

d) card_description (str): Card summoning requirements and or card effects

e) card_race (str): Card species. For example: “Spellcaster”, “Dragon”, or “Counter Trap”

f) card_archetype (str): Name of group of cards that support specific characters: “Dark

Magician”

g) card_price (float): TCG player price for the card in the second market.

5. Assignment Specifications

1. You must implement the following functions:

a) open_file (prompt_str) ----? file pointer

This function repeatedly prompts the user for a filename (using the prompt string: prompt_str) until

the file is opened successfully. An error message should be shown if the file cannot be opened (check

the starter code or the strings.txt file for the appropriate strings). It returns a file pointer.

Use try-except to determine if the file can be opened. When opening the file, you need to use

encoding=" utf-8".

fp = open(filename, "r", encoding = " utf-8")

b) read_card_data(fp) ----? List of tuples

This function is designed to parse a file containing the dataset of Yu-Gi-Oh trading cards. It takes a file

pointer object (fp) as its parameter, which is returned by the open_file function. The function

returns a list of tuples, where each tuple represents a card in the dataset.

Each tuple consists of the following columns: id, name (limited to the first 45 characters), type,

description, race, archetype, and the card's TCGPlayer price. To understand the dataset's format and

identify the column indices we are interested in, it is recommended to open the CSV files in Excel or

any text editor.

The price is converted to a float within the tuple. After assembling the list of tuples, it is sorted in

ascending order based on price first and then by name.

c) search_cards(card_data, query, category_index) ----? List of tuples

This function returns a list of cards that contain the provided query string in the given category index. It

takes as its parameters: card_data (a list of cards like the list returned by read_card_data

function), query (a string to search in a selected category), and category_index (the index of the

category to search in the CATEGORIES list provided in the starter code). The returned list should be

sorted in ascending order by price first and then by name.

For example:

query = "Dark Magician"

category_index = 1 # Name

result = [(xxxxx, "Dark Magician", ...), (xxxxx, "Dark Magician Girl", ...), ...]

CSE 231 Spring 2024

d) read_decklist(fp, card_data) ----? List of tuples

This function creates a list of cards present in the current deck list (a YDK file). It takes as its

parameters: a file pointer object (fp) to a YDK file and a card_data (a list of cards like the list

returned by read_card_data function). The YDK file contains the ID of cards in a deck where

each line in the file is a card ID. The function reads the IDs from the file and searches for all the cards

by their “id” column.

The returned list should be sorted in ascending order by price first and then by name.

e) compute_stats(card_data)? List_tuples,float,List_tuples,float,List_tuples,

float

This function takes as its parameter a card_data (a list of cards like the list returned by

read_card_data function). It finds the minimum price, maximum price, and median price for all

the cards in card_data. It also finds the list of cards that have the same value as the min, max, and

median. Then, it returns the list of cards with the min price, the minimum price, the list of cards with the

max price, the maximum price, the list of cards with the median price, and the median price.

All lists should be sorted by name.

f) display_data(card_data)

This function takes as its parameter a card_data (a list of cards like the list returned by

read_card_data function). It prints the contents of each card tuple in the card_data list. Then,

it prints the total price. The table should be formatted properly. There are 5 columns in the table. First, a

header line should be displayed:

i. the string 'Name': in a field width of 50

ii. the string 'Type': in a field width of 30

iii. the string 'Race': in a field width of 20

iv. the string 'Archetype': in a field width of 40

v. the string 'TCGPlayer': in a field width of 12

Then, the cards are displayed using the following formatting:

i. Name: in a field width of 50

ii. Type: in a field width of 30

iii. Race: in a field width of 20

iv. Archetype: in a field width of 40

v. Price: in a field width of 12 with precision 2 and the comma for the thousand

Finally, a line that shows the total price which is the sum of all the card prices should be displayed using

the following formatting:

i. the string 'Total': in a field width of 50

ii. an empty string '': in a field width of 30

iii. an empty string '': in a field width of 20

iv. an empty string '': in a field width of 40

v. Total: in a field width of 12 with precision 2 and the comma for the thousand

g) display_stats(min_cards, min_price, max_cards, max_price,

median_cards, median_price)

This function prints the output from compute_stats() function. First, the minimum price is

displayed with precision 2 and comma for the thousand. It is followed by all the card names that have a

price the same as the minimum price. The function will do the same for the maximum and median price

and data.

CSE 231 Spring 2024

h) main(): This function is the starting point of the program. The program prompts the user for an option

until the user decides to stop the program:

i. Prompt the card data filename (use the correct prompt from the starter code).

ii. Read the card data file and get the list of categories and the list of card tuples.

iii. Close the file.

iv. Prompt an option

v. Option 1 (Show all cards): This option shows details about each card in the dataset. It

will find and display the number of cards in the data set. Then, use

display_data()to show information of only the cheapest 50 cards in the dataset.

Then, find and print all the cards that have the maximum price, minimum price, and the

median price using the display_stats() function.

vi. Option 2 (Search for cards): Prompt for a query string pertaining to a specific column

in the card dataset. Re-prompt for category until the user enters a valid category (a

category that is in the CATEGORY list). You should convert the input category to

lowercase since the CATEGORY list items are all lowercase strings.

Get all cards that satisfy the provided query. Find the maximum, minimum, and median

values for all resulting cards in the search. If there are any cards that satisfies the query,

display the number of cards in the results, then output the card information and the results

like option 1. Otherwise, print that there are no cards in the category.

vii. Option 3 (Search decklist): Prompt for a decklist filename and build a list of cards that

have the same “card id” in the file. Show the card information; find the maximum,

minimum, and median prices and display them.

viii. Option 4: Stop the program.

ix. If the user does not enter any of these options, the program needs to display an error

message and prompt again until a valid option is selected.

6. Assignment Notes and Hints

1. The coding standard for CSE 231 is posted on the course website:

http://www.cse.msu.edu/~cse231/General/coding.standard.html

Items 1-9 of the Coding Standard will be enforced for this project.

2. The program will produce reasonable and readable output, with appropriate labels for all values

displayed.

3. Be sure to prompt the user for the inputs in the correct order. And, your program cannot prompt the user

for any supplementary inputs.

4. We provide a proj05.py program for you to start with.

5. You are not allowed to use advanced data structures such as dictionaries, classes, etc.

6. If you “hard code” answers, you will receive a grade of zero for the whole project. An example of hard

coding is to simply print the correct highest scores of a file rather than having the program find it in the

file and then print it.

7. Suggested Procedures

? Solve the problem using pencil and paper first. You cannot write a program until you have figured out

how to solve the problem. This first step can be done collaboratively with another student. However,

once the discussion turns to Python specifics and the subsequent writing of Python statements, you must

work on your own.

CSE 231 Spring 2024

? Cycle through the following steps to incrementally develop your program:

o Edit your program to add new capabilities.

o Run the program on Spyder and fix any errors.

o Use the Codio system to submit the current version of your program.

? Be sure to use the Codio system to submit the final version of your program.

? Be sure to log out when you leave the room, if you’re working in a public lab.

The last version of your solution is the program which will be graded by your TA. You should use the Codio

system to back up your partial solutions, especially if you are working close to the project deadline. That is the

easiest way to ensure that you won’t lose significant portions of your work if your machine fails or there are

other last-minute problems.

8. Grading Rubric

Computer Project #05 Scoring Summary

General Requirements

______ (4 pts) Coding Standard 1-8

(descriptive comments, function header, etc...)

Implementation:

____ (2 pts) Pass test1

____ (2 pts) Pass test2

____ (2 pts) Pass test3

____ (2 pts) Pass test4

____ (2 pts) Pass test5

____ (2 pts) Pass test6

____ (12 pts) Pass hidden tests (4 pts each)

____ (14 pts) All functions work as specified.

(2 pt) open_file (Manual Grading)

-1 point if No try/except

-1 point if No while loop

(2 pt) read_card_data

(2 pt) read_decklist

(2 pt) search_cards

(2 pt) compute_stats

(2 pt) display_data (Manual Grading)

(2 pt) display_stats (Manual Grading)

____ (8 pts) Pass All hidden functions tests.

(2 pt) read_card_data

(2 pt) read_decklist

(2 pt) search_cards

(2 pt) compute_stats

Note:

? hard coding an answer earns zero points for the whole project.

? -10 points for not putting all your user interaction in your main().

? Use of any advanced data structures (such as lists, sets, dictionaries, classes,

etc.) earns zero points for the whole project.

CSE 231 Spring 2024

9. Test Cases

9.1 Function Unit Tests

Check the test files in the Project05 starter package. When you run one test file as you normally run a python

file in PyCharm. if an assertion error is generated, it means you failed the test. You can look at the test case .py

files to see the details for the tests.

9.2 Input/Output Tests

We provide the .txt files with all the test files (inputX.txt and output.txt where X is the test number).

If you fail a test, use diffchecker.com to check the difference between your output and the instructor output.


版权所有:留学生编程辅导网 2020 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp