2017-10-21 144 views
0

J'ai ce programme:Je ne peux pas faire le programme continue à boucle si son entrée non valide est entré

number = int(input('Contact Number:')) 
def validatePhoneNumber(number): 
    count = 0 
    while True: 
     while number > 0: 
      number = number//10 
      count = count+1 
     if (count == 10) : 
      break 

     elif (count > 10) : 
      print('Invalid phone number') 
      return -1 

     elif (count < 10): 
      print('Invalid phone number') 
      return -1 

validatePhoneNumber(number) 

il apparaîtra comme ceci:

Contact Number:1234 
Invalid phone number 
>>> 

Je veux continuer à boucle jusqu'à ce que un numéro à 10 chiffres est entré puis il s'arrêtera.

Contact Number:1234567890 
>>> 

La condition est que si le nombre est manquant ou non valide, renvoie -1. Est-ce qu'il me manque quelque chose dans le programme? Merci

+0

C'est une utilisation terrible d'une boucle infinie. Qu'en est-il de vérifier la longueur seulement quand un personnage a été entré? – the4kman

+1

Pourquoi le traitez-vous comme un int et pas une chaîne? Si '0000000001' était un numéro de téléphone valide, vous vous débarrassez de 9 chiffres ... Pourquoi pas juste quelque chose comme:' if number.isdigit() et len ​​(number) == 10: break' sinon, continuez à demander –

+0

Je pense que ce que vous voulez faire est de mettre la dernière et la première rangée dans une boucle do while alors si l'entrée est fausse, vous appelez à nouveau la fonction – Yonlif

Répondre

0

Qu'en est-ce:

number = input('Contact Number:') # it's a str now, so we can use len(number) 
def validatePhoneNumber(number): 
    while len(number) != 10: 
     number = input("Please enter a 10-digit contact number: ") 
    return number 

number = validatePhoneNumber(number) 

C'est une approche plus pythonique et donc plus facile à comprendre et à déboguer. De même que d'autres commentaires ont souligné, les 0 principaux ne sont pas dépouillés maintenant.