Ограничение числа циклов в заявлении? - PullRequest
0 голосов
/ 03 октября 2018

У меня есть задание для моего класса основ программирования.В этом случае я должен принимать неверные данные определенное количество раз (в данном случае пять) до завершения программы.Кажется, что книга не объясняет ограниченное количество циклов в этом контексте, поэтому я включил мой код для руководства.Как написано, он продолжает цикл и не останавливается.

max = 5
#Input miles to be converted
miles = float(input('Enter the number of miles to convert to kilometers: '))
milesToKms = miles*1.6 #miles to kilometers formula
for counter in range(max):
    if miles >= 0:
        print ('Miles converted: ', miles)
        print ('Kilometers: ', milesToKms) #display kilometers result
        break
    elif miles <0:
        while miles < 0:
            print ('Invalid value entered.')
            miles = float(input('Enter a valid number of miles to convert: '))
else:
    print ('Too many invalid entries submitted.')
    exit ()              

Ответы [ 3 ]

0 голосов
/ 03 октября 2018

Ваш внутренний цикл while вызывает проблему:

max = 5
#Input miles to be converted
for counter in range(max):
    miles = float(input('Enter the number of miles to convert to kilometers: '))
    milesToKms = miles*1.6 #miles to kilometers formula
    if miles >= 0:
        print ('Miles converted: ', miles)
        print ('Kilometers: ', milesToKms) #display kilometers result
        break
    elif miles <0:
        print ('Invalid value entered.')

if counter == (max - 1):
    print ('Too many invalid entries submitted.')
    exit ()

Допустимый вывод:

Enter the number of miles to convert to kilometers: 10
('Miles converted: ', 10.0)
('Kilometers: ', 16.0)

Недопустимый вывод:

Enter the number of miles to convert to kilometers: -1
Invalid value entered.
Enter the number of miles to convert to kilometers: -2
Invalid value entered.
Enter the number of miles to convert to kilometers: -3
Invalid value entered.
Enter the number of miles to convert to kilometers: -4
Invalid value entered.
Enter the number of miles to convert to kilometers: -5
Invalid value entered.
Too many invalid entries submitted.
0 голосов
/ 03 октября 2018

Решение для расчета до тех пор, пока 5 не будут введены неправильные данные:

import sys

invalids = 0
maxWrongInputs = 5

# loop until too many wrongs were done
while invalids < maxWrongInputs:
    miles = float(input('Enter the number of miles to convert to kilometers:'))
    if miles >= 0:
        milesToKms = miles * 1.6 
        print('Miles converted:', miles)
        print('Kilometers:', milesToKms) 
    else:  
        # add another to your counter of invalid attempts
        invalids += 1
        print('Invalid value entered.')
else:
    sys.exit('Exited after {} invalid entries.'.format(invalids))

Вход: 3. 4. 5. 6. 7. 8. -1. -1. -1. 4. -1. -1.

Выход:

Enter the number of miles to convert to kilometers:3
Miles converted: 3.0
Kilometers: 4.800000000000001
Enter the number of miles to convert to kilometers:4
Miles converted: 4.0
Kilometers: 6.4
Enter the number of miles to convert to kilometers:5
Miles converted: 5.0
Kilometers: 8.0
Enter the number of miles to convert to kilometers:6
Miles converted: 6.0
Kilometers: 9.600000000000001
Enter the number of miles to convert to kilometers:7
Miles converted: 7.0
Kilometers: 11.200000000000001
Enter the number of miles to convert to kilometers:8
Miles converted: 8.0
Kilometers: 12.8
Enter the number of miles to convert to kilometers:-1    # 1.
Invalid value entered.
Enter the number of miles to convert to kilometers:-1    # 2.
Invalid value entered.
Enter the number of miles to convert to kilometers:-1    # 3.
Invalid value entered.
Enter the number of miles to convert to kilometers:4
Miles converted: 4.0
Kilometers: 6.4
Enter the number of miles to convert to kilometers:-1    # 4.
Invalid value entered.
Enter the number of miles to convert to kilometers:-1    # 5.
Invalid value entered.
Exited after 5 invalid entries.
0 голосов
/ 03 октября 2018

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

Я немного его очистил, чтобы удалить лишние *Код 1005 *, который также обеспечивает побочную выгоду от отказа от ввода для ввода после неудачной последней попытки, когда цикл все равно остановится:

import sys

max = 5
for counter in range(max):
    # Input miles to be converted
    miles = float(input('Enter the number of miles to convert to kilometers:'))
    if miles >= 0:
        # May as well defer calculation of milesToKms until we know
        # the miles value is valid
        milesToKms = miles * 1.6 # miles to kilometers formula
        print('Miles converted:', miles)
        print('Kilometers:', milesToKms) #display kilometers result
        break
    else:  # No need for elif miles < 0; anything not valid is invalid
        print('Invalid value entered.')
else:
    # sys.exit is correct way to exit program, and it can output error for you
    sys.exit('Too many invalid entries submitted.')
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...