Najdi lichá čísla dělitelná třemi – Python – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Najdi lichá čísla dělitelná třemi – Python – Fórum – Programujte.comNajdi lichá čísla dělitelná třemi – Python – Fórum – Programujte.com

 

Toto vlákno bylo označeno za vyřešené.
Simon50
Duch
18. 5. 2017   #1
-
0
-

Dobrý den, potřeboval bych pomoct s úlohou: Je dána posloupnost celých kladných čísel zakončena libovolným záporným číslem. Určete, kolik je v ní lichých čísel dělitelných třemi. 

přišel jsem akorát na to, aby mi to vypsalo lichá čísla dělitelná třemi, ale nevím, jak udělat, aby to fungovalo jen do té doby, dokud tam je kladné číslo a záporným číslem by byl program ukončen a vypsal by se mi počet těch lichých čísel dělitelných třemi. Děkuju za pomoc.


seznam=[1,5,6,9,8,21,-71]
for i in seznam:
    if i%3==0 and i%2!=0:
        print (i)
 

Nahlásit jako SPAM
IP: 178.255.168.–
gna
~ Anonymní uživatel
1891 příspěvků
19. 5. 2017   #2
-
0
-

Můžeš přerušit cyklus příkazem break.

for i in seznam:
    if i < 0:
        break
    ...
Nahlásit jako SPAM
IP: 213.211.51.–
MilanL+1
Grafoman
20. 5. 2017   #3
-
0
-

#1 Simon5
chybí ti tam počítadlo a které bys pak na konci vypsal jako "Počet lichých čísel dělitelných 3 :"

Nahlásit jako SPAM
IP: 185.112.167.–
peter
~ Anonymní uživatel
4016 příspěvků
22. 5. 2017   #4
-
0
-

Cislo je liche, kdyz nulty bit je 1, pokud je znamenko 0, jinak je to opacne.  Kdyby ti zalezelo na rychlosti (tak 100.000 cisel)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:48c5:47...–
MilanL+1
Grafoman
22. 5. 2017   #5
-
0
-

#4 peter
jde mu pouze o kladná čísla, záporné číslo ukončuje cyklus.

S těmi bitovými operacemi můžeš a nemusíš mít pravdu i&1=1 nebo i%2!=0, je to otázka, bo pokud má Python dobrou optimalizaci, tak /2 se dá udělat rotací 1 doprava a bit 0 se projeví v příznaku stavového registru a pak už jen podmínka na příznak. takže to vyjde skoro nastejno, jen i testu bitu se ušetří 1 instrukce na zpětnou rotaci (aby se vrátila hodnota I na původní), ale vzhledem k tomu jak to má řešený to nemusí být nutné - pokud není liché jde se na další číslo. Jde opravdu hlavně o to, jak python zpracuje program.

Např. Delphi MODulo 2 optimalizuje u 32bitového znaménkového INTu na AND $80000001 (hex) tím by měli být ošetřená i záporná čísla.

Nahlásit jako SPAM
IP: 91.139.9.–
hanpari0
Stálý člen
1. 6. 2017   #6
-
0
-

#1 Simon5

from itertools import takewhile
cisla = 1,2,5,6,2,9,5,5,8,-6,5,5,26,-5
vyber = sum(1 for i in takewhile(lambda x: x>=0, cisla) if not i%3)
assert vyber == 2, "test"
Nahlásit jako SPAM
IP: 195.5.186.–
Simon50
Duch
1. 6. 2017   #7
-
0
-

Super, děkuju vám 

Nahlásit jako SPAM
IP: 178.255.168.–
peter
~ Anonymní uživatel
4016 příspěvků
1. 6. 2017   #8
-
0
-

#5 MilanL
Tezko rici. Ve vyssich jazycich je bohuzel problem pracovat s jednim bitem. Musi se to vselijak vyahovat pres OR a tak. Ale v ASM bych sel do bitu a at si s tim poradi prekladac :)

Nahlásit jako SPAM
IP: 2001:718:2601:26c:f973:55...–
hanpari0
Stálý člen
1. 6. 2017   #9
-
0
-

#7 Simon5
Není zač, jen jsem si všiml, že je tam chyba. Vrátí to součet všech čísel dělitelných třemi, nejen lichých. Musíš si ještě upravit podmínku na konci.

Co se týče tvrzení o rychlosti za pomoci bitových operací, tím bych si nelámal hlavu. V Pythonu to vyjde na stejno, ne-li hůř. Ve skutečnosti je v mém Pythonu zjišťování lichého čísla pomocí metody uvedené nahoře 1,25 x pomalejší než verze s modulem %.

from timeit import timeit

number = 20
cas_m = timeit("sum(1 for i in range(10**6) if i%2)", number=number)
print("Modulo: %ss" % cas_m)

cas_b = timeit("sum(1 for i in range(10**6) if i&1)", number=number)
print("Bity: %ss" % cas_b)

print("Modulo je v Pythonu %s x rychlejší než bitové operace." % (cas_b / cas_m))
Nahlásit jako SPAM
IP: 78.45.189.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 16 hostů

Podobná vlákna

Sudá, lichá čísla — založil Michal

Select mezi třemi tabulky — založil Pavelv

Sudá lichá — založil Skywall

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý