2016-10-10 4 views
-2

나는 대학의 과제에 대한 바람 오름 지수 코드를 작성 중입니다. 교수는 Try/Except Blocks를 사용하지 않고 공백이나 글자의 사용자 입력시 코드가 충돌하는 것을 막기를 원합니다. (그는 문자열 메서드 만 참조).Try/Except 대신 String을 사용하면 충돌을 방지 할 수 있습니다 - How to?

대신 오류 메시지를 넣어야합니다. ("잘못된 입력, 숫자 만")

string.isdigit 및 string.isnumeric을 사용하려고 시도했지만 정수로 음수도를 허용하지 않습니다.

제안 사항? (아래 코드) 다른 "if"문이 작동합니까?

This is the code so far.

+0

은 아마'-'은'.isdigit' ...'userstr.replace 전에 ('-', '')를 제거 (isdigit에)를' – beroe

+0

을. 문제가 해결 되었다면 답을 표시 한 것과 같은 질문을 실제로 편집해서는 안되며 새로운 질문을 던져야합니다. 편집중인 내용을 계속 변경하고 질문을 변경하면 사이트가 엉망이됩니다. 게다가 사람들은 숙제를 "라이브 블로깅"하는 것을 좋아하지 않으며 투표를하는 경향이 있습니다. – beroe

+0

@ 베리가 말한 것. 질문을 명확히하고 세부 사항을 추가하려면 편집 기능을 사용해야합니다. 다른 질문을하기 위해 그것을 남용하지 마십시오. 지금 편집을 롤백했습니다. – Kos

답변

0

구두점 교체 :

if temperature.replace('-','').replace('.','').isnumeric(): 
+0

누군가 내 게시물에 투표를 했으므로 별도의 질문을 할 수 없었습니다 ... 대답 할 수 있으리라 생각하십니까 ?? –

0

무한 루프를 사용하여 모든 것이 잘 보인다 확인합니다. 오류가있을 때마다 continue 문을 사용하십시오. 모든 검사와 변환이 완료되면 break 문을 사용하십시오.

import re 
import sys 
while True: 
    print("Temperature") 
    s = sys.stdin.readline().rstrip('\n') 
    if re.match("^-?[0-9]+(\\.[0-9]+)?$", s) is None: 
     print("Doesn't look like a number") 
     continue 
    if '.' in s: 
     print("Number will be truncated to integer.") 
    temp = int(float(s)) 
    if not (-50 <= temp <= 5): 
     print("Out of range") 
     continue 
    break 
+0

빠른 응답 주셔서 감사합니다,하지만 내 질문은 시도/제외 블록을 사용하지 않고 지정합니다. –

+0

너무 빠르다고 생각하세요. string.isnumeric() 대신 정규 표현식을 사용할 수 있습니다. "^ -? [0-9] + (\\. [0-9] +)? $"는 트릭을 수행해야하며 소수점도 허용합니다. –

+0

조금 더 구체적으로 질문을 업데이트했습니다. 비 숫자를 허용하지 말고 대신 오류 메시지를 표시해야합니다. 다른 "if"문을 올바르게 사용해야합니까? –