Simple vending machine with one drink in python
Question:
I’m nearly finishing this project but still get an error saying my code doesn’t accept invalid inputs, for example…if I input a string instead of an integer throws an error instead of accepting and show a message.
This is the error i get…
Any help would be really appreciated!
:( coke rejects invalid amount of cents
Did not find "50" in "Amount Due: 20..."
the code:
def main():
total = 0
while True:
total += int(input("Insert one coin at a time: ").strip())
coke = 50
print(total)
if total > coke:
print("Change Owed =", total - coke)
return
elif total == coke:
print("No Change Owed, Here's a coke ")
return
else:
print("Amount Due =", coke-total)
main()
Answers:
You have to remove any excess '
and "
from your string input.
This can be done with the .replace
method:
def main():
total = 0
while True:
total += int(input("Insert one coin at a time: ").replace('"', '').replace("'", '').strip())
coke = 50
print(total)
if total > coke:
print("Change Owed =", total - coke)
return
elif total == coke:
print("No Change Owed, Here's a coke ")
return
else:
print("Amount Due =", coke-total)
main()
If you can’t fulfill the requirement because your code should accept invalid inputs, for example letters, and not crash, you could try the following with a try-expect-block
def main():
total = 0
while True:
try:
total += int(input("Insert one coin at a time: ").strip())
except ValueError:
print("The input is not a number, please only enter numbers")
else:
coke = 50
print(total)
if total > coke:
print("Change Owed =", total - coke)
return
elif total == coke:
print("No Change Owed, Here's a coke ")
return
else:
print("Amount Due =", coke-total)
main()
For more information about using exception i would suggest you to read the Python-documentation
when you say you input a string, do you mean like "20" with quotation marks?
if so put .replace(‘"’,”).replace("’","") next to .strip() will sort that out to get rid of " and ‘ .
total += int(input("Insert one coin at a time: ").strip().replace('"','').replace("'",""))
Try-Except would be a way out, but as we didn’t see it yet in cs50p week 2, i suspect we should find an answer without using it.
The thing your code is missing is a validation to check if the input is a 5, 10 or 25 cent coin. You can do that with:
if input in [5, 10, 25]:
I’m nearly finishing this project but still get an error saying my code doesn’t accept invalid inputs, for example…if I input a string instead of an integer throws an error instead of accepting and show a message.
This is the error i get…
Any help would be really appreciated!
:( coke rejects invalid amount of cents
Did not find "50" in "Amount Due: 20..."
the code:
def main():
total = 0
while True:
total += int(input("Insert one coin at a time: ").strip())
coke = 50
print(total)
if total > coke:
print("Change Owed =", total - coke)
return
elif total == coke:
print("No Change Owed, Here's a coke ")
return
else:
print("Amount Due =", coke-total)
main()
You have to remove any excess '
and "
from your string input.
This can be done with the .replace
method:
def main():
total = 0
while True:
total += int(input("Insert one coin at a time: ").replace('"', '').replace("'", '').strip())
coke = 50
print(total)
if total > coke:
print("Change Owed =", total - coke)
return
elif total == coke:
print("No Change Owed, Here's a coke ")
return
else:
print("Amount Due =", coke-total)
main()
If you can’t fulfill the requirement because your code should accept invalid inputs, for example letters, and not crash, you could try the following with a try-expect-block
def main():
total = 0
while True:
try:
total += int(input("Insert one coin at a time: ").strip())
except ValueError:
print("The input is not a number, please only enter numbers")
else:
coke = 50
print(total)
if total > coke:
print("Change Owed =", total - coke)
return
elif total == coke:
print("No Change Owed, Here's a coke ")
return
else:
print("Amount Due =", coke-total)
main()
For more information about using exception i would suggest you to read the Python-documentation
when you say you input a string, do you mean like "20" with quotation marks?
if so put .replace(‘"’,”).replace("’","") next to .strip() will sort that out to get rid of " and ‘ .
total += int(input("Insert one coin at a time: ").strip().replace('"','').replace("'",""))
Try-Except would be a way out, but as we didn’t see it yet in cs50p week 2, i suspect we should find an answer without using it.
The thing your code is missing is a validation to check if the input is a 5, 10 or 25 cent coin. You can do that with:
if input in [5, 10, 25]: