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 3
Level 3
Příspěvky: 459
Registrován: únor 11
Pohlaví: Muž
Stav:
Offline

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: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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))
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

shockwave
Level 3
Level 3
Příspěvky: 459
Registrován: únor 11
Pohlaví: Muž
Stav:
Offline

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: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

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#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

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

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í.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

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

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: 7356
Registrován: prosinec 10
Pohlaví: Muž
Stav:
Offline

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!
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

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

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#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW

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

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.
"Král Lávra má dlouhé oslí uši, král je ušatec!

(pravil K. H. Borovský o cenzuře internetu)

shockwave
Level 3
Level 3
Příspěvky: 459
Registrován: únor 11
Pohlaví: Muž
Stav:
Offline

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.5
Level 3.5
Příspěvky: 713
Registrován: únor 13
Pohlaví: Muž
Stav:
Offline

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: 8813
Registrován: srpen 08
Bydliště: Brno
Pohlaví: Muž
Stav:
Offline
Kontakt:

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#, TypeScript, Python
IntelliJ Idea, Docker, Opera browser, Linux Mint
iPhone XS
Raspberry PI 3 (KODI, Raspbian)
XBox One S, PS 4, nVidia GeForce NOW


  • Mohlo by vás zajímat
    Odpovědi
    Zobrazení
    Poslední příspěvek
  • Makro pro myš Rapture Python
    od mmmartin » 27 srp 2023 15:18 » v Problémy s hardwarem
    9
    1111
    od mmmartin Zobrazit poslední příspěvek
    29 srp 2023 16:47

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

Kdo je online

Uživatelé prohlížející si toto fórum: Žádní registrovaní uživatelé a 2 hosti