2013-10-27 4 views
2

Я новичок на французском языке в Python, и я хотел бы закодировать программу, которая предупреждает нас, когда время (строка «День, часы, минуты, секунды») неверно (например, 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") , но потом я эту ошибку:

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]) не даст вам количество секунд, потому что представление секунд будет на индексы 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") 

Примечание вам необходимо либо изменить все, но ваш первый if к elif, в противном случае он будет печатать "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

Да, я забыл об этом, спасибо. Но как задавать дни, часы ... в формате «DD, HH, MM, SS»? – Valentln

2

Nice усилий, но будьте осторожны, со второй линией:

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] и так далее.

А также еще одна вещь. Вы не должны использовать, если заявления неоднократно там. Используйте его в первый раз и измените следующие операторы 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