Как проверить массив для отрицательного # и альфа-ввода в Python - PullRequest
0 голосов
/ 23 ноября 2018

Я пытаюсь проверить массив введенных пользователем данных (пинт крови, собранных за час в течение 7 часов) для отрицательных чисел, пробелов и / или букв.В настоящее время с оператором if, проверяющим ввод пользователя ниже 0, программа получает ошибку типа: «<не поддерживается между экземплярами list и int». </p>

inputPints = []
totalPints = 0
hours = ["#1", "#2", "#3", "#4", "#5", "#6", "#7"]

def userInput():
    for hour in hours:
        inputPints.append(int(input("Enter pints collected for hour {}: ".format(hour))))
        if inputPints<0:
            inputPints.append(int(input("Please enter a whole number {}: ".format(hour))))
userInput()

def userOutput():
    print("")
    print("Average number of pints donated is: ", "{:.2f}".format(import_functions.averagePints(totalPints, 7)))
    print("Most pints donated is: ", import_functions.maxPints())
    print("Least pints donated is: ", import_functions.minPints())
    print("")
userOutput()

Ответы [ 3 ]

0 голосов
/ 23 ноября 2018

Я думаю, вы должны определить свой userInput() метод следующим образом ...

def userInput():
    for hour in hours:
        user_input = -1
        while user_input < 0:
            try:
                user_input = int(input("Enter pints collected for hour {}: ".format(hour)))
            except:
                user_input = -1
            if user_input > -1:
                inputPints.append(user_input)
0 голосов
/ 23 ноября 2018

Как прокомментировал Torxed, вы сравниваете объект типа «список» с объектом типа «int».Возникает ошибка:

'<' не поддерживается между экземплярами 'list' и 'int' </p>

Yo должен либо подтвердить ввод пользователя, прежде чем добавить его в списокили вы можете просмотреть весь список, чтобы найти неправильные / правильные входные данные.

Проверка ввода перед добавлением:

if int(input("Enter pints collected for hour {}: ".format(hours))) > 1:
    #This is ok

Проверка ввода с полным списком

for a in inputPints:
    if int(a) > 1:
        #a is OK.

Я рекомендую вам поместить эти проверки в блок try catch, поскольку приведение типа int () может нарушить ваш код, если он обнаружит некалиброванный символ.

Надеюсь, это поможет!

С уважением

0 голосов
/ 23 ноября 2018

Вы можете использовать регулярные выражения для проверки вашего ввода.Чтобы разрешить только форму # number.numbers, вы можете использовать, например, следующее:

# test for matches on the regex expression. 
if len(re.findall('^#\d+.\d+$', "#-1.30")) > 0:
    # It is valid
    return true
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...