代写INFO1110 final调试Python程序

1. Upgraded Cheese Shop (2 marks)

This question requires contents from Week 6.

Write your solutions into shop.py .

You must only run your code in shop.py if the expression if __name__ == '__main__' is True .

Failure to do so will cause your program to not pass any of the test cases.

The Cheese Shop now carries two additional type of cheese: Marble and Swiss . Each costs 50 and 100 gold respectively.

1.1 Update Cheese Menu

Modify the shop.py from Assignment 1 to include these new cheese and their prices when players visit The Cheese Shop. The program should now display:

Welcome to The Cheese Shop!

Cheddar - 10 gold

Marble - 50 gold

Swiss - 100 gold

How can I help ye?

1. Buy cheese

2. View inventory

3. Leave shop

In the code scaffold, you are given each type of cheese and its price in the variable CHEESE_MENU . You must not change or modify this variable.

1.2. Upgrade Buying Process

Update the function buy_cheese to repeatedly allow users to continue making purchases unless they enter the command back . The function receives one parameter, an int to represent the current gold the player has.

The function returns a tuple with 2 elements. The first element is an int of the amount of gold spent. The second element is a tuple with the amount of each type of cheese bought in the same order as that given in the CHEESE_MENU in the code scaffold. As an example, if the user has 75 gold and buys 2 cheddar and 1 marble, the return value would be (70, (2, 1, 0)) .

def buy_cheese(gold: int) -> tuple:

'''

Feature for players to buy cheese from shop

Parameters:

gold: int, amount of gold that player has

Returns:

gold_spent: int, amount of gold spent

cheese_bought: tuple, amount of each type of cheese bought

'''

pass

If the player enters a cheese that is not sold by the shop, the program displays We don't sell {player_request} ! where {player_request} is replaced with the player's requested cheese in lowercase and the program prompts for another cheese and quantity input from the user. Otherwise, it will continue to check the following:

Missing quantity. : If users does not enter a quantity.

Invalid quantity. : If users enters an invalid number as the quantity e.g. one , wahid .

Must purchase positive amount of cheese. : If users enters 0 or a negative number as the quantity.

There should only ever be one error message per input if the input is invalid, and the error messages are in order of how they have been listed. So as example, an input such as info1110 would display We don't sell info1110! but not also display Missing quantity. . Another example, if the user enters both an invalid cheese and quantity e.g. brie one , the former takes priority i.e. it will display the error message We don't sell brie! and continue asking for input.

There is now a change to the shop. When buying cheese, regardless of whether it is a valid or invalid command, players are prompted to buy more cheese. The only way to return back to main menu of The Cheese Shop is if they enter the back command.

All commands when buying cheese are case insensitive, so as examples, back and BACK are both valid commands that will move the players back to the shop menu. cheddar 10 and CHEDdaR 10 will buy 10 cheddar, assuming the player has sufficient gold. For this question, you may assume that all cheeses in the Cheese Shop is a single word.

This is an example input/outputs produced by the updated game:

Welcome to The Cheese Shop!

Cheddar - 10 gold

Marble - 50 gold

Swiss - 100 gold

How can I help ye?

1. Buy cheese

2. View inventory

3. Leave shop

#1

You have 125 gold to spend.

State [cheese quantity]: #brie

We don't sell brie!

You have 125 gold to spend.

State [cheese quantity]: #marble

Missing quantity.

You have 125 gold to spend.

State [cheese quantity]: #marble 10

Insufficient gold.

You have 125 gold to spend.

State [cheese quantity]: #marble 1

Successfully purchase 1 marble.

You have 75 gold to spend.

State [cheese quantity]: #back

How can I help ye?

1. Buy cheese

2. View inventory

3. Leave shop

From the example above, the buy_cheese function is responsible for showing this output:

You have 125 gold to spend.

State [cheese quantity]: #brie

We don't sell brie!

You have 125 gold to spend.

State [cheese quantity]: #marble

Missing quantity.

You have 125 gold to spend.

State [cheese quantity]: #marble 10

Insufficient gold.

You have 125 gold to spend.

State [cheese quantity]: #swiss 1

Successfully purchase 1 swiss.

You have 25 gold to spend.

State [cheese quantity]: #cheddar 2

Successfully purchase 2 cheddar.

You have 5 gold to spend.

State [cheese quantity]: #back

The function would return (120, (2, 0, 1)) as the player spent 120 gold, and bought 2 cheddar and 1 swiss.

