Nefukcni kod, python

Místo pro dotazy a rady ohledně programovacích jazyků (C++, C#, PHP, ASP, Javascript, VBS..) a tvorby webových stránek

Moderátor: Mods_senior

shockwave
Level 2.5
Level 2.5
Příspěvky: 380
Registrován: únor 11
Pohlaví: Muž

Nefukcni kod, python

Příspěvekod shockwave » 11 kvě 2020 13:11

Ahoj, funguje vam prosim tento kod, me ani z prikazove radky.
Omlouvam se , vkladam znovu jelikoz mi v jinem vlakne nesel vlozit prispevek.

kod:
<code>
SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}

def approximate_size(size, a_kilobyte_is_1024_bytes=True):
'''
Convert a file size to human-readable form.
Keyword arguments:
size -- file size in bytes
a_kilobyte_is_1024_bytes -- if True (default), use multiples of 1024
if False, use multiples of 1000
Returns: string
'''
if size < 0:
raise ValueError('number must be non-negative')

multiple = 1024 if a_kilobyte_is_1024_bytes else 1000

for suffix in SUFFIXES[multiple]:
size /= multiple
if size < multiple:
return '{0:.1f} {1}'.format(size, suffix)
raise ValueError('number too large')

if __name__ == '__main__':
print(approximate_size(1000000000000, False))
print(approximate_size(1000000000000))
</code>



Reklama
Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 6941
Registrován: prosinec 10
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod faraon » 11 kvě 2020 17:32

Tak za prvé, programátoři odsazující mezerami jsou lépe placení než ti, kteří odsazují tabulátorem. Zjistila to statistika, příčina je neznámá, prostě to tak je a nikdo neví proč.

A za druhé, nikdy, ale opravdu NIKDY nepoužívej v Pythonu tabulátor, protože se z toho velice rychle zblázníš! Leda že bys dokázal program v jazyce Whitespace napsat na papír a po roce bezchybně opsat do počítače :lol:

Takže po nahrazení tabulátorů mezerami a správném odsazení mi to funguje naprosto bezchybně:

Kód: Vybrat vše

#! /usr/bin/python

SUFFIXES = {1000: ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB'],
            1024: ['KiB', 'MiB', 'GiB', 'TiB', 'PiB', 'EiB', 'ZiB', 'YiB']}

def approximate_size(size, a_kilobyte_is_1024_bytes=True):
    '''
        Convert a file size to human-readable form.
    Keyword arguments:
    size -- file size in bytes
    a_kilobyte_is_1024_bytes -- if True (default), use multiples of 1024
    if False, use multiples of 1000
    Returns: string
        '''

    if size < 0:
       raise ValueError('number must be non-negative')

    multiple = 1024 if a_kilobyte_is_1024_bytes else 1000

    for suffix in SUFFIXES[multiple]:
        size /= multiple
        if size < multiple:
           return '{0:.1f} {1}'.format(size, suffix)
    raise ValueError('number too large')

if __name__ == '__main__':
   print(approximate_size(1000000000000, False))
   print(approximate_size(1000000000000))
Je právě SECHS hodin!

shockwave
Level 2.5
Level 2.5
Příspěvky: 380
Registrován: únor 11
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod shockwave » 11 kvě 2020 20:21

Děkuju, fakt že jo, máš pravdu. Tak sem zase o neco chytřejší.

Dodatečně přidáno po 14 minutách 33 vteřinách:
Sem asi LAMA , ale jak ten program ví, že to ma převest na 1 TB a 1 GiB

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8780
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod CZechBoY » 11 kvě 2020 22:01

Deli vstupni cislo tisicem dokud je vstupni cislo vyssi nez tisic. Podle toho kolikrat se delilo vybere prislusnou koncovku.
PHP, Nette, MySQL, C#, LESS, TypeScript
PhpStorm, Docker, WinSCP, Opera browser, Windows 10
iPhone XS
Raspberry PI 3 (KODI, Raspbian)

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 6941
Registrován: prosinec 10
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod faraon » 11 kvě 2020 23:46

Je dobré nevymýšlet nějaká neviditelná kouzla, ale všechno podstatné mít pěkně pohromadě už v hlavičce funkce. Tam se předávají parametry, které řídí její chování. Podstatné části v překladu do lidského jazyka:

def approximate_size(size, binárně=Ano):
...
multiple = 1024 if binárně else 1000
...

Pokud zavoláš tu funkci s jedním parametrem - zadaným číslem, počítá se binárně s násobky 1024 a počítačovými jednotkami *iB z druhého řádku tabulky. Když jí ale druhým parametrem řekneš že je nechceš - False, použijí se lidské metrické násobky 1000 a jednotky *B z prvního řádku. Ale kdybys do druhého parametru dal True, jako že ty binární násobky určitě chceš, bude se také počítat s 1024.

No a potom to zadané číslo v cyklu tím násobkem dělíš tak dlouho, dokud nemáš číslo menší než ten násobek, a pak ho přímo z cyklu vrátíš jako string i s příslušnou příponou z tabulky. Pokud tabulka nestačila, cyklus skončí bez výsledku a z funkce vrátíš chybové hlášení.
Je právě SECHS hodin!

