Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.92/13: Рейтинг темы: голосов - 13, средняя оценка - 4.92
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
1

Для каждого числа в отдельной строке вывести его квадратный корень

06.07.2015, 12:43. Показов 2693. Ответов 14
Метки нет (Все метки)

ребята, помогите с этой простой задачкой, объясните , что к чему, спасибо.
____________________________________________________________ _______________________________
Исходные данные
Входной поток содержит набор целых чисел Ai (0 ≤ Ai ≤ 1018), отделённых друг от друга произвольным количеством пробелов и переводов строк. Размер входного потока не превышает 256 КБ.
Результат
Для каждого числа Ai, начиная с последнего и заканчивая первым, в отдельной строке вывести его квадратный корень не менее чем с четырьмя знаками после десятичной точки.
Пример
исходные данные
1427 0

876652098643267843
5276538

результат
2297.0716
936297014.1164
0.0000
37.7757

 Комментарий модератора 
Не задавайте в чужой теме вопросы, с ней не связанные. Создавайте свою тему с осмысленным заголовком и подробно изложенной сутью проблемы
0

Помощь в написании контрольных, курсовых и дипломных работ здесь.

Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
06.07.2015, 12:43
Ответы с готовыми решениями:

Ввести адрес файла и «разобрать» его на части, разделенные знаком '/'. Каждую часть вывести в отдельной строке
Ввести адрес файла и «разобрать» его на части, разделенные знаком '/'. Каждую часть вывести в...

Функция вычисляющая корень квадратный из комплексного числа
Всем привет! Помогите пожалуйста с заданием: .

Вычислить квадратный корень целого числа
задача Напишите программу, вычисляющую квадратный корень введённого целого числа. Задаваемое...

Для каждого числа вывести его квадратный корень
#include <stdio.h> #include <math.h> void main() { unsigned long a; scanf("%262144i", &a);...

14
161 / 126 / 30
Регистрация: 30.05.2015
Сообщений: 379
06.07.2015, 13:48 2
Лучший ответ Сообщение было отмечено izuchaju_python как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
from math import sqrt
import re
 
def main():
    stream = """
    12 1212  212
    12 323 323 23 23
    212
    232323 2
    3
       323 23 23 23 121
 
    """
 
    p = re.compile('[ \n]')
    l = [x.strip() for x in p.split(stream) if x != '']
    for i in reversed(l):
        print ('%.4f' % sqrt(float(i)))
 
if __name__ == '__main__':
    main()
как прикрутить к этому "поток" разберёшься сам я надеюсь
1
20 / 21 / 6
Регистрация: 30.06.2015
Сообщений: 431
06.07.2015, 20:02  [ТС] 3
если скажите какие темы в питоне нужно знать,чтобы это решить, был бы благодарен очень сильно.
0
161 / 126 / 30
Регистрация: 30.05.2015
Сообщений: 379
06.07.2015, 20:42 4
работа со строками, генераторы списков, итерация по списку, регулярные выражения )

Добавлено через 1 минуту
Да, и форматирования вывода
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
06.07.2015, 20:53 5
izuchaju_python, тебе же уже решили, смотри, теперь просто смотри, что не понятно и читай про это.

Добавлено через 58 секунд
Цитата Сообщение от Kurles Посмотреть сообщение
регулярные выражения
Они тут вообще даже близко не нужны, это все равно, что вскапывать клумбу метр на метр экскаватором.
0
161 / 126 / 30
Регистрация: 30.05.2015
Сообщений: 379
06.07.2015, 21:29 6
Цитата Сообщение от alex925 Посмотреть сообщение
Они тут вообще даже близко не нужны, это все равно, что вскапывать клумбу метр на метр экскаватором.
Ну почему же, для разбивки по 2м или более сепараторам можно вполне использовать. Конечно можно предварительно второй сепаратор заменить на первый, но с регэекспом проще как по мне. Или есть другой способ разбивки строки по сложному условию? Поделитесь, интересно.
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
06.07.2015, 21:57 7
Цитата Сообщение от Kurles Посмотреть сообщение
Ну почему же,
Потому, что это применение эксковатора для вскапыванию клумбы метр на метр. С разбинием великолепно справляется старый добрый метод строк split.
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
from math import sqrt
 
stream = """
    12 1212  212
    12 323 323 23 23
    212
    232323 2
    3
       323 23 23 23 121
 
    """
 
l = [x for x in stream.split()]
for i in reversed(l):
    print('%.4f' % sqrt(float(i)))