You may be asking "Why are we using tuples and not lists for the return value?"

Tuples are immutable, meaning once it's instantiated it cannot be changed. The idea behind it is that if a function returns you a tuple, it's a definite answer and cannot be changed at any point in the program. If there were to be any accidental changes on this return value, whether it be from the user or even the function itself, it would raise an error. This guarantees the user is using the intended values returned from the function.

In simple words, it's good design.

In the template, you've been provided two things. First, you have a cheese menu:

CHEESE_MENU = (("Cheddar", 10), ("Marble", 50), ("Swiss", 100))

This is the menu for the shop. Each inner tuple contains both the name of the cheese and its price. This specific structure ensures the cheese menu does not change.

Secondly, you've been provided your own cheese:

cheese = [["Cheddar", 0], ["Marble", 0], ["Swiss", 0]]

These are the initial quantities of each cheese, as the player starts with 0 of each. This specific structure allows you to freely change the quantities for each cheese when you wish.

You do not have to use either of these in your solution, however it would likely make your program easier to read if you were to use containers.

1.3. Update Inventory View

The inventory must be updated to show the quantity of each type of cheese. If a player doesn't have any of that particular cheese, it must show 0 . The gold and quantity of each type of cheese can never be negative numbers.

Update the function display_inventory to receive three parameters of type int , list , and str , being the gold, cheese and trap respectively.

def display_inventory(gold: int, cheese: list, trap: str) -> None:

'''

Displays contents of inventory

Parameters:

gold: int, amount of gold that player has

cheese: list, amount of each type of cheese that player has

trap: str, name of trap that player that player has

'''

pass

At the start of the game, players will have 125 gold and no cheese. This is an example of the input/output produced by the program of the view of the inventory before and after buying 1 marble and 1 cheddar from the shop.

Welcome to The Cheese Shop!

Cheddar - 10 gold

Marble - 50 gold

Swiss - 100 gold

How can I help ye?

1. Buy cheese

2. View inventory

3. Leave shop

2

Gold - 125

Cheddar - 0

Marble - 0

Swiss - 0

Trap - Cardboard and Hook TrapHow can I help ye?

1. Buy cheese

2. View inventory

3. Leave shop

#1

You have 125 gold to spend.

State [cheese quantity]: #marble 1

Successfully purchase 1 marble.

You have 75 gold to spend.

State [cheese quantity]: #cheddar 1

Successfully purchase 1 cheddar.

You have 65 gold to spend.

State [cheese quantity]: #back

How can I help ye?

1. Buy cheese

2. View inventory

3. Leave shop

#2

Gold - 65

Cheddar - 1

Marble - 1

Swiss - 0

Trap - Cardboard and Hook Trap

How can I help ye?

1. Buy cheese

2. View inventory

3. Leave shop

#3

From the example above, the display_inventory function would be responsible for showing this output:

Gold - 125

Cheddar - 0

Marble - 0

Swiss - 0

Trap - Cardboard and Hook Trap

This function would then be called again later in the program to display the next output:

Gold - 65

Cheddar - 1

Marble - 1

Swiss - 0

Trap - Cardboard and Hook Trap2. New Game Features (2 marks)

This question requires contents from Week 7.

Write your solutions into train.py and game.py . Read the question carefully to identify the correct location to place your solution!

You must only run your code in game.py if the expression if __name__ == '__main__' is True .

You must only run your code in train.py if the expression if __name__ == '__main__' is True . All your code that executes must be inside a main function.

Failure to do so will cause your program to not pass any of the test cases.

Write Python codes to build the following features on top of the original Mousehunt game from Assignment 1.

2.1 Skip Feature

The developers received feedback that the training module is annoying to type skip every time and have requested for a quicker way to skip. You are asked to modify the current program to additionally enable players to skip training by entering ESC+Enter at any time. Even if they repeat the training, they can still enter ESC+Enter .

Modify train.py to check whether the user has entered ESC+Enter during each user prompt. This user prompt is not inclusive of the "skip" prompt given at the very start.

Additionally, all commands in this game feature are case insensitive and ignore trailing and leading whitespaces in the command. Ensure you update game.py such that these changes are reflected.

Hint: All symbols have an equivalent numeric value. Try an Internet search on the ASCII table to see what its value is, and see how it will help you!

