Difference between revisions of "CSC111 Exercises on Loops"
(→Loop Exercises) |
(→Loop Exercises) |
||
Line 1: | Line 1: | ||
==Loop Exercises== | ==Loop Exercises== | ||
+ | (The solutions are at the bottom of the page... highlight the white area to see it...) | ||
;Exercise 1 | ;Exercise 1 | ||
Line 31: | Line 32: | ||
for c2 in 'abcdefghijklmnopqrstuvwxyz': | for c2 in 'abcdefghijklmnopqrstuvwxyz': | ||
print "111c-" + c1 + c2 | print "111c-" + c1 + c2 | ||
+ | |||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <br /> | ||
+ | <font color="white"> | ||
+ | <code><pre> | ||
+ | def exo1( ): | ||
+ | ans = input( "Please enter a number greater than 0: " ) | ||
+ | while ans < 0: | ||
+ | ans = input( "Invalid input. Please enter a number greater than 0: " ) | ||
+ | |||
+ | return ans | ||
+ | |||
+ | def exo2( ): | ||
+ | ans = raw_input( "Should we continue (Yes/No)? " ) | ||
+ | ans = ans.lower() | ||
+ | while not( ans in [ 'y', 'n', 'yes', 'no' ] ): | ||
+ | ans = raw_input( "Invalid answer, please enter Yes or No: " ).lower() | ||
+ | |||
+ | return ( ans in [ 'y', 'yes' ] ) | ||
+ | |||
+ | def exo3( filename, key ): | ||
+ | file = open( filename, 'r' ) | ||
+ | count = 0 | ||
+ | for line in file: | ||
+ | if line.find( key ) != -1: | ||
+ | print "Found key: ", line | ||
+ | count += 1 | ||
+ | break | ||
+ | |||
+ | file.close() | ||
+ | |||
+ | if count==0: | ||
+ | print "Key not found" | ||
+ | |||
+ | def exo3b( filename, key ): | ||
+ | file = open( filename, 'r' ) | ||
+ | count = 0 | ||
+ | line = file.readline() | ||
+ | while line!="": | ||
+ | if line.find( key )!=-1: | ||
+ | print "Found key: ", line | ||
+ | return | ||
+ | line = file.readline() | ||
+ | |||
+ | print "Key not found" | ||
+ | |||
+ | def exo4(): | ||
+ | sum = 0 | ||
+ | num = 400.0 | ||
+ | denom = 1 | ||
+ | mult = 1 | ||
+ | count = 0 | ||
+ | while int( sum ) != 314: | ||
+ | sum = sum + mult * num / denom | ||
+ | mult = -mult | ||
+ | denom = denom + 2 | ||
+ | count += 1 | ||
+ | print count, "iterations: sum = ", sum/100.0 | ||
+ | |||
+ | def exo5(): | ||
+ | player1 = 0 | ||
+ | player2 = 0 | ||
+ | #--- keep on playing as long as the two players' scores is less than 3 apart--- | ||
+ | while abs( player1 - player2 ) < 3: | ||
+ | #--- get user input and make sure it is valid --- | ||
+ | play = raw_input( "Enter players draw: " ).upper() | ||
+ | while not ( play in [ "PP", "RR", "SS", "PR", "PS", "RP", "RS", "SP", "SR" ] ): | ||
+ | play = raw_input( "Invalid input: try again: " ).upper() | ||
+ | |||
+ | #--- check who's winning --- | ||
+ | if play in [ "PR", "RS", "SP" ]: | ||
+ | player1 += 1 | ||
+ | if play in [ "RP", "SR", "PS" ]: | ||
+ | player2 += 1 | ||
+ | print "Player1: %d -- Player2: %d" % ( player1, player2 ) | ||
+ | |||
+ | #--- print winner --- | ||
+ | if player1 > player2: | ||
+ | print "Player 1 wins!" | ||
+ | else: | ||
+ | print "Player 2 wins!" | ||
+ | |||
+ | def exo6(): | ||
+ | c1 = 'a' | ||
+ | while c1 <= 'b': | ||
+ | c2 = 'a' | ||
+ | while c2 <= 'z': | ||
+ | print "111c-" + c1 + c2 | ||
+ | # see http://docs.python.org/library/functions.html | ||
+ | c2 = chr( ord( c2 ) + 1 ) | ||
+ | c1 = chr( ord( c1 ) + 1 ) | ||
+ | |||
+ | def main(): | ||
+ | print "Exercise 1" | ||
+ | print "exo1() returns", exo1() | ||
+ | |||
+ | print "Exercise 2" | ||
+ | ans = exo2() | ||
+ | print "exo2() returns", ans | ||
+ | |||
+ | exo3( raw_input( "file name? " ), raw_input( "keyword? " ) ) | ||
+ | exo3b( raw_input( "file name? " ), raw_input( "keyword? " ) ) | ||
+ | |||
+ | exo4() | ||
+ | |||
+ | exo5() | ||
+ | |||
+ | exo6() | ||
+ | |||
+ | main() | ||
+ | |||
+ | </pre></code> | ||
+ | </font> | ||
<br /> | <br /> |
Revision as of 10:48, 31 March 2010
Loop Exercises
(The solutions are at the bottom of the page... highlight the white area to see it...)
- Exercise 1
- Write a function that asks the user to enter a number that is greater than 0. The function will keep on asking the user for a number until the number is correct. The function will return the number.
- Exercise 2
- Write a function that asks the user to respond by 'Y', 'y', 'yes', 'YES' or 'N', 'n', 'no', 'NO'. The function keeps on asking until the user enters the correct information. The function will return True if the user entered Yes, and False otherwise.
- Exercise 3
- Write a function that reads lines from a file until it finds a line that contains a particular string. The function receives the name of the file, and the string.
- Exercise 4
- Pi can be computed by adding the following terms (http://en.wikipedia.org/wiki/Pi):
- How many terms does it take to get the first 3 digits, 3.14?
- Exercise 5
- Write a program that reads 2 characters from either the keyboard or a file. The characters are either PP, PR, PS, RP, RR, RS, SP, SR, SS. They correspond to the selections made by 2 players playing the game of rock-paper-scissors.
- Make the program accept inputs until one player's score is more than 3 points ahead of the other.
- Exercise 6
- Replace the for-loops by while-loops in the following code
for c1 in 'ab': for c2 in 'abcdefghijklmnopqrstuvwxyz': print "111c-" + c1 + c2
def exo1( ):
ans = input( "Please enter a number greater than 0: " )
while ans < 0:
ans = input( "Invalid input. Please enter a number greater than 0: " )
return ans
def exo2( ):
ans = raw_input( "Should we continue (Yes/No)? " )
ans = ans.lower()
while not( ans in [ 'y', 'n', 'yes', 'no' ] ):
ans = raw_input( "Invalid answer, please enter Yes or No: " ).lower()
return ( ans in [ 'y', 'yes' ] )
def exo3( filename, key ):
file = open( filename, 'r' )
count = 0
for line in file:
if line.find( key ) != -1:
print "Found key: ", line
count += 1
break
file.close()
if count==0:
print "Key not found"
def exo3b( filename, key ):
file = open( filename, 'r' )
count = 0
line = file.readline()
while line!="":
if line.find( key )!=-1:
print "Found key: ", line
return
line = file.readline()
print "Key not found"
def exo4():
sum = 0
num = 400.0
denom = 1
mult = 1
count = 0
while int( sum ) != 314:
sum = sum + mult * num / denom
mult = -mult
denom = denom + 2
count += 1
print count, "iterations: sum = ", sum/100.0
def exo5():
player1 = 0
player2 = 0
#--- keep on playing as long as the two players' scores is less than 3 apart---
while abs( player1 - player2 ) < 3:
#--- get user input and make sure it is valid ---
play = raw_input( "Enter players draw: " ).upper()
while not ( play in [ "PP", "RR", "SS", "PR", "PS", "RP", "RS", "SP", "SR" ] ):
play = raw_input( "Invalid input: try again: " ).upper()
#--- check who's winning ---
if play in [ "PR", "RS", "SP" ]:
player1 += 1
if play in [ "RP", "SR", "PS" ]:
player2 += 1
print "Player1: %d -- Player2: %d" % ( player1, player2 )
#--- print winner ---
if player1 > player2:
print "Player 1 wins!"
else:
print "Player 2 wins!"
def exo6():
c1 = 'a'
while c1 <= 'b':
c2 = 'a'
while c2 <= 'z':
print "111c-" + c1 + c2
# see http://docs.python.org/library/functions.html
c2 = chr( ord( c2 ) + 1 )
c1 = chr( ord( c1 ) + 1 )
def main():
print "Exercise 1"
print "exo1() returns", exo1()
print "Exercise 2"
ans = exo2()
print "exo2() returns", ans
exo3( raw_input( "file name? " ), raw_input( "keyword? " ) )
exo3b( raw_input( "file name? " ), raw_input( "keyword? " ) )
exo4()
exo5()
exo6()
main()