Homework for Week 8
Files
Watch lecture videos:
Slides in English
Textbook in English
Quiz
Go to Moodle and solve the quiz on files.
Examples
NB! Make sure that the text files (.txt) are in the same folder with your Python code. Otherwise Python will not find the files.
Example 1. Shoe size
The file footlengths.txt contains data about foot lengths. The following program reads the data from the file, calculates the suitable shoe size for each foot length and prints the result. If the foot length cannot be converted into a number for some reason, then the program prints Invalid input and proceeds to the next line in the file.
def shoe_size(length): return round(1.5 * length + 2) ffile = open("footlengths.txt") for foot in ffile: try: f = float(foot) s = shoe_size(f) print("Foot length:", f, "Suitable shoe size is", s) except: print("Invalid input") ffile.close()
Example 2. Uppercase
The following program prompts the user for filename, reads the file and prints the content of the file (line by line) in uppercase. The program finishes its work nicely regardless of whether the file exists in the folder or not.
fname = input("Please enter the file name: ") try: ffile = open(fname) except: print("File cannot be opened:", fname) else: for line in ffile: print(line.strip().upper()) ffile.close()
Exercises
1. Numbered lines
Write a program that prompts the user for filename and outputs all lines from the file, numbering them with consecutive integers. The program should finish nicely regardless of whether the file exists in the folder or not (use try-except).
For example, if we have the file names.txt with the following content:
Jon Snow Arya Stark Tyrion Lannister Eddard Stark Melisandre
then the program should output:
Enter filename: names.txt 1. Jon Snow 2. Arya Stark 3. Tyrion Lannister 4. Eddard Stark 5. Melisandre
2. Sale
A shop sells different kinds of products. The shop owner has written the prices of all products in the file prices.txt. For example, bananas cost 1 euro per kilogram, tomatoes cost 3 euros, etc. For each product, the file has two lines: product name on one line and its price on the next line. For example, the content of the file may be:
bananas 1 tomatoes 3 avocados three walnuts 18-19 yellow plums 4.5
For a sale, the shop owner wants to lower all prices by 10%. Write a program that reads the products and prices from the file, computes the new prices, if possible, and prints them on the screen, rounded to two decimal places.
The output should contain one line for each product. If price conversion is successful, then the line contains the name of the product and its new price. If price conversion is not successful, then the program should inform the user that the price for that product couldn't be computed.
New price for bananas is 0.9 euros. New price for tomatoes is 2.7 euros. Cannot convert the price for avocados. Cannot convert the price for walnuts. New price for yellow plums is 4.05 euros.
Autochecker. The program doesn't prompt the user for anything, the data will always be read from the text file prices.txt. In the output, the data for each product must be on a separate line.
3. Taxi prices
The party ended and everybody starts to go home. The file taxiprices.txt contains information about taxi prices, where each line consists of taxi name, kilometer price, and starting fee, separated by commas. The program should ask for distance to home in kilometers and output the name of the cheapest taxi, according to the prices in the taxi price file.
Example
Content of the file taxiprices.txt:
Maxitaxi,0.6,2.0 Friendshare,0,10 Waldo takso,1.0,1.0
The output of the program:
Enter distance in kilometers: 7 Maxitaxi is the cheapest.
Taxi fare is computed by the formula kilometer price × distance in kilometers + starting fee.
The program should not ask for a filename. It can assume that the file taxiprices.txt exists.
Hint
>>> s = 'xx,yy,zz'.split(',') >>> s ['xx', 'yy', 'zz'] >>> s[1] 'yy'
Submit your solutions
Submit your solutions of exercises 1, 2, and 3 in Moodle under the names home1.py, home2.py, and home3.py.