When users enter ESC , it will appear as ^[ in the terminal.

Ideally, if you've imported the code from train.py into game.py , you wouldn't need to change a single line in game.py for this game feature. It's only required if you're duplicating code.

These are example input/outputs in which players can skip training for different scenarios during training. Note that players can't enter ^[ when prompted to skip and it will not be tested. The first snippet below is when they can begin entering ^[ .

Skip training when prompted to travel to the Meadow.

Larry: I'm Larry. I'll be your hunting instructor.

Larry: Let's go to the Meadow to begin your training!

Press Enter to travel to the Meadow...#^[

Skip training when prompted to view traps.

Larry: I'm Larry. I'll be your hunting instructor.

Larry: Let's go to the Meadow to begin your training!

Press Enter to travel to the Meadow...

Travelling to the Meadow...

Larry: This is your camp. Here you'll set up your mouse trap.

Larry: Let's get your first trap...

Press Enter to view traps that Larry is holding...#^[

Skip training when prompted to select traps

Larry: I'm Larry. I'll be your hunting instructor.

Larry: Let's go to the Meadow to begin your training!

Press Enter to travel to the Meadow...

Travelling to the Meadow...

Larry: This is your camp. Here you'll set up your mouse trap.

Larry: Let's get your first trap...

Press Enter to view traps that Larry is holding...

Larry is holding...

Left: High Strain Steel Trap

Right: Hot Tub Trap

Select a trap by typing "left" or "right": #^[

Skip training when prompted to sound horn.

Larry: I'm Larry. I'll be your hunting instructor.

Larry: Let's go to the Meadow to begin your training!

Press Enter to travel to the Meadow...#

Travelling to the Meadow...

Larry: This is your camp. Here you'll set up your mouse trap.

Larry: Let's get your first trap...

Press Enter to view traps that Larry is holding...#

Larry is holding...

Left: High Strain Steel Trap

Right: Hot Tub Trap

Select a trap by typing "left" or "right": #

Invalid command! No trap selected.

Larry: Odds are slim with no trap!

Sound the horn to call for the mouse...

Sound the horn by typing "yes": #^[

Skip training when prompted to continue training.

Larry: I'm Larry. I'll be your hunting instructor.

Larry: Let's go to the Meadow to begin your training!Press Enter to travel to the Meadow...#

Travelling to the Meadow...

Larry: This is your camp. Here you'll set up your mouse trap.

Larry: Let's get your first trap...

Press Enter to view traps that Larry is holding...#

Larry is holding...

Left: High Strain Steel Trap

Right: Hot Tub Trap

Select a trap by typing "left" or "right": #

Invalid command! No trap selected.

Larry: Odds are slim with no trap!

Sound the horn to call for the mouse...

Sound the horn by typing "yes": #yes

Nothing happens.

To catch a mouse, you need both trap and cheese!

Press Enter to continue training and "no" to stop training: #^[

The train.py file must have a main function that only executes if the __name__ value is '__main__' .

def main():

'''

Implement your code here.

'''

pass

if __name__ == '__main__':

main()

2.2 How do I arm my trap with new cheese?

Add another option to the main menu called 4. Change Cheese . When players select this option, the game displays the current quantity of cheese that are in the player's inventory and then prompts the user to provide the type of cheese that they intend to arm their trap with.

If the player enters the command back , the game returns to the main menu. The game must be able to recognize any of the cheese that the Cheese Shop stocks, i.e. cheddar , marble and swiss . If an invalid cheese is provided or players attempt to arm a cheese that don't possess, the game displays an appropriate warning message (see table 1), displays the player's inventory again and re-prompts for another cheese.

Table 1: Troubleshooting errors when arming cheese

All commands in this game feature is case insensitive and ignores trailing and leading whitespaces in the command. In short, CHEDDAR and cheddar are valid commands for cheddar cheese.

All the functionality for the Change Cheese section should be completed in the function change_cheese . You should call this function when the user wants to change cheese, and the function should end once they have either successfully armed the trap or have exited out of changing cheese. The function should return a tuple with the first element being a bool object representing the trap status, and the second element being a str object representing the type of cheese in the trap. If players exit the function without arming the trap successfully, there should be no cheese in the trap. This is represented by returning the None object.

def change_cheese(hunter_name: str, trap: str, cheese: list, e_flag: bool = False) -> tuple:

'''

Handles the inputs and ouputs of the change cheese feature.

Parameters:

hunter_name: str, the name of the player.

trap: str, the trap name.

cheese: list, all the cheese and its quantities the player

currently possesses.

e_flag: bool, if the trap is enchanted, this will be True.

default value is False.

Returns:

trap_status: bool, True if armed and False otherwise.

trap_cheese: str | None, the type of cheese in the trap. if player

exits the function without without arming

trap succesfully, this value is None.

'''

pass

This is an example input/output of the game when player Bob enter this game feature from the main menu without any cheese in their inventory and attempts to arm brie and cheddar . These output snippets start from the game menu. We skip the game title, name input, and training for your convenience.

What do ye want to do now, Hunter Bob?

1. Exit game

2. Join the Hunt

3. The Cheese Shop

4. Change Cheese

#4

Hunter Bob, you currently have:

Cheddar - 0

Marble - 0

Swiss - 0

Type cheese name to arm trap: #brie

No such cheese!

Hunter Bob, you currently have:

Cheddar - 0

Marble - 0

Swiss - 0

Type cheese name to arm trap: #cheddar

Out of cheese!

Hunter Bob, you currently have:

Cheddar - 0

Marble - 0

Swiss - 0

Type cheese name to arm trap: #back

What do ye want to do now, Hunter Bob?

1. Exit game

2. Join the Hunt

3. The Cheese Shop

4. Change Cheese

#1

If players provide a valid cheese that they have present in their inventory, the game proceeds to confirm whether the player intends to arm the trap with the selected cheese by displaying the message Do you want to arm the trap with {cheese_type}? where {cheese_type} is the cheese that the player has selected. Even if the player already has the same cheese type armed, it will still prompt them if want to arm it.

If players enter back , the game returns to main menu. If players enter no , the game does nothing, displays the player's inventory again and re-prompts for another cheese. If players enter yes , the game confirms that their existing trap is armed with the given cheese and returns to the main menu. The following is an example input/output for player Bob attempting to arm their Cardboard and Hook Trap trap with Cheddar and only successfully doing arming their trap during the second attempt.

In this example, we will go through what the function should be outputting and what it should be returning. Keep in mind, we skip a few steps. Assume this is a point of the game when the user has 6 cheddar and 1 marble. If we started from scratch, we would need to catch a few mouses before we can get to this point.

What do ye want to do now, Hunter Bob?

1. Exit game

2. Join the Hunt

3. The Cheese Shop

4. Change Cheese

#4

Hunter Bob, you currently have:

Cheddar - 6

Marble - 1

Swiss - 0

Type cheese name to arm trap: #CHEDDAR

Do you want to arm your trap with Cheddar? #NO

Hunter Bob, you currently have:

Cheddar - 6

Marble - 1

Swiss - 0

Type cheese name to arm trap: #MARBLE

Do you want to arm your trap with Marble? #YES

Cardboard and Hook Trap is now armed with Marble!

What do ye want to do now, Hunter Bob?

1. Exit game

2. Join the Hunt

3. The Cheese Shop

4. Change Cheese

#4

Hunter Bob, you currently have:

Cheddar - 6

Marble - 1

Swiss - 0

Type cheese name to arm trap: #BACK

What do ye want to do now, Hunter Bob?

1. Exit game

2. Join the Hunt

3. The Cheese Shop

4. Change Cheese

#1

From the example above, the change_cheese function is responsible for showing this output:

Hunter Bob, you currently have:

Cheddar - 6

Marble - 1

Swiss - 0

Type cheese name to arm trap: #CHEDDAR

Do you want to arm your trap with Cheddar? #NO

Hunter Bob, you currently have:

Cheddar - 6

Marble - 1

Swiss - 0

Type cheese name to arm trap: #MARBLE

Do you want to arm your trap with Marble? #YES

Cardboard and Hook Trap is now armed with Marble!

The function would return (True, 'Marble') as the trap is armed and the cheese armed is marble .

This function would then be called again later in the program to display the next output:

Hunter Bob, you currently have:

Cheddar - 6

Marble - 1

Swiss - 0

Type cheese name to arm trap: #BACK

The function would return (False, None) as the trap is not armed and there's no cheese armed. Please note that we are using the None object which is a separate data type to represents absence of values. It is not a string with the value 'None' .

None # correct

'None' # incorrect

You do not have to arm the trap after every single hunt.

Example: If you have 10 cheddar, arming the trap with cheddar will allow you to hunt 10 times (assuming valid inputs) until you can no longer hunt.

Since you must now arm the trap, it means you cannot immediately hunt after you buy cheese. You must first arm the trap.





热门主题

课程名

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
站长地图