Используете слишком много циклов while True :. - PullRequest
0 голосов
/ 26 мая 2020

Мой код будет ниже. Я практикую Python и хотел сделать простой калькулятор чаевых в ресторане. Он работает нормально, но мне кажется, что я слишком сильно полагался на циклы while. Для каждого приглашения ввода я хотел, чтобы сценарий проверял, был ли ввод типом int / float, и если нет, он будет продолжать циклы до тех пор, пока не будет дан правильный ввод.

* 1002 хороший способ go о такой «проверке»?

ТАКЖЕ:

Прежде, чем я помещу «# ОПРЕДЕЛЕНИЕ ПРОЦЕНТА СОВЕТОВ НА ОСНОВЕ КАЧЕСТВА» и следующие разделы отдельно, пока я oop (изначально они были сами по себе в конце кода, НЕ в al oop), мне не удалось заставить скрипт перейти к этим разделам после «Как было качество ваших услуг?» раздел. Скрипт продолжал зацикливаться ТОЛЬКО в этом разделе. Есть идеи, почему? Кажется, он отформатирован точно так же, как и два других цикла while перед ним.

Всем спасибо. Вот мой код:

while True :
    try :
        total = float(input('Enter the total cost of the meal: '))
        if total < 1 :
            print('Please enter a value greater than 0. ')
            continue
    except :
        print('Please enter a numerical value. ')
        continue

    while True :
        try :
            guests = int(input('How many guests? '))
            if guests < 1 :
                print('Please enter a value greater than 0. ')
                continue
        except :
            print('Please enter a numerical value. ')
            continue

        while True :
            try :
                quality = int(input('How was the quality of your service? 1 - 3: '))
                if quality > 3 or quality < 1 :
                    print('Please enter a value between 1 and 3. ')
                    continue
            except :
                print('Please enter a numerical value. ')
                continue

            #DETERMINING TIP PERCENTAGE BASED ON QUALITY
            while True :
                if quality == 1 :
                    tip_percent = 0.15
                elif quality == 2 :
                    tip_percent = 0.20
                elif quality == 3 :
                    tip_percent = 0.25

                #CALCULATING PER PERSON TIP AMOUNT
                gross_tip = total * tip_percent
                perperson_tip = (total / guests) * tip_percent

                #PRINTING TIP PER PERSON AND GROSS TIP
                print('Per-person tip: ' + str(perperson_tip) + '\nGross tip: ' + str(gross_tip))
                exit()

Ответы [ 2 ]

0 голосов
/ 26 мая 2020

Вы можете использовать свои условия принятия, чтобы разорвать циклы прямо внутри while. Тогда вы можете вообще избежать явных break и continue и странных бесконечных while True.

total = 0
while total < 1:
    try :
        total = float(input('Enter the total cost of the meal: '))
        if total < 1 :
          print('Please enter a value greater than 0. ')
    except :
        print('Please enter a numerical value. ')

guests = 0
while guests < 1:
    try :
        guests = int(input('How many guests? '))
        if guests < 1 :
            print('Please enter a value greater than 0. ')
    except :
        print('Please enter a numerical value. ')

quality = 0
while quality > 3 or quality < 1  :
    try :
        quality = int(input('How was the quality of your service? 1 - 3: '))
        if quality > 3 or quality < 1 :
            print('Please enter a value between 1 and 3. ')
    except :
        print('Please enter a numerical value. ')



if quality == 1 :
    tip_percent = 0.15
elif quality == 2 :
    tip_percent = 0.20
elif quality == 3 :
    tip_percent = 0.25

#CALCULATING PER PERSON TIP AMOUNT
gross_tip = total * tip_percent
perperson_tip = (total / guests) * tip_percent

#PRINTING TIP PER PERSON AND GROSS TIP
print('Per-person tip: ' + str(perperson_tip) + '\nGross tip: ' + str(gross_tip))
0 голосов
/ 26 мая 2020

Ваша основная проблема в том, что все ваши циклы while вложены друг в друга. Для этого нет веских причин.

while True:
  try:
    total = float(input('Enter the total cost of the meal: '))
  except:
    print('Please enter a numerical value.')
    continue
  if total < 1:
    print('Please enter a value greater than 0.')
    continue
  break

while True:
  try:
    guests = int(input('How many guests? '))
  except:
    print('Please enter a numerical value. ')
    continue
  if guests < 1:
    print('Please enter a value greater than 0. ')
    continue
  break

# and so on
...