2013-10-27 2 views
2

저는 파이썬에서 프랑스 초보자입니다. 시간 ("Day, Hours, Minutes, Seconds"문자열)이 잘못되었을 때 (예 : 83 초) 우리에게 경고하는 프로그램을 작성하고 싶습니다. 이 프로그램했다 :String in Python

t=input("Put day,hours,minutes,seconds: ") 
t="j,h,m,s" 
if int(t[6])<=0 or int(t[6])>=59: 
    print("Seconds wrong") 
if int(t[4])<=0 or int(t[4])>=59: 
    print("Minutes wrong") 
if int(t[2])<=0 or int(t[2])>=24: 
    print("Hours wrong") 
if int(t[0])<=0 or int(t[0])>=31: 
    print("days wrong") 
else: 
    print("OK") 

을하지만이 오류했습니다 :

if t[6]<=0 or t[6]>=59: 
TypeError: unorderable types: str() <= int() 

그래서 내가 (같은 "int(t[X])<=0") 사방에 "INT"를 넣어하지만 난이 오류했습니다 :

if int(t[6])<=0 or int(t[6])>=59: 
ValueError: invalid literal for int() with base 10: 's' 
+2

먼저 사용자 입력에서 't'를 물어보고 't'를 새로운 문자열로 리 바인드하고 정수가 없습니다. 대신에 어떻게 될 것으로 예상됩니까? 어떤 사용자 입력이 제공됩니까? –

+0

두 번째 줄을 지우고''j, h, m, s ''로 다시 쓰게됩니다. – aIKid

+0

마지막으로''0''과'59'는 유효한 초와 분입니다. 아마도't [6] < 0 or t[6] > = 60'과 같은 것을 원할 것입니다. 다른 시간 단위와 동일합니다. – greatwolf

답변

2

이 문자열에 숫자가 없습니다.

t="j,h,m,s" 

따라서 int(t[anything])을 시도하면 실패 할 것입니다. 문자열에 실제 정수의 문자열 표현 (예 : t = "1234")이 포함되어 있지 않으면 문자열을 정수로 변환 할 수 없습니다. 초 표현 당신은이 경우에 t = int(t[9:11]) 필요할 것 인덱스 (9)와 (10)에있을 것이기 때문에

또한, 당신이 t = "31,11,22,45" 같은 것을했다하더라도, 다음 int(t[6]), 당신에게 (초)을주지 못할 것이다. day가 정확하지만, 다른 모든 것이 "OK" 경우

#!/usr/bin/python 

t = "31,11,22,45" 
(day, hour, min, sec) = [int(elem) for elem in t.split(',')] 

if not 0 <= sec <= 59: 
    print("Seconds wrong") 
elif not 0 <= min <= 59: 
    print("Minutes wrong") 
elif not 0 <= hour <= 23: 
    print("Hours wrong") 
elif not 1 <= day <= 31: 
    print("days wrong") 
else: 
    print("OK") 

주 당신이 모든을 변경해야 하나 그러나 첫 번째 ifelif에, 그렇지 않으면 인쇄 할 수 있습니다 :

이 같은

뭔가 당신이 찾고있는 무엇

#!/usr/bin/python 

t = "31,11,22,45" 
(day, hour, min, sec) = [int(elem) for elem in t.split(',')] 
time_ok = True 

if not 0 <= sec <= 59: 
    print("Seconds wrong") 
    time_ok = False 

if not 0 <= min <= 59: 
    print("Minutes wrong") 
    time_ok = False 

if not 0 <= hour <= 23: 
    print("Hours wrong") 
    time_ok = False 

if not 1 <= day <= 31: 
    print("Days wrong") 
    time_ok = False 

if time_ok: 
    print("Time is OK") 
+0

또는 그는 문자열을 나눌 수 있습니다 ... – kren470

+0

@ kren470 : 예, 가능합니다. –

+0

예, 엘프를 잊어 버려서 고마워요. 하지만 "DD, HH, MM, SS"형식으로 일, 시간을 묻는 방법은 무엇입니까? – Valentln

2

니스 노력,하지만 조심 :, 또는 당신은 아무것도 잘못되면 저장하기 위해 별도의 변수의 어떤 종류를 유지하고, 마지막에 그것을 확인 등 다음과 같이 잘못해야합니다

t = "j,h,m,s" 

이것은 사용자 입력을 덮어 대신 t-"j,h,m,s" 할당 : 두번째 라인. 그것을 제거하십시오!

또한 or을 사용하여 비교할 수 없습니다. int(t[6]) > 59이 충분한 지 확인하십시오.

if int(t[6]) > 59: 
    print("seconds wrong") 

쉼표로 구분 된 숫자를 얻는 더 좋은 방법은 string.split() 방법을 사용하는 것입니다.

t = t.split(',') #split the string in the commas 

이제 쉼표 개수에 대해 걱정할 필요가 없습니다. 요일은 t[0]이고, 시간은 t[1]입니다.

아, 또 한 가지. if 문을 반복해서 사용할 필요는 없습니다. 처음으로 사용하고 elif 문으로 다음 문자를 변경하십시오.

전체 고정 코드 :

t = input("Put day,hours,minutes,seconds: ") 
if int(t[6])>59: 
    print("Seconds wrong") 
elif int(t[4]) < 0 or int(t[4]) > 59: 
    print("Minutes wrong") 
elif int(t[2]) < 0 or int(t[2]) > 24: 
    print("Hours wrong") 
elif int(t[0]) < 0 or int(t[0]) > 31: 
    print("days wrong") 
else: 
    print("OK") 

는, 솔직히 말해서 바울이 언급 한 바와 같이 모든 입력이 하나 개 이상의 숫자 인 경우,이 여전히 작동하지 않습니다.

이 작업을 수행하려면 string.split()을 사용해야합니다.

t = input("Put day,hours,minutes,seconds: ").split(",") 

if int(t[3])>59: 
    print("Seconds wrong") 
elif int(t[2]) < 0 or int(t[2]) > 59: 
    print("Minutes wrong") 
elif int(t[1]) < 0 or int(t[1]) > 24: 
    print("Hours wrong") 
elif int(t[0]) < 0 or int(t[0]) > 31: 
    print("days wrong") 
else: 
    print("OK") 
+0

아직 문자열 형식에 익숙하지 않지만 무슨 뜻인지 이해합니다. 도와 주셔서 감사합니다. 혼수 상태로 나누는 법을 알고 있습니다! – Valentln

+0

당신을 환영합니다! 문제 : – aIKid

+0

이것이 필요한 경우 수락하십시오. D – aIKid