2

我是 Python 的法国新手,我想编写一个程序,它会在时间(字符串“日、时、分、秒”)错误(例如 83 秒)时向我们发出警告。我做了这个程序:

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'
4

2 回答 2

2

此字符串中没有数字:

t="j,h,m,s"

所以任何尝试int(t[anything])都会失败。除非字符串包含实际整数的字符串表示形式,否则不能将字符串转换为整数,例如t = "1234".

此外,即使您有类似t = "31,11,22,45", thenint(t[6])也不会给您秒数,因为秒数的表示将在索引 9 和 10 处。t = int(t[9:11])在这种情况下您需要。

你正在寻找这样的东西:

#!/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")
于 2013-10-27T13:21:56.140 回答
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")
于 2013-10-27T13:23:38.717 回答