Black Friday je tu! Využij jedinečnou příležitost a získej až 80 % znalostí navíc zdarma! Více zde
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
BF extended 2022
Avatar
Hrabě
Člen
Avatar
Hrabě:11.8.2020 11:48

Zadane cislo vypisuju jako soucet ctvercu - to me funguje, ale rad bych v pripade, ze dane cislo nelze vyjadrit jako soucet ctvercu vypsal treba "Nejde!", ale jen jednou ne v kazde iteraci.
Uz na to cumim dlouho a pro vlastni oci nevidim.

Diky za radu.

Zkusil jsem:

def soucet_ctvercu(n):
    for i in range(1, n+1):
        if (i**(1/2)) % 1 == 0 and ((n-i)**(1/2)) % 1 == 0:
            print(n, "=", i, " + ", n-i)
    #print("Nejde to.")

soucet_ctvercu(13)
print("---")
soucet_ctvercu(14)
 
Odpovědět
11.8.2020 11:48
Avatar
Radek Veverka
Tvůrce
Avatar
Odpovídá na Hrabě
Radek Veverka:11.8.2020 12:25

Tak jakmile máš nalezeno, můžeš ukončit vykonávání celé funkce:

def soucet_ctvercu(n):
    for i in range(1, n+1):
        if (i**(1/2)) % 1 == 0 and ((n-i)**(1/2)) % 1 == 0:
            print(n, "=", i, " + ", n-i)
            return
    print("Nejde to.")

soucet_ctvercu(13)
print("---")
soucet_ctvercu(14)
 
Nahoru Odpovědět
11.8.2020 12:25
Avatar
Hrabě
Člen
Avatar
Odpovídá na Radek Veverka
Hrabě:11.8.2020 12:46

Omlouvam se, nenapsal jsem to do zadani uplne presne: je potreba vypsat soucet vsech moznosti, returnem pri prvnim vyskytu to ukoncim a to nechci.

Editováno 11.8.2020 12:49
 
Nahoru Odpovědět
11.8.2020 12:46
Avatar
Radek Veverka
Tvůrce
Avatar
Odpovídá na Hrabě
Radek Veverka:11.8.2020 12:57

Tak po cyklu zkontroluj, jestli jsi něco našel alespoň jednou:

def soucet_ctvercu(n):
    nalezeno = False
    for i in range(1, n+1):
        if (i**(1/2)) % 1 == 0 and ((n-i)**(1/2)) % 1 == 0:
            print(n, "=", i, " + ", n-i)
            nalezeno = True
    if (nalezeno == False):
         print("Nejde to.")

soucet_ctvercu(13)
print("---")
soucet_ctvercu(14)
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
11.8.2020 12:57
Avatar
Hrabě
Člen
Avatar
Hrabě:11.8.2020 13:14

Super, dekuju :-)

 
Nahoru Odpovědět
11.8.2020 13:14
Avatar
Hrabě
Člen
Avatar
Hrabě:11.8.2020 13:44

jen jeste mala uprava, abych nezapocital mezi scitance 0, tak jsem upravil range (1, n)

def soucet_ctvercu(n):
    nalezeno = False
    for i in range(1, n):
        if (i**(1/2)) % 1 == 0 and ((n-i)**(1/2)) % 1 == 0:
            print(n, "=", i, " + ", n-i)
            nalezeno = True
    if (nalezeno == False):
         print("Nejde to.")

soucet_ctvercu(13)
print("---")
soucet_ctvercu(14)
 
Nahoru Odpovědět
11.8.2020 13:44
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 6 zpráv z 6.