0보다 큰 숫자 만 허용하도록 입력을 제어하려하지만이 텍스트 블록을 테스트 할 때 처음에 잘못된 문자 (문자열, 0 또는 음수) 오류 출력을 수신 한 다음 유효한 값을 입력하면 방금 입력 한 유효한 값 대신 입력 한 첫 번째 값을 반환합니다. 그러면 입력 불일치 또는 비논리적 값으로 인해 나머지 스크립트가 실패합니다. 나는 "return x"주위를 움직이려 고 노력했다. 그러나 은 어느 쪽이라도 똑같이한다.은 두 번째 경우에 "할당 전에 참조 된 변수 x"라고 말합니다.파이썬 3 - 숫자 입력 필터링 문제
def getPrice():
try:
x = float(input("What is the before-tax price of the item?\n"))
if x <= 0:
print("Price cannot be less than or equal to zero.")
getPrice()
return x
except ValueError:
print("Price must be numeric.")
getPrice()
및
def getPrice():
try:
x = float(input("What is the before-tax price of the item?\n"))
if x <= 0:
print("Price cannot be less than or equal to zero.")
getPrice()
except ValueError:
print("Price must be numeric.")
getPrice()
return x
나는이 문제를 어떻게 해결할 수 있습니까?
궁금한 점이 있다면, 이것은 학교 과제 일 뿐이며 전체 프로그램을 완전히 완료했지만 디버깅 방법을 알 수는 없습니다.
편집 :
지금은 작업 방법을 가지고:
def getPrice():
while True:
try:
x = float(input("What is the before-tax price of the item?\n"))
except ValueError:
print("Price must be numeric.")
continue
if x <= 0:
print("Price cannot be less than or equal to zero.")
else:
return x
break
을 원래의 코드 블록을 고정 (하지만 여전히 재귀 사용) : 나는 않을거야
def getPrice():
try:
x = float(input("What is the before-tax price of the item?\n"))
if x <= 0:
print("Price cannot be less than or equal to zero.")
x = getPrice()
except ValueError:
print("Price must be numeric.")
x = getPrice()
return x
getPrice() 함수의 기능은 무엇입니까? 아마도 우리는 모든 코드를 보여 주어야 할 것입니다. x는 항상 마지막으로 할당 된 값을 유지합니다. 코드에 한 번만 지정하십시오. 변수 범위를 이해하는 데 어려움을 겪고있는 것 같습니다. – korylprince
죄송합니다. 잊어 버리고 질문에 함수 헤더를 추가했습니다. 오류가 발생하면 다시 시도하기 위해 다시 자체를 참조합니다 (나쁜 실행인지 아닌지 확실하지 않음). – Sparx
코드의 형식이 잘못 지정된 것 같지만 요점을 얻습니다. 당신은 재귀를 사용하고 있습니다. 어떤 경우에는 괜찮습니다.하지만이 경우에는 스택 제한을 초과 한 후 사용자로부터 잘못된 입력이 프로그램을 중단시킬 수 있기 때문에 실제로는 그렇지 않습니다. – korylprince