Fórum Root.cz
Hlavní témata => Vývoj => Téma založeno: Wangarad 13. 01. 2021, 17:43:41
-
Zdravim ako by ste v python-e riesily taketo zadanie. Cisto pre zaujimavost.\
Vstup je cislo napriklad 3
a pozadovany vysledok by mal vyzerat
1
12
123
12
1
-
To je dost zajímavý “faktoriál” :)
Řešením jsou dva vnořené cykly.
-
tady máš domácák hotovej ;D ;D ;) ;)
#!/usr/bin/env python3
cislo = 9
for i in range(1,cislo*2):
for j in range(1,i+1 if i<cislo else cislo*2 - i+1):
print(j,end='')
print()
-
Co třeba takhle?
cislo = 9
rada = [*range(1, cislo+1), *reversed(range(1, cislo))]
for pozice in rada:
print(*rada[:pozice], sep="")
-
Co třeba takhle?
cislo = 9
rada = [*range(1, cislo+1), *reversed(range(1, cislo))]
for pozice in rada:
print(*rada[:pozice], sep="")
hezký :D
-
I když to není tak elegantní, podle reference na faktoriál předpokládám, že domácí úkol je na procvičení rekurze.
Tedy třeba něco jako
def f(max_depth, prefix = '', cur_depth = 1):
msg = prefix + str(cur_depth)
print(msg)
if cur_depth < max_depth:
f(max_depth, msg, cur_depth + 1)
print(msg)
f(3)
-
si myslim že 'wangaradův faktoriál' by jako měl mit nějakou tamtu matematickou definici ;D ;D ;D ;D
#!/usr/bin/env python3
import math
cislo = 9
'''
██╗ ██╗ █████╗ ███╗ ██╗ ██████╗ █████╗ ██████╗ █████╗ ██████╗ ██╗ ██╗██╗ ██╗
██║ ██║██╔══██╗████╗ ██║██╔════╝ ██╔══██╗██╔══██╗██╔══██╗██╔══██╗██║ ██║██║ ██║
██║ █╗ ██║███████║██╔██╗ ██║██║ ███╗███████║██████╔╝███████║██║ ██║██║ ██║██║ ██║
██║███╗██║██╔══██║██║╚██╗██║██║ ██║██╔══██║██╔══██╗██╔══██║██║ ██║██║ ██║╚██╗ ██╔╝
╚███╔███╔╝██║ ██║██║ ╚████║╚██████╔╝██║ ██║██║ ██║██║ ██║██████╔╝╚██████╔╝ ╚████╔╝
╚══╝╚══╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚═╝ ╚═╝╚═════╝ ╚═════╝ ╚═══╝
███████╗ █████╗ ██╗ ██╗████████╗ ██████╗ ██████╗ ██╗ █████╗ ██╗
██╔════╝██╔══██╗██║ ██╔╝╚══██╔══╝██╔═══██╗██╔══██╗██║██╔══██╗██║
█████╗ ███████║█████╔╝ ██║ ██║ ██║██████╔╝██║███████║██║
██╔══╝ ██╔══██║██╔═██╗ ██║ ██║ ██║██╔══██╗██║██╔══██║██║
██║ ██║ ██║██║ ██╗ ██║ ╚██████╔╝██║ ██║██║██║ ██║███████╗
╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚══════╝
je definovanej pouze pro celý čísla z intervalu 1-17
votázka jestli by jako měl mit i víc než jakoby jenom 'jednocifernej' výstup
zbuzuje vášně napříč vědeckou společností eště dneska :D :D ;D ;D
'''
def wangaraduv_faktorial(x, stred=cislo):
return round(0.123456789 * math.exp( 2.3025850935108427 * (stred - abs(x - stred)) ) - 0.6089270610980823)
for i in range(1,cislo * 2):
print(wangaraduv_faktorial(i))
-
Ježišikriste.
To je brutus.
-
def f(max_depth, prefix = '', cur_depth = 1):
msg = prefix + str(cur_depth)
print(msg)
if cur_depth < max_depth:
f(max_depth, msg, cur_depth + 1)
print(msg)
f(3)
Šlo by to zjednodušit na práci čiste s čísly, kdyby to bylo potřeba:
def f(max_depth, num = 0, cur_depth = 1):
num = num*10 + cur_depth
print(num)
if cur_depth < max_depth:
f(max_depth, num, cur_depth + 1)
print(num)
f(3)
-
Jeste trochu jiny zpusob:
cislo = 5
b = -cislo + 1
for y in range(b, cislo):
m = cislo - abs(y)
for x in range(1, m+1):
print(x, end='')
print()
-
Nebo takto:
cislo = 5
b = -cislo + 1
for y in range(b, cislo):
m = cislo - abs(y)
print(''.join([str(x) for x in range(1, m+1)]))
A z toho krypticky takto:
c = 5
for y in range(-c+1,c):print(''.join([str(x)for x in range(1,c-abs(y)+1)]))
Ma to 75 znaku, jde to jeste kratsi?
-
Šlo by to zjednodušit na práci čiste s čísly, kdyby to bylo potřeba:
def f(max_depth, num = 0, cur_depth = 1):
num = num*10 + cur_depth
print(num)
if cur_depth < max_depth:
f(max_depth, num, cur_depth + 1)
print(num)
f(3)
... to ale funguje jen do 9 ;)
-
FUN FACT:
Slovo factorial se objevuje pouze v titulku dotazu.
-
Ježišikriste.
To je brutus.
;D ;D
todle je hezčí pro čísla do desítky
math.floor(123456789 / (10 ** (10-x)) )
alekdyž by se to jako chtělo rožšířit na víc jak 9 tak to začne blbnout protože nepřesnosti s float počitáním :-\ ;)
cislo = 20
znaky = ''.join([str(x) for x in range(1, cislo+1)])
wangaradovo_cislo = int(znaky) / (10**len(znaky) )
print(znaky)
print(int( wangaradovo_cislo * (10**len(znaky)) ))
#vypise:
#1234567891011121314151617181920
#1234567891011121261512757346304
-
... to ale funguje jen do 9 ;)
Dík, to jsem zbabral. Lze opravit takto, ale to už je škaredé:
def f(max_depth, num = 0, cur_depth = 1):
num = num*(10**len(str(cur_depth))) + cur_depth
print(num)
if cur_depth < max_depth:
f(max_depth, num, cur_depth + 1)
print(num)
f(11)