代写Python的基础作业,作业分为三个部分,练习Loop和List的使用方法,需要实现两个小程序以及一个小游戏。
Overview
This homework is worth 90 points total toward your overall homework grade
(each part is 30 points). There are three parts to the homework, each to be
submitted separately. All parts should be submitted by the deadline or your
program will be considered late.
Your programs for each part for this homework should be named:
hw4Part1.py
hw4Part2.py
hw4Part3.py
respectively. Each should be submitted separately.
See the handout for Homework 3 for discussion of grading and for a discussion
of what is considered excess collaboration. These rules will be in force for
the rest of the semester.
Final note, you will need to use loops in this assignment. We will leave the
choice of loop type to you. Please feel free to use while loops or for loops
depending on the task and your personal preference.
Part 1: Words with alternating vowels and consonants
Write a program that reads in words entered by the user and checks whether:
- the word has at least 8 characters,
- starts with a consonant,
- has alternating consonants and vowels, and
- the consonants are in decreasing alphabetical order.
The program should loop reading additional words until the user enters an
empty string.
Note that you can check letters for alphabetical order using [.
For example:‘a’ > ‘b’
False
‘z’ > ‘b’
True
Your program should work for words entered upper or lower case, and must use a
function is_alternating(word) that returns True if the word has the above
pattern, and False otherwise. You are welcome to use additional functions if
you would like. Hint. Remember to write a loop that goes through each letter
and check for the necessary conditions. Using indexing is important here as
you need to compare letters in different positions. Here is an example run of
this program:
Enter a word: zayexiwo
The word ‘zayexiwo’ is alternating
Enter a word: zaYexiWov
The word ‘zaYexiWov’ is alternating
Enter a word: zaaexiWov
The word ‘zaaexiWov’ is not alternating
Enter a word: zYYexiWov
The word ‘zYYexiWov’ is not alternating
Enter a word: zayexiwx
The word ‘zayexiwx’ is not alternating
Enter a word: zayexiw
The word ‘zayexiw’ is not alternating
Enter a word: azayexiw
The word ‘azayexiw’ is not alternating
Enter a word: zazexiwo
The word ‘zazexiwo’ is not alternating
Enter a word:
And using real words,
Enter a word: remolade
The word ‘remolade’ is alternating
Enter a word: zucchini
The word ‘zucchini’ is not alternating
Enter a word: serenade
The word ‘serenade’ is alternating
Enter a word: topologic
The word ‘topologic’ is alternating
Enter a word: zodiacal
The word ‘zodiacal’ is not alternating
Enter a word:
Here is a little hint that will help: Given a letter stored in the variable x,
the boolean expression:
x in ‘aeiou’
—|—
is True if and only if x is a lower case vowel.
When you have tested your code, please submit it as hw4Part1.py. Be sure you
use the correct filename, otherwise, Submitty will not be able to grade your
submission.
Part 2: New York State Death Statistics
As part of an open government initiative, New York State releases a large
number of health related statistics for researchers and developers to use.
Among these are death statistics by region of the state at
https://health.data.ny.gov . For this
assignment, we have simplified the statistics to provide just the total number
of deaths per 100,000 people. Our goal is to come up with a simple
visualization comparing death trends between two different counties over the
last few years.
Write a program to read in the death statistics for two different areas of NYS
for the 11 years from 2003 to 2013. Remember that these are deaths per 100,000
people. We will take the naive view that areas with decreasing trends per
100,000 are automatically healthier places to live, ignoring all other
population demographics such as age. For the two areas chosen, compute a trend
for the death rates composed of the symbols =, +, and -, where = implies the
year is within +/- 5 deaths per 100,000 of the previous year, + implies the
year has more than 5 more deaths than the previous year, and and - implies
that the year has more than 5 fewer deaths than the previous year. Starting
from 2004, compute the trend for that year as compared to 2003 and encode it
in the trend. Then move on to 2005, 2006 and etc. until you reach 2013. Your
trend will run from 2004 through 2013. Print the trend lines for the two areas
in reverse order from 2013 - 2004 and then compare the number of + and -
symbols for each area. Basically, every + will add one to the trend value and
every - will subtract one. Report which area has the better trend (lowest
score) or report that the two areas have the same trend. The utility module
provided for this homework will give you some help. Given a string containing
a county name, it provides a function read_deaths(county) that returns you a
list of 11 numbers.
Try the following:
import hw4_util
cdata1 = hw4_util.read_deaths(‘Erie’)
cdata2 = hw4_util.read_deaths(‘Cattaraugus’)
print(‘Erie:’, cdata1)
print(‘Cattaraugus:’, cdata2)
—|—
would give:
Erie: [1061.0, 1032.0, 1047.0, 1020.0, 1040.0, 1037.0, 1029.4, 1010.0, 1043.0, 1014.0, 1046.0]
Cattaraugus: [1005.0, 1089.0, 1061.0, 978.7, 972.7, 978.8, 1010.2, 1083.0, 1002.0, 977.9, 990.0]
The difference (rounded to one decimal) is:
Erie: [-29.0, 15.0, -27.0, 20.0, -3.0, -7.6, -19.4, 33.0, -29.0, 32.0]
Cattaraugus: [84.0, -28.0, -82.3, -6.0, 6.1, 31.4, 72.8, -81.0, -24.1, 12.1]
Running the program with these values would give:
Enter the first area to check => Erie
Erie
Enter the second area to check => Cattaraugus
Cattaraugus
Erie:
2013 2004
Trend: +-+–=+-+Cattaraugus:
2013 2004
Trend: +–+++—+
Erie has better trend statistics than Cattaraugus.
Note that 2013 and 2004 are printed to line up with the margins of the trend
data.
Here is another example where the number of “+” and “-“ symbols are the same:
Enter the first area to check => Erie
Erie
Enter the second area to check => Erie
Erie
Erie:
2013 2004
Trend: +-+–=+-+Erie:
2013 2004
Trend: +-+–=+-+Erie and Erie are the same.
The function hw4_util.read_deaths will return an empty list whenever the
county cannot be found. Your program must give an error and exit when it
encounters an invalid name as shown below.
Enter the first area to check => Errie
Errie
Errie is an invalid name
or
Enter the first area to check => Erie
Erie
Enter the second area to check => Wesstchaester
Wesstchaester
Wesstchaester is an invalid name
You can ignore any warnings you get from using sys.exit() that may show up
after your error message.
When you have tested your code, please submit it as hw4Part2.py. Be sure to
use the correct filename or Submitty will not be able to grade your
submission.
Part 3: Pokemon GO
This is a little variation on the pikachu walk we did last homework. This
time, we place a Pokemon trainer at (0, 0) on an infinite grid. As in the
previous homework N moves up in the negative y direction, S moves down in the
positive y direction, E moves right in the positive x direction and W moves
left in the negative x direction. We will discard NE, NW, SE, and SW
directions. The grid is populated by roaming Pokemon and your job is to wait
while they walk around and hopefully run into you.
You will need to read the list of Pokemon and their initial locations on the
grid using the read_pokemon function from hw4_util. By now you should be
experts at this. For example, the program:
import hw4_util
pokemon, locations = hw4_util.read_pokemon()
print(pokemon)
print(locations)
—|—
Will produce:
[‘Pikachu’, ‘Bulbasaur’, ‘Charizard’, ‘Squirtle’]
[(-3, -2), (-1, -4), (1, 0), (2, 4)]
The first list is the pokemon that are available on this particular grid,
while the second list is their initial locations. You may assume without
checking that no pokemon are repeated in this list. The pokemon trainer sits
and waits for pokemon to walk around the grid one step at a time. Each pokemon
can move in one of 4 directions N (up), S (down), E (right) and W (left). When
the pokemon lands on the same space as the trainer, (0, 0), the pokemon is
considered captured. We won’t require you to animate the pokemon battles for
this homework. The simulation has an indeterminate number of steps driven by
user input.
The Program
This is a turn based simulation driven by user input. To set up the
simulation, first use read_pokemon to load in the pokemon data. Immediately
print out the list of Pokemon and their locations using a function
print_pokemon that you will need to write. The function should only print out
pokemon that have not been captured by the trainer. This will allow you to use
it at additional places in the simulation.
Once you have the simulation set up you enter a loop. At the start of each
iteration through the loop begin by asking the user for a command:
- N moves up one step
- S moves down one step
- E moves right one step
- W moves left one step
- print print all active (uncaptured) pokemon and their locations
- end stop the simulation and end the program
If the command is one of the directions, immediately ask which pokemon moved
and move them appropriately, printing out their new location at the end of the
move and noting if they were captured. the command print prints out the
information on each uncaptured pokemon. The simulation ends when the end
command is entered. A sample run is below:
Current pokemon:
Pikachu at (-3, -2)
Bulbasaur at (-1, -4)
Charizard at (1, 0)
Squirtle at (2, 4)
N,S,E,W to move, ‘print’ to list, or ‘end’ to stop ==> W
W
Which pokemon moved W? Charizard
Charizard
Charizard moved to location (0, 0)
You capture a Charizard on turn 1
N,S,E,W to move, ‘print’ to list, or ‘end’ to stop ==> print
print
Current pokemon:
Pikachu at (-3, -2)
Bulbasaur at (-1, -4)
Squirtle at (2, 4)
N,S,E,W to move, ‘print’ to list, or ‘end’ to stop ==> end
end
Simulation ended.
Or a second example:
Current pokemon:
Pikachu at (-3, -2)
Bulbasaur at (-1, -4)
Charizard at (1, 0)
Squirtle at (2, 4)
N,S,E,W to move, ‘print’ to list, or ‘end’ to stop ==> prrint
prrint
N,S,E,W to move, ‘print’ to list, or ‘end’ to stop ==> W
W
Which pokemon moved W? Charizard
Charizard
Charizard moved to location (0, 0)
You capture a Charizard on turn 2
N,S,E,W to move, ‘print’ to list, or ‘end’ to stop ==> S
S
Which pokemon moved S? Pikachu
Pikachu
Pikachu moved to location (-3, -1)
N,S,E,W to move, ‘print’ to list, or ‘end’ to stop ==> print
print
Current pokemon:
Pikachu at (-3, -1)
Bulbasaur at (-1, -4)
Squirtle at (2, 4)
N,S,E,W to move, ‘print’ to list, or ‘end’ to stop ==> N
N
Which pokemon moved N? Squirtle
Squirtle
Squirtle moved to location (2, 3)
N,S,E,W to move, ‘print’ to list, or ‘end’ to stop ==> end end
Simulation ended.
A longer example can be found in hw4_pokemon_example.txt in hw4Files.zip.
Some notes
- You can assume an infinite field and do not need to check boundaries.
- Make sure that your commands are case insensitive
- You can expect that the pokemon names will be entered correctly, including capitalization, but you are welcome to check it if you want.
- If you get an invalid command (such as prrrint in the second example) just ignore it and start the next turn
When you have tested your code, please submit it as hw4Part3.py. You must use
this filename, or Submitty will not be able to run and grade your code.