LINUX.ORG.RU

Плотность пикселей на питоне

 


0

1

Я сегодня пытался написать скрипт на питоне, который определяет DPI (плотность пикселей). Скрипт на Python:

import math

width = input("Write Width: ")
height = input("Write Height: ")
inch = input("Write Inch: ")

ppi = math.sqrt((int(width) ** 2)+(int(height) ** 2))/float(inch);

print(f'PPI: {ppi}')

Когда я ввожу целое значение Inch скрипт работает, когда я ввожу значение Inch по типу 13,5 - почему-то вылезает ошибка.

★★★★★

Интересно почему же.

exception13 ★★★★★
()
Ответ на: комментарий от ConLenov

И у этих не всех возникают с таким кодом такие же проблемы.

Забудьте про запятую в числах с плавающей ТОЧКОЙ.

AntonI ★★★★★
()

Для вычисления плотности пикселей на питоне надо массу пикселей разделить на их объем!

Virtuos86 ★★★★★
()

С помощью скрипта я узнал, что плотность пикселей у CrowPi 2 190 - DPi

ConLenov ★★★★★
() автор топика
Ответ на: комментарий от ConLenov

Запятую пиши на бумаге и в калькуряторе, а в программах используй точку =) На нампаде в RU запятая в EN точка, то есть ты специально переключаешь раскладку на RU с EN для ввода запятой хотя секунду назад писал код в EN раскладке. А вообще правильно конечно использовать запятую у нас такой стандарт записи вещественных чисел, а за бугром и уж так получилось что в компуктерах и программах используется точка.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от ConLenov

Это очень ценное знание, берегите его тщательно.

AntonI ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

Почему когда я программы на си шарпе писал, то с запятой как нецелое число программа работала

ConLenov ★★★★★
() автор топика
Ответ на: комментарий от ConLenov

Потому что шарпы умеют в русскую локаль?

В любом случае, общая рекомендация - НИКОГДА не используйте запятую при вводе чисел с плавающей точкой. Очень много разного софта ожидает именно десятичную точку, и встретив запятую удивляется. И удивляет, вплоть до создания таких вот тем на ЛОРе.

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

Особенно есть эта запятая в значении которое отвечает за деньги. Тут можно удивиться на 2 порядка если «повезет».

exception13 ★★★★★
()
Ответ на: комментарий от ConLenov

Языки,языки программирования,стандарты стран записи вещественных чисел,технические стандарты и ограничения, негласные правила и локали, перемешать, довести до кипения и посолить по вкусу. Но осторожно, можно проблеваться. Хоть в некоторых вещах сделай свою жизнь проще используй в программульках для вещественных чисел вне всяких контекстов типа финансовых точку. А если тебе CSV парсить? А если, а если =) Запятую для калькулятора и на бумажке, в компуктерах себя не мучай и используй точку =)

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от AntonI

Там бред и округления за гранью добра и зла, не суйся оно тебя сожрёт! Я сам не в курсе, но читал статью давно аля WTF типа как javscript WTF испугался, закрал и больше в эту сторону не глядел. Лучше рассчитывать медианный объём пикселя на кубический дециметр шрифта чем финансы калькулякать.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 3)

в соответствии с доброй традицией лора, уже насовали полную панамку

в принципе заслуженно:

  • заголовок топика никак не связан с твоей проблемой
  • ты в принципе уже понял, в чем проблема заключается. остался один небольшой шаг - загуглить

https://stackoverflow.com/questions/6633523/how-can-i-convert-a-string-with-dot-and-comma-into-a-float-in-python

питон (даже третий) по умолчанию использует POSIX формат для float. (см. LC_NUMERIC)

для исправления есть модуль locale

только его использование немного нелогичное, нужно

locale.setlocale(locale.LC_NUMERIC, '')

# а помом можно так:
locale.atof("10,2")
print("{0:n}".format(10.2))

подробности по ссылке выше

router ★★★★★
()
Ответ на: комментарий от exception13

С трудом вспоминаю что в каких то локалях запятой отбивают копейки/центы а точкой тысячи и миллионы. Или наоборот. Это оно?

AntonI ★★★★★
()
Ответ на: комментарий от AntonI

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

Frost ★★★
()
Ответ на: комментарий от router

Ща Кондратий раскрутится и ещё нас на работу наймёт буит нашим директором, а мы ему портативный эмулятор иксбокс буим делать, такшта смешочки в сторону, как никак будущий начальник и лорчанов командир!

А так, он молодец. Пусть и не всё сразу получается, это даже мило. А затронутая им тема с локалями это даже страшно. Я вот их боюс ибо этж надо сколько всего помнить и в ньюансах маневрировать, жесть и жвопка. Ну его нахер.

LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 1)
Ответ на: комментарий от LINUX-ORG-RU

Я в windows в региональных настройках у себя меняю запятую на точку, как раз чтобы не мучаться с открытием csv, сохранёнеых из других софтин.

grem ★★★★★
()
Ответ на: комментарий от ConLenov

Ну в ворде и блокноте тоже. А питон тут причём?

