Функция с циклом "для" - PullRequest
       9

Функция с циклом "для"

1 голос
/ 21 января 2020

Я работаю над очень простой проблемой, но у меня были некоторые проблемы.

Я хочу написать функцию (использующую for l oop), которая проверяет, помещена ли строка входные данные состоят из следующих букв: a, b, c и d. Если строка содержит букву, отличную от a, b, c или d, программа должна выдать сообщение об ошибке. Если строка содержит только 1,2 или 3 из 4 упомянутых букв, она будет правильной.

  • Строка 'abbbbbcd' будет правильной.
  • Строка 'ab' будет правильным.
  • Строка 'ghjja' будет неверной.
  • Жало 'aaabbbcccff' будет неверным.

Это моя текущая версия код:

def string(f):
    for i in range(len(f)):
        if f[i]!='a' or f[i]!='b' or f[i]!='c' or f[i]!=d':
            print('error')
        else:
            print('ok')

Ответы [ 4 ]

4 голосов
/ 21 января 2020

Проблема с вашим кодом:

  • вы используете or вместо and, невозможно, чтобы каждый символ равнялся всем 4 входам
  • You ' пропуская начальную кавычку для d
  • , вы также выводите выходные данные на каждой итерации l oop

, лучше было бы превратить это в функцию.

def only_abcd(f):
    for i in range(len(f)):
        if f[i]!='a' and f[i]!='b' and f[i]!='c' and f[i]!='d':
            return False
    return True

print("ok" if only_abcd(f) else "error")

Вы также можете использовать all и in

if not all(i in "abcd" for i in f):
    print("error")
else:
    print("ok")
1 голос
/ 21 января 2020

Решение:

  1. Используйте and вместо or.
  2. Добавьте отсутствующую начальную кавычку для d.
  3. Используйте переменную флага для отслеживания ошибки.
  4. Не ставьте блок else для if состояние внутри for l oop.

После выполнения приведенных выше инструкций ваш код будет выглядеть следующим образом:

def string(f):
    error=False
    for i in range(len(f)):
        if f[i]!='a' and f[i]!='b' and f[i]!='c' and f[i]!='d':
            print('error')
            error=True
            break
    else:
        print('ok')

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

def string(f):
    letters = ['a','b','c','d']
    error=False
    for i in f:
        if i not in letters:
            error=True
            print('error')
            break
    else:
        print('ok')
1 голос
/ 21 января 2020

Вы можете использовать этот код:

for i in string:
    if i not in ['a', 'b', 'c', 'd']:
        raise Exception('String contains wrong letter')
0 голосов
/ 21 января 2020

Компактный один вкладыш:

def abcd_test(input):
    return False not in [x in "abcd" for x in input]
...