2012-05-03 3 views
1

Итак, я изучаю python как новичок и использую как думать, как компьютерный ученый для python 3. Я нахожусь в главе об итерации, делая кодирование из своего собственного мозга вместо копировать/вставлять, поэтому я помню это легче.Различия в синтаксисе размножения Python

При выполнении последней части таблицы таблицы умножения я получил тот же результат, что и показанный урок, но кажется, что мой чище (меньше аргументов). Я по-прежнему пытаюсь найти программы отслеживания, поэтому мне сложно скрыть свои разногласия. Я надеялся, что кто-то может сообщить мне, если мой код менее эффективен или больше подвержен ошибкам, чем версия текста, и поможет положить конец этой головной боли;).

def print_multiples(n, high):   #This is the e-book version 
    for i in range(1, high+1): 
     print(n * i, end=' ') 
    print() 

def print_mult_table(high): 
    for i in range(1, high+1): 
     print_multiples(i, i+1)  #They changed high+1 to i+1 to halve output 

Source

Похоже, что их результат будет иметь слишком много + 1, так как я + 1 стал бы «высокий» в print_multiples, а затем в конечном итоге +1 снова добавив в цикле print_multiples. (Я также заметил, что они держали конец = «„вместо конца =“\ т», которая сбросила выравнивание.

def print_multiples(n):   #n is the number of columns that will be made 
    '''Prints a line of multiples of factor 'n'.''' 
    for x in range(1, n+1):  #prints n 2n 3n ... until x = n+1 
     print(n * x, end='\t') #(since x starts counting at 0, 
    print()      #n*n will be the final entry) 


def print_mult_table(n):   #n is the final factor 
    '''Makes a table from a factor 'n' via print_multiples(). 
    ''' 
    for i in range(1, n+1):   #call function to print rows with i 
     print_multiples(i)   #as the multiplier. 

Это мое. Элементарные замечания были для моей пользы, пытаясь сохранить трассировку прямо в моя голова. Мои функции имеют для меня гораздо больше смысла, но может быть какая-то разница. Я действительно не понимаю, почему книга решила сделать два аргумента для print_multiples(), поскольку 1 мне кажется достаточно ... Я также изменил большинство переменных, поскольку они использовали «i» и «высокий» несколько раз, чтобы продемонстрировать локальные и глобальные. Я повторно использовал n, хотя, поскольку в обоих случаях это было бы одинаковое окончательное число.

Возможно, более эффективные способы делать подобные вещи, но я все еще на итерации. Просто надеемся попытаться понять, что работает, а что нет, и это меня подслушивает.

+0

Здесь я не получаю такой же результат; каждая из ваших линий на один элемент короче. –

+0

Попытка их, я получаю одну дополнительную колонку. На странице урока показан вывод, который я получаю с моим кодом, но с его кодом конечная запись для print_mult_table (7) в таблице «56», когда она должна быть «49». Я не уверен, что я ошибаюсь и ошибаюсь в коде. – Hesuchia

ответ

1

(Примечание: справа, вы используете Python 3.x)
Ваш код проще и имеет для меня больше смысла.
Их правильно, но его намерение не совсем то же самое, поэтому его выход отличается.
Осторожно сравните выходы обоих и посмотрите, можете ли вы заметить шаблон разницы.

Ваш код немного более «эффективен», но печать материала на экран занимает (относительно) долгое время, и ваша программа печатает немного меньше, чем их.

Чтобы измерить эффективность, вы можете «профилировать» код в Python, чтобы узнать, как долго это происходит. Ниже приведен код, на котором я бежал до
a) проверить разницу в исходном тексте и выходе
b) просмотреть код, чтобы узнать, что было быстрее.
Вы можете попробовать запустить его. Удачи!

import cProfile 

def print_multiples0(n, high):   #This is the e-book version 
    for i in range(1, high+1): 
     print(n * i, end=' ') 
    print() 

def print_mult_table0(high): 
    for i in range(1, high+1): 
     print_multiples0(i, i+1)  #They changed high+1 to i+1 to halve output 

def print_multiples1(n):  #n is the number of columns that will be made 
    '''Prints a line of multiples of factor 'n'.''' 
    for x in range(1, n+1):  #prints n 2n 3n ... until x = n+1 
     print(n * x, end='\t') #(since x starts counting at 0, 
    print()      #n*n will be the final entry) 

def print_mult_table1(n):   #n is the final factor 
    '''Makes a table from a factor 'n' via print_multiples(). 
    ''' 
    for i in range(1, n+1):   #call function to print rows with i 
     print_multiples1(i)   #as the multiplier. 

def test() : 
    print_mult_table0(10) 
    print_mult_table1(10) 

cProfile.run('test()') 
+0

Aah, я вижу, спасибо за профиль :) Я еще не узнал об этом, должен быть очень полезен. – Hesuchia

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