Как мне быстро распечатать вывод и исправить шаблон повторной печати, а также проблему разделения для вывода? - PullRequest
0 голосов
/ 21 ноября 2019

Пока я печатаю, используя этот код python37, он повторяется до конца и медленно. Мне действительно нужно это печатать очень быстро. Также я хотел бы разделить первое найденное число перед двоеточием и вывести число, связанное с после двоеточия .

Например, программа находитэта пара соотношений (8978: 1445580) в наборе после прохождения количества чисел, и я решил разделить ее следующим образом: 8978/8978, затем на выходе должно появиться (1445580). Или, может быть, он просто соответствует 8978 и печатает (1445580) в качестве вывода.

Возможно ли это? Это кажется программируемым, но мои навыки немного слабы в этой области, и я мог бы использовать некоторую помощь.

Большое спасибо за любую помощь! :)

Вот код, с которым я работаю:

    while True:
        list_numbers={}
        a = int(input(' Enter 1st number for ratio calculation: '))
        b = int(input(' Enter 2nd number for ratio calculation: '))

        y = int(input(' Enter y start range: '))
        n = int(input(' Enter n end range: '))

        for x in range(y,n):
            list_numbers.update({a*x: b*x})
            print(list_numbers)

Ответы [ 2 ]

1 голос
/ 21 ноября 2019

Вы печатаете весь словарь list_numbers на каждом проходе цикла вместо того, чтобы печатать только новые значения. Это, вероятно, займет некоторое время, если словарь станет большим.

Вместо этого вы можете просто распечатать добавляемые новые значения:

for x in range(y,n):
    new_values = {a*x: b*x}
    list_numbers.update(new_values)
    print(new_values)

Или, в качестве альтернативы, дождаться окончания цикла и распечататьвсе это:

for x in range(y,n):
    list_numbers.update({a*x: b*x})

print(list_numbers)

Если вы сделаете последнее, ваш код может быть упрощен:

while True:
    a = int(input(' Enter 1st number for ratio calculation: '))
    b = int(input(' Enter 2nd number for ratio calculation: '))

    y = int(input(' Enter y start range: '))
    n = int(input(' Enter n end range: '))

    list_numbers = {a*x: b*x for x in range(y,n)}
    print(list_numbers)

Это только улучшение, которое я вижу здесь для более эффективной печати, я на самом деле нене знаю, что вы имеете в виду под проблемой деления (и кажется, что это вопрос совершенно другого вопроса)

0 голосов
/ 21 ноября 2019

Как кто-то говорил вам раньше, печать после вычисления выполняется быстрее. Математика входит в функцию, я думаю, что лучше, чем "в то время как True", чтобы ваш код работал. И я только что изменил входные данные для фиксированных переменных только для целей тестирования. В обеих функциях (одна с вашим кодом и моей) вы получаете 100 результатов (длина напечатанных списков). Вы ничего не пропустите здесь, но выиграть больше времени: -)

время импорта

#your code
def code_timed():

    list_numbers={}

    a = 3 #int(input(' Enter 1st number for ratio calculation: '))
    b = 5 #int(input(' Enter 2nd number for ratio calculation: '))

    y = 500 # int(input(' Enter y start range: '))
    n = 600 # int(input(' Enter n end range: '))


    for x in range(y,n):
        list_numbers.update({a*x: b*x})
        print(list_numbers)     


elapsed_time = timeit.timeit(code_timed, number=100)/100
print(elapsed_time) 
0.8021428676611905

# mine
def code_timed():

    faster_list=[]

    a = 3 #int(input(' Enter 1st number for ratio calculation: '))
    b = 5 #int(input(' Enter 2nd number for ratio calculation: '))

    y = 500 # int(input(' Enter y start range: '))
    n = 600 # int(input(' Enter n end range: '))


    for x in range(y,n):
        faster_list.append({a*x: b*x})


    print(faster_list[0]) #to get out of the '[]'


elapsed_time = timeit.timeit(code_timed, number=100)/100
print(elapsed_time)     
0.004112908859074196
...