2013-10-27 13 views
2

我是Python中的法國新手,我想編寫一個當時間(字符串「Day,Hours,Minutes,Seconds」)錯誤(例如83秒)時警告我們的程序。 我做這個節目: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」 無處不在(如"int(t[X])<=0") 後來我有這樣的錯誤:

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

您首先要求用戶輸入't',然後將't'重新綁定到一個沒有整數的新字符串。你預期會發生什麼?將提供什麼用戶輸入? –

+0

刪除第二行,它將't'改寫爲''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 = "31,11,22,45",然後int(t[6])不會給你的秒數,因爲幾秒鐘的表示是在,就需要在這種情況下,t = int(t[9:11])指數9和10。

像這樣的東西是你在找什麼:

#!/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,否則它會打印"OK"如果day是正確的,但一切是錯了,或者你需要保持某種獨立的變量的存儲如果有什麼是錯的,並檢查在最後,如在以下幾點:

#!/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

是的,我忘記了elif,謝謝。但是如何在「DD,HH,MM,SS」格式中提問幾天,幾小時? – Valentln

2

尼斯的努力,但要小心與第二行:

t = "j,h,m,s" 

這將覆蓋用戶輸入,並分配到"j,h,m,s"代替t。去掉它!

此外,你不能使用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

我還沒有習慣字符串格式,但我明白你的意思。而且我知道如何與昏迷分道揚thanks,謝謝你的幫助! – Valentln

+0

不客氣!沒問題:) – aIKid

+0

如果這是你需要的,請接受:D – aIKid