Uživatelský avatar
second32
Level 3
Level 3
Příspěvky: 512
Registrován: únor 15
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod second32 » 12 kvě 2020 00:00

"NIKDY nepoužívej v Pythonu tabulátor", aha :D Tak to jo. A když máš dodržovat PEP8, tak co?

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 6941
Registrován: prosinec 10
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod faraon » 12 kvě 2020 00:24

No, například "profesionály" opovrhovaný Midnight Editor v Midnight Commanderu má v nastavení položku "Převést tabulátor na mezery" i s hodnotou o kolik mezer se má odsazovat. Do inteligentních editorů, jako je Vim nebo Emacs, si můžeš doplnit libovolnou funkcionalitu sám. Ale pokud musíš z libovolného důvodu místo dávno funkčních řešení používat nějaký neschopný frikulínský crippleware, tak holt usouložíš mezerník :lol:

Mimochodem, automatické odsazování, nahrazení tabulátoru mezerami okamžitě jak ho stisknu i backspace rovnou na předchozí úroveň jsem si vychutnával už v QBasicu z roku 1990 v MS-DOSu, takže mi není jasné proč tyhle věci, naprosto samozřejmé už dávno v minulém tisíciletí, dnes samozřejmé nejsou!
Je právě SECHS hodin!

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8780
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod CZechBoY » 12 kvě 2020 08:48

Pouzivej si odsazeni jaky chces, ale musis ho dodrzet, coz tazatel asi nedokaze.
PHP, Nette, MySQL, C#, LESS, TypeScript
PhpStorm, Docker, WinSCP, Opera browser, Windows 10
iPhone XS
Raspberry PI 3 (KODI, Raspbian)

Uživatelský avatar
faraon
Master Level 8.5
Master Level 8.5
Příspěvky: 6941
Registrován: prosinec 10
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod faraon » 12 kvě 2020 16:02

Však je to první program v té učebnici, až si párkrát otluče klouby, naučí se ;-)

Ono to tak bývá, když jsem kdysi opisoval do osmibitu prográmky z časopisů, také jsem jako první věc musel řešit proč mi nefungují. A je to dobrá škola.
Je právě SECHS hodin!

shockwave
Level 2.5
Level 2.5
Příspěvky: 380
Registrován: únor 11
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod shockwave » 13 kvě 2020 12:04

Mě to přeci jen nedá, v učebnicích jsem viděl maximálně tak for i in boxes [2:], ale tady je:


for suffix in SUFFIXES[multiple]: pres tu promennou multiple odkazuje nen slovnik SUFFIXES nebo jak to brat. V modelovych prikladech sem fakt tohle nikde nanasel, diky Děli se tam jak 1000cem tak i 1024kou, je to tak ?

Uživatelský avatar
Zakk
Level 3
Level 3
Příspěvky: 556
Registrován: únor 13
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod Zakk » 13 kvě 2020 14:50

syntaxi v Pythonu moc neznám.. ale v čem ti přijde ten zápis jinej ? suffix=i, SUFFIXES=boxes a za multiple se dosadí buď 1000 nebo 1024

dělí se BUĎ 1000 NEBO 1024, podle toho vstupního parametru

Uživatelský avatar
CZechBoY
Master Level 9.5
Master Level 9.5
Příspěvky: 8780
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž

Re: Nefukcni kod, python

Příspěvekod CZechBoY » 13 kvě 2020 14:53

jo, vezmeš si ze slovníku příslušnou hodnotu takovou která odpovídá klíči který je uložený v proměnné multiple

tzn když máš
SUFFIXES = {1000: "KB", 1024: "KiB"}
a zavoláš SUFFIXES[1000] tak se ti vrátí "KB"
a když zavoláš SUFFIXES[1024] tak se vrátí "KiB"
PHP, Nette, MySQL, C#, LESS, TypeScript
PhpStorm, Docker, WinSCP, Opera browser, Windows 10
iPhone XS
Raspberry PI 3 (KODI, Raspbian)


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • nefukcni zvuk z pc windows xp
    od SALi » 21 dub 2020 12:37 » v Rady s výběrem hardwaru a sestavením PC
    1
    168
    od zeus
    21 dub 2020 13:21
  • Python - BeautifulSoup
    od Emphaty1 » 10 říj 2019 16:49 » v Programování a tvorba webu
    1
    1412
    od CZechBoY
    20 říj 2019 17:02
  • Dirname, python
    od shockwave » 23 kvě 2020 00:53 » v Programování a tvorba webu
    2
    367
    od faraon
    23 kvě 2020 07:40
  • python socket
    od Akrej » 23 úno 2020 03:21 » v Programování a tvorba webu
    1
    946
    od CZechBoY
    28 úno 2020 17:54
  • Nevytiskne se cely slovnik,python
    od shockwave » 18 kvě 2020 20:21 » v Programování a tvorba webu
    8
    233
    od Zakk
    19 kvě 2020 20:53

Zpět na “Programování a tvorba webu”

Kdo je online

Uživatelé prohlížející si toto fórum: CommonCrawl [Bot] a 1 host