2016-12-26 4 views
0

Как и многие другие, я новичок в Python. Я работаю над фрагментом, который просит пользователя указать свой идентификатор, а затем проверяет, имеет ли идентификатор ровно 6 цифр. Затем код попросит пользователя подтвердить свой идентификатор, и если они ошибочно, он позволяет их сбросить. Если пользователь подтверждает правильность их ввода, он запрашивает идентификатор местоположения и следует по тому же пути. Если оба идентификатора подтверждены, тогда пользователь может перейти к остальной части проекта.Python - Вложенный IF

Это то, что нужно будет вводить в начале каждого использования.

Вопрос: Я работаю в трехстороннем порядке.

1.) Я могу войти в EmpId 101290, а иногда он говорит мне, что это действительная запись в то время как другие это обыкновение (но 101256 работает независимо - как 6 цифр)

2.) Ввод «1» в подтвердите идентификатор, код переместится в блок 2 и запросит идентификатор местоположения, но если пользователь вводит «2», чтобы сказать, что идентификатор сотрудника неверен, он все равно перемещается.

Любые советы о том, что здесь необходимо изменить здесь?

import time 
print('What is your employee ID?') #user assigned ID 
empID = input() 
while empID != 0: 
    print('Try again.') 
    empID = input() 

# employee ID is only 6 digits in length, no letters 
    if len(empID) != 6: 
     print('Try again.') 
    elif len(empID) == 6: 
     print('Thank you. Your ID is set to ' + empID + '.') 
     time.sleep(.5) 
     print('Is this correct?''' 
       '[1] Yes [2] No ') 
     yesNo = input() 
     while True: 
      yesNo == '1' 
      print('Thank you. ID set.') 
      break 
# reset ID 
     else: 
      print('ID has been reset. Please enter your employee ID.') 
      empID = input() 
      break 
    break 

#Store Location ID 
print('What is your Location ID?') 
locID = input() 
while locID != 0: 
    print('Try again.') 
    locID = input() 

# store locations are 3-5 digits 
# TODO: prepend any input with less than len 5 with 0 
    if len(locID) != 5: 
     print('Try again.') 
    elif len(locID) == 5: 
     print('Thank you. Your location is set to ' + locID + '.') 
     time.sleep(.5) 
     print('Is this correct?''' 
       '[1] Yes [2] No ') 
     yesNo = input() 
     while True: 
      yesNo == '1' 
      print('Thank you. Location ' + locID + 'set.') 
      break 
     else: 
      print('Location ID has been reset. Please enter your location code.') 
      empID = input() 
      break 
     break 
    break 
#next 
+0

'if' петли не существуют. –

+0

Отпечаток неправильный, код здесь в вопросе недопустим синтаксис. Если вы не исправите это, мы не сможем. Измените свой вопрос, скопируйте код в вопрос еще раз, выберите все его и нажмите кнопку фигурных скобок, чтобы отступы (таким образом, форматируя его как блок кода). –

+0

Хорошо, тогда я назвал это чем-то не так. –

ответ

2

Я вижу некоторые ошибки в вашем коде для начала.

while True: 
    yesNo == '1' 

yesNo == '1' это условие утверждение, которое возвращает истину или ложь в зависимости от пользовательского ввода, но он не используется в качестве условия в любом

if len(empID) != 6: 
    print('Try again.') 
elif len(empID) == 6: 

`elif len(empID) == 6:` is redundant.. a simple else will do 

Что бы я сделал это: Определить функции проверить учетные данные пользователя:

def isEmpID(id): 
    ''' 
    Employee ID is 6 characters in Length 
    ''' 
    if len(id) != 6: 
     return False 
    return True 


def isStoreID(id): 
    ''' 
    Store ID is 3-6 characters in Length 
    Note: The function when called with id, checks if the length is between (exclusive) 3 and (inclusive) 6 and returns true if condition is satisfied else false which is the default return policy 
    ''' 
    if 3 < len(id) <= 6: 
     return True 
    return False 


validEmpID = False 
validStoreID = False 
while not (validEmpID and validStoreID): # Both has to be True to exit the loop, Otherwise the condition continues to go to True. 
    if not validEmpID: 
     print('Enter Employee ID:') 
     empID = input() 
     validEmpID = isEmpID(empID) 
     if not validEmpID: 
      print('Invalid Employee ID\nTry Again...\n') 
      continue 
    print('Enter Store ID:') 
    strID = input() 
    validStoreID = isStoreID(strID) 
    if not validStoreID: 
     print("Invalid Store ID\nTry Again!...\n") 
     continue 

Здесь цикл существует, или другими словами продолжить выполнение кода после этого только если оба го e переменные True

+0

Я ценю понимание и исправления. Он продолжает зависать и давать мне синтаксическую ошибку, если я не отбрасываю 'next' между' def' -блоками и ожидает отступ, когда я изменяю 'elif' на предложенный' else'. –

+0

'next()' - функция, используемая для итераторов. Вы не нуждаетесь в этом нигде в своем коде. Также 'else' используется только с' if 'not with' while'. – dhishan

+0

Сделайте свой отредактированный код выше. Позвольте мне взглянуть на это – dhishan

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