В итоге я избавился от условия, от вызова метода strip, от импортирования и задействования не нужной библиотеки, а ведь это на эти все действия тратится драгоценное время и ресурсы компа. После этого, люди начинают жаловаться, что язык медленный, когда на самом деле проблема не в языке, а в быдлокоде.
1
161 / 126 / 30
Регистрация: 30.05.2015
Сообщений: 379
06.07.2015, 22:02 8
Хотя да, в данном случае split() + strip() обойтись...
Python
1
2
3
l = [x.strip() for x in stream.split(' ') if x.strip() != '']
    for i in reversed(l):
        print ('%.4f' % sqrt(float(i)))
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
06.07.2015, 22:05 9
Kurles, Strip и условия не нужны, кури лучше код.
Кстати переменные нужно называть по человечески, а не одной буквой + уже давно в основном используется метод format.
0
161 / 126 / 30
Регистрация: 30.05.2015
Сообщений: 379
06.07.2015, 22:16 10
Цитата Сообщение от alex925 Посмотреть сообщение
l = [x for x in stream.split()]
Да уж, точно, читайте доки... А скорости действительно иногда не хватает, приходиться расширения сишные писать, благо инструменты и возможность есть.
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
06.07.2015, 22:26 11
Цитата Сообщение от Kurles Посмотреть сообщение
А скорости действительно иногда не хватает
Возможно задачи специфичные, но на сколько я вижу ты побыдлокодить любишь, не удивительно, что код медленно работает.

Добавлено через 5 минут
Вот тебе живой пример как твой быдлокод затрудняет обработку.
Мой код выполняется за: 14.809430279012304
Твой за: 25.27179295400856
А ведь это элементарщина, на пару строк......
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
import re
import timeit
 
from math import sqrt
 
def test1():
    stream = """
    12 1212  212
    12 323 323 23 23
    212
    232323 2
    3
       323 23 23 23 121
 
    """
 
    l = [x for x in stream.split()]
    for i in reversed(l):
        a = '%.4f' % sqrt(float(i))
 
def test2():
    stream = """
    12 1212  212
    12 323 323 23 23
    212
    232323 2
    3
       323 23 23 23 121
 
    """
 
    p = re.compile('[ \n]')
    l = [x.strip() for x in p.split(stream) if x != '']
    for i in reversed(l):
        a = '%.4f' % sqrt(float(i))
 
print(timeit.timeit("test1()", setup="from __main__ import test1", number=1000000))
print(timeit.timeit("test2()", setup="from __main__ import test2", number=1000000))
+ если если использовать обычный цикл, а не генератор списка, то возможно ещё скорость возрастёт.
0
161 / 126 / 30
Регистрация: 30.05.2015
Сообщений: 379
06.07.2015, 22:45 12
Как то ты быстро ярлыки навешиваешь. По-моему это не быдлокод, а недостаочное знание инструмента, все мы учимся. Вот не знал, что split() без параметров все пробелы и символы переноса строки убирает, просто решал задачу разбиения строки с большим, чем один сепаратором. Тогда уж и твой пример можно быдлокодом обозвать, можно было чуть быстрее сделать вообще без генератора или доп. списка:
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
from math import sqrt
 
stream = """
    12 1212  212
    12 323 323 23 23
    212
    232323 2
    3
       323 23 23 23 121
 
    """
for i in reversed(stream.split()):
    print('%.4f' % sqrt(float(i)))
0
2730 / 2333 / 620
Регистрация: 19.03.2012
Сообщений: 8,832
06.07.2015, 22:59 13
Kurles, Я только правил твой код, это не я накатал генераторы и т д, там что на меня стрелки перекинуть пытаться не надо. Выложить без генераторов хотел, просто не посчитал нужным уже.

Кстати, замерял без генераторов, код выполняется 13 сек.
0
Kurles
06.07.2015, 23:03
  #14

Не по теме:

если ты такой перфекционист, то мог бы и поправить. Ладно, закругляемся, полный офтоп пошёл. В любом случае за тыкание носом в split() без параметров благодарен.

0
Модератор
Эксперт NIX
2785 / 2033 / 680
Регистрация: 02.03.2015
Сообщений: 6,514
07.07.2015, 11:02 15
Преимущество генератора(цикла) над списком проявляется на больших объемах данных
Python
1
2
3
4
5
6
7
8
9
10
11
from math import sqrt
stream = """
    12 1212  212
    12 323 323 23 23
    212
    232323 2
    3
       323 23 23 23 121
 
    """
print("\n".join('{:.4f}'.format(sqrt(int(num))) for num in reversed(stream.split())))
2
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
07.07.2015, 11:02

Для каждого Ai, начиная с последнего и заканчивая первым, вывести его квадратный корень не менее чем с четырьмя знаками
задача звучит так "Входной поток содержит набор целых чисел Ai (0 ≤ Ai ≤ 1018),...

Для каждого Ai, начиная с последнего и заканчивая первым, вывести его квадратный корень не менее чем с четырьмя знаками после запятой
задача звучит так "Входной поток содержит набор целых чисел Ai (0 ≤ Ai ≤ 1018),...

Для каждого слова в отдельной строке вывести YES если его можно сложить из печенья, и NO если нет
Вот условия задачи И снова знаменитые буквы из печенья поступили в продажу! Их можно не только...

Если число целое,то вывести сумму его цифр,если нет,то вывести корень квадратный из модуля числа
Если число N целое,то вывести сумму его цифр,если нет,то вывести корень квадратный из модуля числа.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.