Python代写:CSCI1100 Loops and Lists

代写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:

1
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:

1
2
3
4
5
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:

1
2
3
4
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:

  1. N moves up one step
  2. S moves down one step
  3. E moves right one step
  4. W moves left one step
  5. print print all active (uncaptured) pokemon and their locations
  6. 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

  1. You can assume an infinite field and do not need to check boundaries.
  2. Make sure that your commands are case insensitive
  3. You can expect that the pokemon names will be entered correctly, including capitalization, but you are welcome to check it if you want.
  4. 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.