Zhbert ★★★★★
()
Ответ на: комментарий от ConLenov

запятую для рациональных чисел в языках не используют, поскольку запятая используется для ввода например списка параметров функции(и не только). то есть возникнет неоднозначность в грамматике

f(100,2)

если использовать запятую в числе, то что это? вызов функции с двумя параметрами - 100 и 2, или с одним параметром 100.2?

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 2)
Ответ на: комментарий от ConLenov

Там региональные настройки учитываются.

grem ★★★★★
()

Потому что надо PowerShell использовать для скриптов, а не бидон.

#!/usr/bin/pwsh

$culture = Get-Culture ru-RU

[System.Threading.Thread]::CurrentThread.CurrentCulture = $culture

$width = [int]::Parse((Read-Host 'Write Width'))
$height = [int]::Parse((Read-Host 'Write Height'))
$inch = [float]::Parse((Read-Host 'Write Inch'))

$ppi = [Math]::Sqrt([Math]::Pow($width, 2) + [Math]::Pow($height, 2)) / $inch

Write-Output -InputObject ("PPI: {0:N2}" -f $ppi)

PowerShell это новый скриптовый язык для Linux на замену bash и python, которые теперь Deprecated

lovesan ★★
()
Ответ на: комментарий от lovesan

Ужас какой. Виндоговня.
Смотри как красиво.

#!/usr/bin/env lua
local w = arg[1] or 0;
local h = arg[2] or 0;
local i = arg[3] or 1;
print(math.floor(math.sqrt( (w^2 + h^2)) / i ));
#!/usr/bin/tcc  -run

#include <stdio.h>
#include <math.h>

int main(int argc, char *argv[])
{
    float w=0,
          h=0,
          i=1;
    if(argc < 4)
    {
        printf("ебобо?\n");
        return 1;
    }
    sscanf(argv[1],"%f",&w);
    sscanf(argv[2],"%f",&h);
    sscanf(argv[3],"%f",&i);
    printf("%.0f\n", floor(sqrtf((w*w)+(h*h)) / i));

    return 0;
}
LINUX-ORG-RU ★★★★★
()
Последнее исправление: LINUX-ORG-RU (всего исправлений: 2)
Ответ на: комментарий от AntonI

Очень много разного софта ожидает именно десятичную точку, и встретив запятую удивляется. И удивляет, вплоть до создания таких вот тем на ЛОРе.

Т.е. мы только что доказали, что ТС - программа.

PPP328 ★★★★★
()
Ответ на: комментарий от cobold

Он может вместо разделителя и пробел поставить, чё дела то тогда? :D Не ну так то да, по хорошему надо парсить, а так, если используешь *scanf то ты уверен корректности. Но ещё раз, да надо и не только на разделитель, а вообще корректность всего. Но блин и тааааак сойдёёёт

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от AntonI

Сами по себе группы разрядов это ещё ничего. В индийской системе группы разрядов имеют разное число цифр. В первой группе три цифры, как обычно, но зато потом отбивают по две. То есть миллион будет 10,00,000.00.

i-rinat ★★★★★
()
Ответ на: комментарий от exception13

Где валидно, а где нет. Пути два либо ты описываешь для программы порядок работы с ней или пишешь парсер для определённого набора данных и опять же его описываешь.

LINUX-ORG-RU ★★★★★
()
Ответ на: комментарий от lovesan

Какая же это блевотина… Такой забористый забор из спец-символов.

seiken ★★★★★
()
Ответ на: комментарий от AntonI

Вспоминается Xilinx ISE 14.0. Когда ее нативно ставишь в линукс, при выборе некоторых высоких частот для программатора, она не работает на выбранной частоте (все равно медленно), а на низких работает. Как оказалось, эти утырки не используют локали и когда сами из своих конфигов читают забитые строчки с цифирями, то там у них через «.» стоит пара нулей. Которые при чтении их же софтом превращались в «,», что приводило к эквивалентному умножению на 100, что конечно программатор не поддерживал. И оставался на умолчательной низкой скорости.

yax123 ★★★★★
()
Ответ на: комментарий от ConLenov

Это единственное различие между си шарп и питон которое ты заметил? Может что-то еще было?

Aswed ★★★★★
()
Ответ на: комментарий от LINUX-ORG-RU

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

Там тоже запятая. Это французский вариант. С точкой – британский.

hateyoufeel ★★★★★
()
Ответ на: комментарий от seiken

А в каком-то другом контексте это могло бы привести к порче оборудования.

а может и смерти

yax123 ★★★★★
()
Ответ на: комментарий от alysnix

если использовать запятую в числе, то что это? вызов функции с двумя параметрами - 100 и 2, или с одним параметром 100.2?

Так от языка программирования зависит. Если будет французским/русским стандартом десятичной запятой, то вызов функции с одним дробным параметром. Если это Haskell, то с одним параметром типа кортеж, если это Си, то два целых параметра, если это J, то один параметр типа массив.

monk ★★★★★
()
Для того чтобы оставить комментарий войдите или зарегистрируйтесь.