2016-02-11 2 views
2

Я работаю над этой простой задачей, когда мне нужно использовать 2 цикла. Первый цикл while проверяет, не превышает ли число часов меньше 0, если цикл затем должен продолжать запрашивать пользователя. Вот мой код:Как выйти из цикла while в python?

hours = float(input('Enter the hours worked this week: ')) 

count = 0 
while (0 > hours): 
    print ('Enter the hours worked this week: ') 
    count = count + 1 

pay = float(input('Enter the hourly pay rate: ')) 
while (0 > pay): 
    print ('Enter the hourly pay rate: ') 
    count = count + 1 

total_pay = hours * pay 

print('Total pay: $', format(total_pay, ',.2f')) 
+0

Пожалуйста, используйте правильное форматирование. Ваш код не будет работать так. – Goodies

ответ

4

выход из цикла либо с помощью break или делает условие ложным.

В вашем случае вы берете данные от пользователя, а если hours < 0, вы распечатываете приглашение и обновляете счет, но вы не обновляете часы.

while (0 > hours): 
    print ('Enter the hours worked this week: ') 
    count = count + 1 

должно быть:

while (0 > hours): 
    hours = float(input('Enter the hours worked this week: ')) 
    count = count + 1 

Аналогично для оплаты:

while (0 > pay): 
    pay = float(input('Enter the hourly pay rate: ')) 
    count = count + 1 
+0

@ munk Как бы выглядел ваш последний код? – progx

+1

@progx Я не собираюсь делать домашнее задание для вас. Посмотрите на свое решение и посмотрите на мое. Должно быть очень ясно, где вам нужно внести изменения. Вы заменяете одну строку в своем коде на одну строку в моем коде для каждого цикла while, который вы использовали. – munk

+0

Я сделал то, что вы предложили, но он терпит неудачу после того, как я напечатаю отрицательные числа 2 для отработанных часов. Я использую python 3.4, кстати, – progx

4
break

является то, что вы ищете.

x = 100 
while(True): 
    if x <= 0: 
     break 
    x -= 1 
print x # => 0 

Что касается вашего примера, нет ничего, что могло бы вызвать разрыв. Например:

hours = float(input('Enter the hours worked this week: ')) 

count = 0 

while (0 > hours): 
    print ('Enter the hours worked this week: ') 
    count = count + 1 

Вы не редактируете переменную hours на всех. Это просто продолжало бы распечатывать "Enter the hours worked this week: " и увеличивать count до бесконечности. Нам нужно знать, какая цель - предоставить больше помощи.

+0

Почему не 'while (x> 0)'? –

+1

В противном случае 'break' не будет отображаться. –

+0

Точка - показать OP, что на самом деле происходит. Значение while (True) представляет собой бесконечный цикл без инструкции break. – Goodies

1

Ну, другой ответ показывает вам, как выйти из цикла while, но вы также не назначаете переменные заработной платы и часов. Вы можете использовать встроенную функцию ввода, чтобы получить то, что пользователь ввел в в вашу программу

hours = float(input('Enter the hours worked this week: ')) 

count = 0 
while (0 > hours): 
    hours = input('Enter the hours worked this week: ') 
    count = count + 1 

pay = float(input('Enter the hourly pay rate: ')) 
while (0 > pay): 
    pay = input('Enter the hourly pay rate: ') 
    count = count + 1 

total_pay = hours * pay 

print('Total pay: $', format(total_pay, ',.2f')) 
+0

@ Гаррет ваш код не работает после ввода 2 отрицательных чисел. – progx

+0

@ Garret, если я это сделаю: введите часы работы на этой неделе: -30, а затем введите время работы на этой неделе: -12. Я получаю сообщение об ошибке – progx

+0

Какая ошибка у вас? На моей машине он спрашивает меня, пока я не передам положительное значение –

Смежные вопросы