Reputation: 23
I have an assignment for my programming fundamentals class. In this, I have to accept invalid inputs a certain number of times (in this case, five) before the program terminates. The book doesn't seem to explain limiting number of loop runs in this context, so I've included my code for guidance. As written, it continues to loop and doesn't stop.
max = 5
#Input miles to be converted
miles = float(input('Enter the number of miles to convert to kilometers: '))
milesToKms = miles*1.6 #miles to kilometers formula
for counter in range(max):
if miles >= 0:
print ('Miles converted: ', miles)
print ('Kilometers: ', milesToKms) #display kilometers result
break
elif miles <0:
while miles < 0:
print ('Invalid value entered.')
miles = float(input('Enter a valid number of miles to convert: '))
else:
print ('Too many invalid entries submitted.')
exit ()
Upvotes: 1
Views: 76
Reputation: 51643
Solution to keep calculating until 5
wrong inputs are given:
import sys
invalids = 0
maxWrongInputs = 5
# loop until too many wrongs were done
while invalids < maxWrongInputs:
miles = float(input('Enter the number of miles to convert to kilometers:'))
if miles >= 0:
milesToKms = miles * 1.6
print('Miles converted:', miles)
print('Kilometers:', milesToKms)
else:
# add another to your counter of invalid attempts
invalids += 1
print('Invalid value entered.')
else:
sys.exit('Exited after {} invalid entries.'.format(invalids))
Input: 3. 4. 5. 6. 7. 8. -1. -1. -1. 4. -1. -1.
Output:
Enter the number of miles to convert to kilometers:3
Miles converted: 3.0
Kilometers: 4.800000000000001
Enter the number of miles to convert to kilometers:4
Miles converted: 4.0
Kilometers: 6.4
Enter the number of miles to convert to kilometers:5
Miles converted: 5.0
Kilometers: 8.0
Enter the number of miles to convert to kilometers:6
Miles converted: 6.0
Kilometers: 9.600000000000001
Enter the number of miles to convert to kilometers:7
Miles converted: 7.0
Kilometers: 11.200000000000001
Enter the number of miles to convert to kilometers:8
Miles converted: 8.0
Kilometers: 12.8
Enter the number of miles to convert to kilometers:-1 # 1.
Invalid value entered.
Enter the number of miles to convert to kilometers:-1 # 2.
Invalid value entered.
Enter the number of miles to convert to kilometers:-1 # 3.
Invalid value entered.
Enter the number of miles to convert to kilometers:4
Miles converted: 4.0
Kilometers: 6.4
Enter the number of miles to convert to kilometers:-1 # 4.
Invalid value entered.
Enter the number of miles to convert to kilometers:-1 # 5.
Invalid value entered.
Exited after 5 invalid entries.
Upvotes: 0
Reputation: 155403
You don't need or want the while
loop here. Your outer for
loop limits the number of attempts on its own, and rechecks the condition on each loop, so it does the job all by itself.
I've cleaned it up a bit to remove redundant input
code, which also provides the side-benefit of avoiding prompting for input after the final attempt failed, when the loop would stop anyway:
import sys
max = 5
for counter in range(max):
# Input miles to be converted
miles = float(input('Enter the number of miles to convert to kilometers:'))
if miles >= 0:
# May as well defer calculation of milesToKms until we know
# the miles value is valid
milesToKms = miles * 1.6 # miles to kilometers formula
print('Miles converted:', miles)
print('Kilometers:', milesToKms) #display kilometers result
break
else: # No need for elif miles < 0; anything not valid is invalid
print('Invalid value entered.')
else:
# sys.exit is correct way to exit program, and it can output error for you
sys.exit('Too many invalid entries submitted.')
Upvotes: 2
Reputation: 325
your inner while loop is causing the issue:
max = 5
#Input miles to be converted
for counter in range(max):
miles = float(input('Enter the number of miles to convert to kilometers: '))
milesToKms = miles*1.6 #miles to kilometers formula
if miles >= 0:
print ('Miles converted: ', miles)
print ('Kilometers: ', milesToKms) #display kilometers result
break
elif miles <0:
print ('Invalid value entered.')
if counter == (max - 1):
print ('Too many invalid entries submitted.')
exit ()
Valid output:
Enter the number of miles to convert to kilometers: 10
('Miles converted: ', 10.0)
('Kilometers: ', 16.0)
Invalid output:
Enter the number of miles to convert to kilometers: -1
Invalid value entered.
Enter the number of miles to convert to kilometers: -2
Invalid value entered.
Enter the number of miles to convert to kilometers: -3
Invalid value entered.
Enter the number of miles to convert to kilometers: -4
Invalid value entered.
Enter the number of miles to convert to kilometers: -5
Invalid value entered.
Too many invalid entries submitted.
Upvotes: -1