Я застрял в то время как истинный цикл - PullRequest
0 голосов
/ 30 июня 2018

Python 2.7. Я новичок в Python и застрял в цикле True. Простая программа для расчета зарплаты. Когда «стандарт» вводится как буква, он улавливает ошибку и снова переходит к строке «Введите свой тариф». Я хочу, чтобы это повторялось только там, где была зафиксирована ошибка и не начинался ввод всей информации заново. Может кто-нибудь помочь, пожалуйста?

while True:
 try:
    rate = float(raw_input("Enter your rate: "))
    error = float(rate)
    standard = float(raw_input("Enter total standard hours 100%: "))
    error = float(standart) 
 except:
    print 'Not a number'
    continue       
 else:
    sum = standard * rate 
    print sum

Заранее спасибо.

Ответы [ 4 ]

0 голосов
/ 30 июня 2018
while True:
try:
    rate = float(raw_input("Enter your rate: "))
    standard = float(raw_input("Enter total standard hours 100%: "))
except ValueError:
    print( 'Not a number' )
else:
    sum = standard * rate 
    print(sum)
    break
0 голосов
/ 30 июня 2018

Попробуйте разделить стандарт и оценить из одной и той же петли, вот так.

def get_input(text):
    while 1:
        try:
            value = float(raw_input(text))
            break
        except:
            print 'Not a Number'
    return value

rate = get_input("Enter your rate: ")
standard = get_input("Enter total standard hours 100%: ")

sum = standard * rate
print(sum)

Таким образом, будет запрашиваться только значение, которое не удалось.

0 голосов
/ 30 июня 2018

В вашем коде continue инструкция не нужна, так как else инструкция выполняется только в том случае, если не было выдано исключение.

Но чтобы выйти из цикла в «положительном» случае, добавьте инструкцию break после print sum.

И еще одно замечание: измените standart на standard.

0 голосов
/ 30 июня 2018
while True:
    try:
        rate = float(raw_input("Enter your rate: "))
        standard = float(raw_input("Enter total standard hours 100%: "))
    except ValueError:
        print 'Not a number'      
    else:
        sum = standard * rate 
        print sum
        break

Вам нужно добавить перерыв в конце. Также вам не нужно писать error = float(..), когда вы уже пытаетесь ввести его на шаге ввода.

Также в строке error = float(standart) есть опечатка. Это заставит его вечно давать исключения.

Еще одна полезная практика - указывать тип ожидаемой ошибки (ValueError). Это поможет предотвратить такие вещи, как опечатки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...