Ошибка с плавающей точкой
Как уже говорили другие, вы предполагаете, что вход будет плавающим.Либо используйте float()
или eval()
вместо int()
:
intWage = float(raw_input("Enter employee's wage: "))
, либо используйте input()
вместо int(raw_input())
:
intWage = input("Enter employee's wage:")
Оба будут выполнять одно и то же,Да, и измените intWage
на floatWage
по крайней мере, или даже лучше, не используйте венгерскую нотацию.
Код
Что касается вашего кода, я сделал пару вещей:
- Используется
break
и / или return
для завершения циклов вместо отслеживания логических значений (в этом и заключается цель операторов break
и continue
) - Изменено
intWage
на floatWage
- Переписано сравнение чисел более кратким способом (
x <= y and x >= z
можно записать как z >= x >= y
) - Добавлены операторы возврата.Я не понимаю, почему вы не поставили их сами, если только вы не хотите присвоить
None
на strUserName
, strWage
и strHours
) - Добавил цикл, который вы запрашивали при запросесведения о сотруднике.
- Изменено
getDone()
для работы с циклом.
import cPickle</p>
<pre><code>def getName():
strName = "dummy"
lstNames = []
strName = raw_input("Enter employee's Name: ")
lstNames.append(strName.title() + " \n")
return strName
def getWage():
lstWage = []
strNum = "0"
while True: #Loop to stay in program until valid data is entered
try:
floatWage = float(raw_input("Enter employee's wage: "))
if 6.0 <= floatWage <= 20.0:
lstWage.append(floatWage)
return floatWage
else:
print "Wage must be between $6.00 and $20.00"
except ValueError: #Catches ValueErrors from conversion to float
print "Invalid entry"
def getHours():
lstHours = []
while True: #loop to stay in program until valid data is entered
try:
intHrs=int(raw_input("Enter number of hours worked: "))
if 1.0 <= intHrs <= 60.0:
return intHrs
else:
print "Hours worked must be 1 through 60."
except ValueError: #Catches ValueErrors from conversion to int
print "Invalid entry"
def getDone():
strDone = ""
while True:
srtDone = raw_input('Type "DONE" if you are finished entering names, otherwise press enter: ')
if strDone.strip().lower() == "done":
return True
else:
print "Type another empolyee name"
while not getDone():
strUserName = getName()
strWage = getWage()
strHours = getHours()
Пример break
и continue
Операторы break
внутрицикл (for
и while
) завершает цикл и пропускает все предложения else (если они есть).
Операторы continue
пропускают остальную часть кода в цикле, а продолжает цикл, как будто ничего не произошло.
Предложение else
в конструкции for...else
выполняет кодовый блок, когда цикл исчерпал все элементы и вышел нормально, т. Е. Когда онне завершается break
или чем-либо.
for no in range(2, 10):
for factor in range(2, no):
if no % factor == 0:
if factor == 2:
print "%d is even" % no
continue
# we want to skip the rest of the code in this for loop for now
# as we've already done the printing
print "%d = %d * %d" % (no, factor, n/x)
break
# We've asserted that the no. isn't prime,
# we don't need to test the other factors
else:
# if 'break' wasn't called
# i.e., if the loop fell through w/o finding any factor
print no, 'is a prime number'