2016-11-05 2 views
0

사용자 입력을 숫자로 가져 와서 유효성을 확인하고 반환하려고합니다. 번호가 유효하지 않으면 입력 과정을 반복하고 싶습니다. 내가 입력하지만 경우 :함수는 이전 값을 반환합니다.

  1. "5b"
  2. "50.4"

기능은 50.4를 반환하지 않습니다. 대신 나머지는 첫 번째 함수 호출이 실행될 때 5.0을 반환합니다. 위의 문제를 해결하면 50.4 만받을 수 있습니까?

def inputGoal(): 
    goalFiltered = "" 
    print ('1: ' + str(goalFiltered)) 
    goal = input("Input number: ") 

    for char in goal: 
     matched = False 
     for sign in comparator: 
      if (sign == char): 
       matched = True 
       if (char != ','): 
        goalFiltered += sign 
       elif (char == ','): 
        goalFiltered += '.' 
     if (matched == False): 
      print ("Please repeat input, valid characters are: 0 1 2 3 4 5 6 7 8 9 , .") 
      inputGoal() 
      #return 
    goalFiltered = float(goalFiltered) 
    return (goalFiltered) 

비교기 변수는 다음과 같습니다

comparator = ['0','1','2','3','4','5','6','7','8','9',',','.'] 
+2

은 (inputGoal을 반환'사용)'대신'inputGoal()'을 사용합니다. – smarx

+0

@smarx ** 감사합니다. 작동합니다! ** 설명하는 마음, 왜 이것이 ** 나머지를 실행하지 못하게하고, 나머지는 왜 돌아가는 지, 돌아가는 이유는 무엇입니까? 공식 응답을 써주십시오. 이후 독자를 위해 받아 들일 수 있습니다. – Alexander

+1

'return'이 없으므로, 코드는 재귀 호출을 수행 한 후에도 실행을 계속합니다 (그리고 반환 값을 던집니다). 일단 루프를 끝내면'goalFiltered = float (goalFiltered)'와'return goalFiltered'를 실행 했으므로 목록에있는 모든 문자에'float'을 적용한 결과를 얻었습니다. – smarx

답변

2

나는 당신의 문제가 올바르게, 당신이 바로이 할 수 있다고 생각 이해 경우 : 재귀 호출에

while True: 
    ask = input("Input the number:\t") #The \t just puts a tab so it looks nice 
    if ask == float(ask): 
     break 
    else: 
     print("The number is incorrect. Try again.") 
     continue 
+0

'continue'는 여기서 아무 것도하지 않는 것 같습니다. – smarx

관련 문제