2013-10-09 6 views
-2

Привет всем, я довольно новичок в программировании, и это мой первый вопрос о переполнении стека.Устранение неполадок в петле

Здесь я пишу простую программу, разделяющую заданное количество секунд в часах, минутах и ​​секундах, но я не могу запрограммировать ее по желанию, когда я хочу вставить более 1 значения.

Вот мой код, любая помощь будет принята с благодарностью.

def hms(s): 
    seconds=[] 
    for seconds in range(len(str(s))): 
     h=seconds/3600 
     m=(seconds - h*3600)/60 
     s=seconds-(h*3600+m*60) 

    return h, m, s 
seconds = hms(10) 
print seconds 
+1

Люди будут знать, что это школьное задание, поверьте мне. Может быть, лучше не упоминать это явно. – JensG

+0

Я не планирую копировать что-либо, я просто хочу понять, где я запутался ... – Morgormir

+2

У меня такое ощущение, что вы пытаетесь обойтись, делая как можно меньше работы, а не тратить свое время и пытаться чтобы понять, что вы делаете: http://learnpythonthehardway.org –

ответ

1

Прежде всего, линия seconds = [] полностью избыточными: вы просто создать новую переменную, которая содержит пустой список, и вы тут же отвергая эту переменную как только цикл входит в первую итерация.

Во-вторых, я не уверен, что выражение range(len(str(s))) подразумевается означает: вы конвертируете количество секунд (например, 10) в строку "10", а затем взять длину этой строки 2 и затем итерация в диапазоне [0, 1]. Таким образом, переменная цикла seconds получает значения 0 и 1 во время 2 итераций цикла.

То, что вычисляется в результате, никоим образом не является тем, чего вы пытаетесь достичь. На самом деле, я не уверен, почему вы решили использовать цикл вообще для преобразования единственного целочисленного значения в один кортеж.

Для того, чтобы достичь того, чего вы хотите, вы просто должны сделать основные математические вычисления независимо от языка программирования:

def hms(s): 
    h = s/3600 
    s -= h * 3600 
    m = s/60 
    s -= m * 60 
    return (h, m, s) 

print hms(10000) # => (2, 46, 40) 
print hms(1000) # => (0, 16, 40) 

Если вам нужно работать над списком таких значений, просто определить другую функцию но не усложнять основную логику:

def hms_list(amounts): 
    ret = [] 
    for amount in amounts: 
     ret.append(hms(amount)) 
    return ret 

print hms_list([1000, 10000]) # => [(0, 16, 40), (2, 46, 40)] 

последнего также может быть уменьшен до более компактной формы, используя список понимание:

def hms_list(amounts): 
    return [hms(amount) for amount in amounts] 

Примечание: на Python 3.x, оператор / даст вам float результата, а не вниз целой этажный, так для того, чтобы выше алгоритм для работы там, вам нужно использовать оператор целочисленного деления // который также будет работать, по крайней мере, на Python 2.7, например:

h = s // 3600 
+0

Поскольку запрашивается, что список может быть вставлен в функцию и вернуть результат. Что касается: диапазон (len (str (s))) Я пытаюсь выполнить функцию итерации по длине l, которая идет от 0-го числа, вставленного в функцию: def hms() – Morgormir

+0

О, я вижу Теперь! Бесконечно благодарен! – Morgormir

Смежные вопросы