2015-03-05 9 views
0

Итак, я использую модульную арифметику, чтобы определить, в какой день она будет находиться в «х» количестве дней. Я попытался использовать команду break для завершения цикла while, но когда я это сделаю, он печатает, что ответ будет для всех циклов. Это мой код для одной из петельКак закончить цикл while в python 3

while (x) == ('Monday') or ('monday'): 
    if round_4 == ".1": 
     print ("It will be Tuesday") 
    elif round_4 == ".2": 
     print ("It will be Wednesday") 
    elif round_4 == ".3": 
     print ("It will be Thursday") 
    elif round_4 == ".4": 
     print ("It will be Friday") 
    elif round_4 == ".5": 
     print ("It will be Saturday") 
    elif round_4 == ".6": 
     print ("It will be Sunday") 
    elif round_4 == ".7": 
     print ("It will be Monday") 
    elif round_4 == ".8": 
     print ("It will be Tuesday") 
    elif round_4 == ".9": 
     print ("It will be Wednesday") 
    elif round_4 == ".0": 
     print ("It will be Monday AGAIN") 
    else: 
     print ("Sorry, there has been a tecnical difficulty! Please try again!") 

round_4 Если был сказать «0,2" было бы напечатать» .2" Элиф для всех петель в то время. Извините, я немного n00b для python!

+0

Как вы думаете, в чем цель цикла while? – HavelTheGreat

+1

Как и в настоящее время, вы никогда не будете перебирать цикл 'while', поскольку' x' не изменяется внутри него. – HavelTheGreat

ответ

1

Таким образом, я использую модульную арифметику, чтобы определить, в какой день она будет находиться в «х» количестве дней.

Нет, это не так. Python имеет встроенную поддержку модульной арифметики в операторе модуля, %:

>>> 29 % 7 
1 

Вам не нужно перекручивание или рекурсии, чтобы решить эту проблему.

Если у вас есть целый переменная today (с нулевой репутацией в понедельник, один для вторника, и т.д.), это очень простая математика:

return (today+x) % 7 

Вы можете использовать словари для преобразования между именами дня и номера.

0

Оставляя в стороне, является ли этот цикл хорошим способом решения вашей более крупной проблемы, одна из причин, по которой ваша текущая петля while не заканчивается, заключается в том, что вы перепутали это условие. Выражение (x) == ('Monday') or ('monday') всегда верно, поскольку оператор == не распределен по or. Он эквивалентен (x == 'Monday') or 'monday', и поскольку любая непустая строка является правдивой, условие всегда выполняется.

Более правильным способом написать выражение будет x == 'Monday' or x == 'monday', или, возможно, x in ['Monday', 'monday'].

Однако, я хотел бы предложить, используя lower или upper методы на x строку и тестирование только один случай (это позволит в любой форме капитализации): x.lower() == 'monday'.

Еще одна проблема, отмеченная комментарием Elizon, заключается в том, что вы не изменяете значение x в цикле, поэтому, если условие истинно в начале, оно останется истинным навсегда. Если вы ожидаете, что этот код будет работать не чаще одного раза, вы, вероятно, захотите if, а не while.

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