0% found this document useful (0 votes)
4 views13 pages

18 While Files

The document provides programming exercises involving while loops and file input in Python, including simulating dice rolls and creating an adding game. It also covers file I/O operations, such as reading from files and calculating changes in temperature and average gas prices. Additionally, it includes code snippets for implementing these exercises and handling file paths.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
4 views13 pages

18 While Files

The document provides programming exercises involving while loops and file input in Python, including simulating dice rolls and creating an adding game. It also covers file I/O operations, such as reading from files and calculating changes in temperature and average gas prices. Additionally, it includes code snippets for implementing these exercises and handling file paths.
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 13

CEN217, Fall 2019

Lecture 18: While loops and File Input


Adapted from slides by Marty Stepp and Stuart Reges
Programming Question
• Write a program that simulates rolling two 6-sided dice until their
combined result comes up as 7.
2 + 4 = 6
3 + 5 = 8
5 + 6 = 11
1 + 1 = 2
4 + 3 = 7
You won after 5 tries!
Programming Question
• Write a program that plays an adding game.
• Ask user to solve random adding problems with 2-5 numbers.
• The user gets 1 point for a correct answer, 0 for incorrect.
• The program stops after 3 incorrect answers.
4 + 10 + 3 + 10 = 27
9 + 2 = 11
8 + 6 + 7 + 9 = 25
Wrong! The answer was 30
5 + 9 = 13
Wrong! The answer was 14
4 + 9 + 9 = 22
3 + 1 + 7 + 2 = 13
4 + 2 + 10 + 9 + 7 = 42
Wrong! The answer was 32
You earned 4 total points
Answer
# Asks the user to do adding problems and scores them.
from random import *

def main():
# play until user gets 3 wrong
points = 0
wrong = 0
while wrong < 3:
result = play() # play one game
if result == 0:
wrong += 1
else:
points += 1

print("You earned", points, "total points.")


Answer 2
# Builds one addition problem and presents it to the user.
# Returns 1 point if you get it right, 0 if wrong.
def play():
# print the operands being added, and sum them
operands = random.randint(2, 5)
sum = random.randint(1, 10)
print(sum, end='')

for i in range(2, operands + 1):


n = random.randint(1, 10)
sum += n
print(" +", n, end='')
print(" = ", end='')

# read user's guess and report whether it was correct


guess = input()
if guess == sum:
return 1
else:
print("Wrong! The answer was", total)
return 0
File Input/output (I/O)
• name = open("filename")
• opens the given file for reading, and returns a file object

• name.read() - file's entire contents as a string

>>> f = open("hours.txt")
>>> f.read()
'123 Brett 12.5 8.1 7.6 3.2\n
456 Sarina 4.0 11.6 6.5 2.7 12\n
789 Nick 8.0 8.0 8.0 8.0 7.5\n'
File paths
• absolute path: specifies a drive or a top "/" folder
C:/Documents/smith/hw6/input/data.csv
• Windows can also use backslashes to separate folders.

• relative path: does not specify any top-level folder


names.dat
input/kinglear.txt
• Assumed to be relative to the current directory:
file = open("data/readme.txt")
If our program is in H:/hw6 ,
open will look for H:/hw6/data/readme.txt
split
You can use the split function to break a file apart
• str.split() - splits a string on blank space
• str.split(other_str) - splits a string on occurrences of the other string

>>> f = open("hours.txt")
>>> text = f.read()
'1\n2\n45\n6\n'

>>> f = text.split()
['1', '2', '45', '6']
Looping through a file
• The result of split can be used in a for ... in loop

• A template for reading files in Python:

file = open("filename")
text = file.read()
text = text.split()
for line in text:
statements
File input question
• We have a file weather.txt:
16.2
23.5
19.1
7.4
22.8
18.5
-1.8
14.9

• Write a program that prints the change in temperature between each pair of neighboring days.
16.2 to 23.5, change = 7.3
23.5 to 19.1, change = -4.4
19.1 to 7.4, change = -11.7
7.4 to 22.8, change = 15.4
22.8 to 18.5, change = -4.3
18.5 to -1.8, change = -20.3
-1.8 to 14.9, change = 16.7
File input answer
# Displays changes in temperature from data in an input file.

def main():
input = open("weather.txt"))
lines = input.read().split()
prev = float(lines[0]) # fencepost

for i in range(1, len(lines)):


next = float(lines[i])
print(prev, "to", next, ", change =", (next - prev))
prev = next
Gas prices question
• Write a program that reads a file gasprices.txt
• Format: Belgium $/gal
US $/gal
date

8.20
3.81
3/21/11
8.08
3.84
3/28/11
...

• The program should print the average gas price over all data in the file for both countries:
Belgium average: 8.3
USA average: 3.9
Gas prices solution
def main():
file = open("gasprices.txt")
belgium = 0
usa = 0
count = 0
lines = file.read().split()

for i in range(0, len(lines), 3):


belgium += float(lines[i])
usa += float(lines[i + 1])

print("Belgium average:", (belgium / count), "$/gal")


print("USA average:", (usa / count), "$/gal")

You might also like