Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

Zadaci za wannabe pythoniste

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 15 16 17 18 19 20 21 22 23 24 ... Dalje > >>

[ Pregleda: 50990 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste08.03.2020. u 15:02 - pre 49 meseci
"Kada pravi lozinku, njena dužina ne treba da bude manja od 10 slova, a da reči koje se koriste nisu kraće od tri slova"

Mislim da nisi dobro procitao zadatak. U matematici, "A nije manje od B" znaci "A >= B", a "A nije vece od B" znaci "A <= B". Ako duzina lozinke nije manja od 10 slova, znaci da mora da bude veca ili jednaka od 10. U tvom programu vidim 12 (?!). Slicno tome, zadatak kaze da reci nisu krace od 3 slova, a ti poredis duzinu reci sa 4. Po meni bi trebalo:
Code:

import random

lozinka = ''
redovi3 = ''
with open('words.txt', 'r') as fajl:
    redovi2 = fajl.readlines()

for i in redovi2:
    if len(i) >= 3:
        redovi3 += i.capitalize()

while len(lozinka) < 10:
    lozinka += random.choice(redovi3.split()).rstrip()
print('Tvoja nova lozinka je:\n\n', lozinka) 

Takodje, zasto filtriranje duzine ne radis odmah prilikom citanja iz fajla? Ne vidim razlog zasto bi prolazio kroz petlju dva puta. A ako to vec radis, zasto ti je redovi3 string, a ne lista? Elemente liste redovi2 ti nadovezujes u string redovi3, da bi kasnije koristio redovi3.split() (sto je opet treci prolazak kroz petlju, istina ovaj put "ispod haube" Pythona). Pokusaj da to malo optimizujes, nije tesko.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste08.03.2020. u 17:32 - pre 49 meseci
Ovo je originalni zadatak iz knjige Ben Stephenson: The Python Workbook (2019)

Exercise 159: Two Word Random Password

While generating a password by selecting random characters usually creates one that
is relatively secure, it also generally gives a password that is difficult to memorize.
As an alternative, some systems construct a password by taking two English words
and concatenating them. While this password may not be as secure, it is normally
much easier to memorize.

Write a program that reads a file containing a list of words, randomly selects two
of them, and concatenates them to produce a new password. When producing the
password ensure that the total length is between 8 and 10 characters, and that each
word used is at least three letters long. Capitalize each word in the password so that
the user can easily see where one word ends and the next one begins. Finally, your
program should display the password for the user.

Ja sam stavio u kodu dužinu lozinke na 12 slova, što je sigurno sigurno :))

Što se tiče dužine pojedinačnih reči, prvo sam stavio len >= 3
ali mi je program u lozinku ubacivao i reči od dva slova!?
I tu mi ništa nije bilo jasno, jel neki bag u pythonu ili šta je!? :)))
Prošlo je tu vremena dok mi u jednom trenutku nije sinulo da originalni fajl sa rečima izgleda ovako

Both
no
Check
Ensure
is
Python
Save
accessing
all
and
appropriate
character
...


i da program broji kao karakter i kraj reda \n.
Onda sam povećao na 4.

A ovo za optimizaciju, moram razmotriti, pa javljam rezultat :)
Stavio sam redovi3 prvo da bude lista, da ne moram posle da splitujem,
ali sad se više ne sećam gde je zapinjalo, pa sam prebacio na string.
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste08.03.2020. u 18:25 - pre 49 meseci
Citat:
Što se tiče dužine pojedinačnih reči, prvo sam stavio len >= 3 ali mi je program u lozinku ubacivao i reči od dva slova!?
I tu mi ništa nije bilo jasno, jel neki bag u pythonu ili šta je!? :)))

Nije bag. Kompjuteri ne rade ono sto ti zelis, vec ono sto im zadas. A ti si rekao:
Code:

with open('words.txt', 'r') as fajl:
    redovi2 = fajl.readlines()

for i in redovi2:
    if len(i) >= 3:

Tekstualni fajlovi na kraju svake linije imaju tebi nevidljiv (ali kompjuteru itekako vidljiv) separator linije - tzv. newline. To je ono sto ti nesvesno u programima pises kao '\n' (to je inace karakter s ASCII kodom 10). Funkcija readlines() cita liniju po liniju i smesta je u listu, ali ako u python shellu otkucas prve 2 linije svog programa i onda kazes samo "redovi2", videces: [ 'Both\n', 'no\n', 'secure\n' ... ]. Bas zato ti je svaka rec realno 1 karakter duza. Tu imas dva resenja - ili da koristis 4 umesto 3 (sto si ti i uradio) ili da stripujes '\n' tokom ucitavanja fajla. Ako radis to drugo, onda mozes lepo da istovremeno upucs dve muve istim udarcem:
Code:

redovi = []
lozinka = ''
for red in open('words.txt', 'r'):
    red = red.strip()
    if (line(red)>=3):
        redovi.append(red)
while (len(lozinka)<10):
    lozinka += random.choice(redovi)
print('Tvoja nova lozinka je:\n\n', lozinka) 

Inace, mala zanimljivost. Newline separator varira od jednog do drugog operativnog sistema, ali danas su u upotrebi dve varijante. Unix i njegovi derivati (medju njima i Linux) koriste '\n' (linefeed ili LF - ASCII kod 10 (dec)). DOS i njegovi naslednici (Windows), kao i stari Digitalovi sistemi, koriste '\r\n' (carriage return + line feed - CR+LF, ASCII kodovi 13+10). Medjutim, Linux (i GNU) softver preveden na Windows takodje koristi Unix-ovski '\n'. U ovo poslednje spada i Python.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste09.03.2020. u 02:06 - pre 49 meseci
Kod tvog koda mi je otkriće da posle otvaranja ne moram da koristim readline,
već mogu odmah da pređem na operacije sa stringom.

Ja sam stalno išao na ovo

Code:
with open('words.txt', 'r') as fajl:
    redovi2 = fajl.readlines()


U kojim se onda slučajevima koristi readline?

Inače dodao sam kod tebe .capitalize()

i imao si
if (line(red)>=3):
umesto
if (len(red)>=3):

Vidim da stavljaš zagrade pre len i na kraju.
Jel to tako bilo u python 2.x?
U trojci može i bez zagrada.

Sad je kod sledeći:

Code:
import random
redovi = []
lozinka = ''
for red in open('words.txt', 'r'):
    red = red.strip().capitalize()
    if len(red) >= 3:
        redovi.append(red)
while len(lozinka) < 10:
    lozinka += random.choice(redovi)
print('Tvoja nova lozinka je:\n\n', lozinka)
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste09.03.2020. u 11:58 - pre 49 meseci
"U kojim se onda slučajevima koristi readline?"

readline čita jednu liniju do znaka za novu liniju ili kraja fajla i vraća string uključujući i znak za novu liniju (\n). Na primer:

Code (python):
open('file.txt').readline()
'Programming fundamental tasks\n'

open('file.txt').readline().rstrip('\n')
'Programming fundamental tasks'


readlines vraća listu linija uključujući i \n znak:

Code (python):
open('/fajl.txt').readlines()
['Programming fundamental tasks\n',
 'Database programming with python\n',
 'Object Oriented programming\n']

[line.rstrip() for line in open('fajl.txt').readlines()]
['Programming fundamental tasks',
 'Database programming with python',
 'Object Oriented programming']


read čita do kraja fajla ili n broj znakova i vraća string:

Code (python):

open('fajl.txt').read(11)
'Programming'

open('fajl.txt').read()
'Programming fundamental tasks\nDatabase programming with python\nObject Oriented programming \n'

open('fajl.txt').read().split('\n')
['Programming fundamental tasks',
 'Database programming with python',
 'Object Oriented programming',
'']

open('fajl.txt').read().splitlines()
['Programming fundamental tasks',
 'Database programming with python',
 'Object Oriented programming ']


https://realpython.com/read-write-files-python/
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste09.03.2020. u 13:52 - pre 49 meseci
Citat:
Vidim da stavljaš zagrade pre len i na kraju.
Jel to tako bilo u python 2.x?
U trojci može i bez zagrada.


To je samo znak kućnog vaspitanja :)

Zagrade je uvek pametno stavljati. Možda su ponekad nepotrebne, ali si bar siguran kojim redosledom će se uraditi operacije...
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste09.03.2020. u 16:00 - pre 49 meseci
Hvala, Panto, sad smo čitanje fajlova apsolvirali do u detalje. :)

Đoko, pozdravljam kućno vaspitanje. To uvek dobro dođe.
A i od viška (zagrada) glava ne boli (uvek). :)


Nego, krenuo ja da radim naredni zadatak:

Napiši program koji čita fajl sa informacijama o hemijskim elementima i skladišti ih u odgovarajući strukturu podataka.
Potom prima input od korisnika. Ako je input integer, , onda program ispisuje simbol i naziv elementa sa tim brojem protona.
Ako korisnik unese naziv ili simbol elementa, program ispisuje njegov broj protona. Takođe, program ispisuje porucu o grešci
ako ne postoji elemenat koji bi odgovarao unetom nazivu, simbolu ili broju protona. Program nastavlja da učitava input sve
dok nije uneta prazna linija.

Fajl sa elementima ima ovu strukturu:

1,H,Hydrogen
2,He,Helium
3,Li,Lithium
4,Be,Beryllium
5,B,Boron
6,C,Carbon


i pretpostavljam da bi to trebalo prepakovati u neki nested dictionary:

tabela = {"H" : {"ime" : "Hydrogen", "broj protona" : 1},
"He" : {"ime" : "Helium", "broj protona" : 2},
"Li" : {"ime" : "Lithium", "broj protona" : 3}}

Gledao sam kako od liste da napravim rečnik i sve što sam uspeo je da napravim tri liste,
Ali ne znam kako da ih na pravi način ukomponujem u jedan rečnik.
Za sad sam stigao dovde

Code:
recnik = {}
list0 = []
list1 = []
list2 = []

for red in open('elements.txt', 'r'):
    red = red.rstrip().split(',')
    list0.append(red[0])
    list1.append(red[1])
    list2.append(red[2])
    
recnik = dict(zip(list2, list0))


Ali to mi daje:

{'Hydrogen': '1', 'Helium': '2', 'Lithium': '3', 'Beryllium': '7', 'Boron': '5', 'Carbon': '6'}

što naravno nije ono što se traži. :(
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste09.03.2020. u 17:38 - pre 49 meseci
Ne terbaju ti tolike liste da napraviš rečnik, npr:
Code (python):

tabela = {}
for red in open('elements.txt', 'r'):
    red = red.rstrip().split(',')
    tabela.update(dict({red[1]: {'ime': red[2], 'broj protona': red[0]}}))

tabela
{'H': {'ime': 'Hydrogen', 'broj protona': '1'},
 'He': {'ime': 'Helium', 'broj protona': '2'},
 'Li': {'ime': 'Lithium', 'broj protona': '3'},
 'Be': {'ime': 'Beryllium', 'broj protona': '4'},
 'B': {'ime': 'Boron', 'broj protona': '5'},
 'C': {'ime': 'Carbon', 'broj protona': '6'}}

E, sad ti vidi da li ti takva struktura odgovara.
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste09.03.2020. u 17:40 - pre 49 meseci
Ovo je prvi zadatak u kome moras da razmisljas out-of-the-box ...

Tebi je bitno da za zadat simbol, puno ime ili broj protona izbacis sve (ili odabrane) podatke o elementu. To prakticno znaci da ti je potrebna struktura u kojoj sva tri atributa (simbol, ime, protoni) mogu u isto vreme da budu i kljucevi i vrednosti. Tu imas vise resenja.

Prvi nacin, pomalo pocetnicki, je da se formiraju 2 recnika. U prvom ce kljucevi biti imena i simboli, a vrednosti brojevi protona. Drugi ce sluziti za obrnuto mapiranje:
Code:

proton = { 'Hydrogen': 1, 'H': 1, 'Helium': 2, 'He': 2, 'Lithium': 3, 'Li': 3 ... }
ime = { 1: [ 'Hydrogen', 'H' ], 2: [ 'Helium', 'He' ], 3: ['Lithium', 'Li' ] ... }

Ostatak programa je trivijalan - ako je uneta numericka vrednost (integer) p, ispisujes ime[p].
Ako je uneta nenumericka vrednost (string) s, ispisujes proton[s].
Naravno, moras da ispitas da li se p i s nalaze unutar recnika.
Na kraju, mozes ta dva recnika da spojis i u jedan ...

Drugi, napredniji nacin je da napravis visedimenzionu hash tabelu sa ili/ili kljucevima. Prednost je sto imas samo jedan recnik i taj recnik ima svega N elemenata, gde je N broj linija u fajlu koji ucitavas (1,H,Hydrogen,2,He,Helium ...). Naravno, neces to da radis iz pocetka, ljudi su to vec napravili i zove se multi_key_dict.

Ima sigurno jos mnogo nacina ...
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste10.03.2020. u 22:02 - pre 49 meseci
Code:
def get_test_data():
  test_data = [ [1,'H','Hydrogen'], [2,'He','Helium'], [3,'Li','Lithium'],
                [4,'Be','Beryllium'], [5,'B','Boron'], [6,'C','Carbon']]

  return test_data

def find_in_matrix( table, element):
    element = element.lower()
    for row in table:
          for col in row:
            if element == str(col).lower():
                return row
    return [ element ]
    
def output( row ):
    print()
    if len( row ) == 3:
        print('Atomic number: ', row[0])
        print('Symbol       : ', row[1])
        print('Name         : ', row[2])
    else:
        print('Matching element not found: ', row[0])

def main_loop():

    pt=get_test_data()

    while True:
       print()
       print('Enter atomic number, chemical symbol or element name')
       print('to get the rest of the data, or an empty line for end:')

       search = input()
       if len(search)==0:
           break
        
       result = find_in_matrix(pt,search)
       output(result)

    print()
    print('Bye!')

main_loop()


Code:
py .\elements.py

Enter atomic number, chemical symbol or element name
to get the rest of the data, or an empty line for end:
1

Atomic number:  1
Symbol       :  H
Name         :  Hydrogen

Enter atomic number, chemical symbol or element name
to get the rest of the data, or an empty line for end:
he

Atomic number:  2
Symbol       :  He
Name         :  Helium

Enter atomic number, chemical symbol or element name
to get the rest of the data, or an empty line for end:
carbon

Atomic number:  6
Symbol       :  C
Name         :  Carbon

Enter atomic number, chemical symbol or element name
to get the rest of the data, or an empty line for end:
fe

Matching element not found:  fe

Enter atomic number, chemical symbol or element name
to get the rest of the data, or an empty line for end:


Bye!
 
Odgovor na temu

djoka_l
Beograd

Član broj: 56075
Poruke: 3445

Jabber: djoka_l


+1462 Profil

icon Re: Zadaci za wannabe pythoniste10.03.2020. u 22:32 - pre 49 meseci
Opservacija:

mislim da sam ti jednom već napisao - inženjeru koji ima samo čekić, svaki problem izgleda kao ekser.
Tako i tebi, svaki zadatak je nerešiv ako ne znaš kako podatke da staviš u dictionary.

Moje rešenje je elementarno, praktično ne koristim ni jednu python caku, ali ti pokazuje da svaki zadatak može da se reši na više načina.
Ja obično biram najprostiji način.

Razdvojiš funkcionalnosti u FUNKCIJE.
Tako ćeš lako da dodaš učitavanje iz fajla, a ne predefinisanu tabelu koju sam ja napravio.

Ako ti se ne sviđa moj način traženja podatka promeniš samo jednu FUNKCIJU.
Ostalo ne moraš da menjaš.

Koristi FUNKCIJE, tako ćeš logičke celine svog rešenje lako zamenjivati kada smisliš bolje rešenje.
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste11.03.2020. u 08:02 - pre 49 meseci
Evo rešenje sa pomenutim rečnikom:

Code (python):

tabela = []

for line in open('elements.txt'):
    line = line.strip().split(',')
    tabela.append({'simbol': line[1], 'ime': line[2], 'broj protona': line[0]})

while True:
    user_input = input(
        "Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): ")
    # Ako je user_input prazan string, prekidam izvršavanje while petlje
    if user_input == '':
        print('Izlazim.')
        break
    founded = False
    for elements in tabela:
        if not founded:
            for element in elements.values():
                # Ako element value odgovara inputu, dodeljujem founded promenljivoj
                # vrednost True kao bih prekinuo dalje izvršavanje prve for petlje
                if element == user_input.title():
                    founded = True
                    # Ukoliko je input integer, ispisujem simbol, ime i broj
                    # protona. U suprotnom, ispisujem samo broj protona
                    if element.isdigit():
                        print(f"Simbol: {elements['simbol']} \
                        \nIme: {elements['ime']} \
                        \nBroj protona: {elements['broj protona']}\n"
)
                    else:
                        print(f"Broj protona: {elements['broj protona']}\n")
        else:
            break
    if not founded:
        print(f"Element {user_input} nije pronađen! Pokusajte ponovo.\n")
 


Code:
Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): carbon
Broj protona: 6

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): he
Broj protona: 2

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): 3
Simbol: Li                         
Ime: Lithium                         
Broj protona: 3

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): fe
Element fe nije pronađen! Pokusajte ponovo.

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): 
Izlazim.


Naravno, umesto rečnika možeš da koristiš liste ili tuple, posebno za ovaj zadatak pošto ti ključevi nisu neophodni.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste11.03.2020. u 10:10 - pre 49 meseci
Au, šta je materijala za razmatranje.
Hvala na trudu!

Za početak sam razmotrio Pantino rešenje.
Vidim da si promenio tip strukture podataka, pa si umesto rečnika napravio listu, čiji su elementi rečnici.
Ja sam očigledno na samom početku nepotrebno zakomplikovao, misleći da treba da koristim nested dictionary.

Jedino što tvoje rešenje ne daje ispis tačno kako se traži u zadatku.

"If the user enters a non-integer value then your program should display the
number of protons for the element with that name or symbol."

Zato sam malo "dopisao" ovo pretposlednje else

Code:
tabela = []

for line in open('elements.txt'):
    line = line.strip().split(',')
    tabela.append({'simbol': line[1], 'ime': line[2], 'broj protona': line[0]})

while True:
    user_input = input(
        "Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): ")
    # Ako je user_input prazan string, prekidam izvršavanje while petlje
    if user_input == '':
        print('Izlazim.')
        break
    founded = False
    for elements in tabela:
        if not founded:
            for element in elements.values():
                # Ako element value odgovara inputu, dodeljujem founded promenljivoj
                # vrednost True kako bih prekinuo dalje izvršavanje prve for petlje
                if element == user_input.title():
                    founded = True
                    # Ukoliko je input integer, ispisujem simbol, ime i broj
                    # protona. U suprotnom, ispisujem samo broj protona
                    if element.isdigit():
                        print(f"Simbol: {elements['simbol']} \
                        \nIme: {elements['ime']} \
                        \nBroj protona: {elements['broj protona']}\n")
                    else:
                        if element in elements['simbol']:
                            print(f"Ime: {elements['ime']} \
                            \nBroj protona: {elements['broj protona']}\n")
                        elif element in elements['ime']:
                            print(f"Simbol: {elements['simbol']} \
                            \nBroj protona: {elements['broj protona']}\n")
        else:
            break
    if not founded:
        print(f"Element {user_input} nije pronađen! Pokušajte ponovo.\n")


Sad ispisuje ovako:

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): Calcium
Simbol: Ca
Broj protona: 20

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): 100
Simbol: Fm
Ime: Fermium
Broj protona: 100

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): fm
Ime: Fermium
Broj protona: 100
 
Odgovor na temu

Panta_
Aleksandar Pantić
Kragujevac

Član broj: 214959
Poruke: 790



+162 Profil

icon Re: Zadaci za wannabe pythoniste11.03.2020. u 12:16 - pre 49 meseci
Citat:
Jedino što tvoje rešenje ne daje ispis tačno kako se traži u zadatku.

"If the user enters a non-integer value then your program should display the
number of protons for the element with that name or symbol."

Zašto onda nisi tako napisao već:
Citat:
Ako korisnik unese naziv ili simbol elementa, program ispisuje njegov broj protona.

Citat:
Zato sam malo "dopisao" ovo pretposlednje else

else:
if element in elements['simbol']:
print(f"Ime: {elements['ime']} \
\nBroj protona: {elements['broj protona']}\n")
elif element in elements['ime']:
print(f"Simbol: {elements['simbol']} \
\nBroj protona: {elements['broj protona']}\n")

Dovoljno je samo u print funkciji ispred "Broj protona" da dodaš Simbol: {elements['ime'] if element in elements['simbol'] else elements['simbol']}, npr:
Code:

Zameniti

print(f"Broj protona: {elements['broj protona']}\n")

sa

print(f"Simbol: {elements['ime'] if element in elements['simbol'] else elements['simbol']}\nBroj protona: {elements['broj protona']}\n")


Moja greška, nisam video da treba i ime.

[Ovu poruku je menjao Panta_ dana 11.03.2020. u 13:51 GMT+1]

[Ovu poruku je menjao Panta_ dana 11.03.2020. u 13:52 GMT+1]
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste12.03.2020. u 15:06 - pre 49 meseci
Citat:
B3R1:
Ovo je prvi zadatak u kome moras da razmisljas out-of-the-box ...

Tebi je bitno da za zadat simbol, puno ime ili broj protona izbacis sve (ili odabrane) podatke o elementu. To prakticno znaci da ti je potrebna struktura u kojoj sva tri atributa (simbol, ime, protoni) mogu u isto vreme da budu i kljucevi i vrednosti. Tu imas vise resenja.

Prvi nacin, pomalo pocetnicki, je da se formiraju 2 recnika. U prvom ce kljucevi biti imena i simboli, a vrednosti brojevi protona. Drugi ce sluziti za obrnuto mapiranje:
Code:

proton = { 'Hydrogen': 1, 'H': 1, 'Helium': 2, 'He': 2, 'Lithium': 3, 'Li': 3 ... }
ime = { 1: [ 'Hydrogen', 'H' ], 2: [ 'Helium', 'He' ], 3: ['Lithium', 'Li' ] ... }

Ostatak programa je trivijalan


Berislave, razmotrio sam ovu trivijalnu varijantu i napravio sa tri rečnika za listu elemenata
1,H,Hydrogen
2,He,Helium
3,Li,Lithium
4,Be,Beryllium...


U svakom su ključevi naziv elementa, simbol, odnosno broj protona:

Code:
ime = {}
simbol = {}
proton = {}

for line in open('elements.txt'):
    line = line.strip().split(',')
    ime[line[2]] = [line[1], int(line[0])]
    simbol[line[1]] = [line[2], int(line[0])]
    proton[int(line[0])] = [line[2], line[1]]

user_input = input("Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): ")

if user_input == '':
    print('Izlazim.')
elif user_input.isdigit():
    print('Ime elementa je', proton[int(user_input)][0], '\ni njegov simbol je', proton[int(user_input)][1])
elif user_input.title() in simbol.keys():
    print('Ime elementa je', simbol[user_input.title()][0], '\ni on ima', simbol[user_input.title()][1], 'protona')
elif user_input.title() in ime.keys():
    print('Simbol elementa je', ime[user_input.title()][0], '\ni on ima', ime[user_input.title()][1], 'protona')
else:
    print('Uneta vrednost se ne nalazi u tabeli prirodnih elemenata.')


I dobijam

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): h
Ime elementa je Hydrogen
i on ima 1 protona

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): be
Ime elementa je Beryllium
i on ima 7 protona

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): boron
Simbol elementa je B
i on ima 5 protona

Unesite ime, simbol ili broj protona (ili Enter za izlaz iz programa): kdsjd
Uneta vrednost se ne nalazi u tabeli prirodnih elemenata.

 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste12.03.2020. u 15:31 - pre 49 meseci
Citat:
djoka_l:
Opservacija:

mislim da sam ti jednom već napisao - inženjeru koji ima samo čekić, svaki problem izgleda kao ekser.
Tako i tebi, svaki zadatak je nerešiv ako ne znaš kako podatke da staviš u dictionary.

Moje rešenje je elementarno, praktično ne koristim ni jednu python caku, ali ti pokazuje da svaki zadatak može da se reši na više načina.
Ja obično biram najprostiji način.

Razdvojiš funkcionalnosti u FUNKCIJE.
Tako ćeš lako da dodaš učitavanje iz fajla, a ne predefinisanu tabelu koju sam ja napravio.

Ako ti se ne sviđa moj način traženja podatka promeniš samo jednu FUNKCIJU.
Ostalo ne moraš da menjaš.

Koristi FUNKCIJE, tako ćeš logičke celine svog rešenje lako zamenjivati kada smisliš bolje rešenje.


Mislim da mi još treba vremena da pohvatam ove osnovne stvari. A funkcije su malo viša faza, čini mi se.
No, probaću u rešenja za naredne zadatke i njih da uključim.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste12.03.2020. u 15:38 - pre 49 meseci
I evo da napravim i poseban post za ovaj zadatak, lakše će se snaći oni koji budu gledali ovaj topik.

Zadatak broj 29

Napiši program koji čita fajl sa informacijama o hemijskim elementima i skladišti ih u odgovarajući strukturu podataka.
Potom prima input od korisnika. Ako je input integer, , onda program ispisuje simbol i naziv elementa sa tim brojem
protona. Ako korisnik unese naziv ili simbol elementa, program ispisuje njegov broj protona. Takođe, program ispisuje
porucu o grešci ako ne postoji elemenat koji bi odgovarao unetom nazivu, simbolu ili broju protona. Program nastavlja
da učitava input sve dok nije uneta prazna linija.

Mustra za fajl sa elementima:

1,H,Hydrogen
2,He,Helium
3,Li,Lithium
4,Be,Beryllium...


Rešenja koja su ovde bila data sam saćuvao ovde
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
136.228.174.*



+3 Profil

icon Re: Zadaci za wannabe pythoniste18.03.2020. u 04:51 - pre 49 meseci
Stiže evo najzad i jubilarni zadatak broj 30.

Napiši program koji čita spisak reči iz fajla i izračunava procenat reči koje koriste
određeno slovo abecede. Ispiši taj procenat za svako slovo, a na kraju i poruku
koje slovo se najređe pojavljuje. Program ignoriše znakove interpunkcije i
isto tako velika i mala slova tretira kao isto slovo.

Svoje rešenje sam postavio ovde.

Dobijam sledeći ispis:

a se javlja u 40.09 odsto reči
b se javlja u 6.23 odsto reči
c se javlja u 16.85 odsto reči
d se javlja u 18.44 odsto reči
e se javlja u 49.71 odsto reči
f se javlja u 11.07 odsto reči
g se javlja u 9.93 odsto reči
h se javlja u 21.55 odsto reči
i se javlja u 30.47 odsto reči
j se javlja u 0.48 odsto reči
k se javlja u 3.08 odsto reči
l se javlja u 17.02 odsto reči
m se javlja u 13.56 odsto reči
n se javlja u 32.13 odsto reči
o se javlja u 35.70 odsto reči
p se javlja u 9.13 odsto reči
q se javlja u 0.45 odsto reči
r se javlja u 28.23 odsto reči
s se javlja u 28.40 odsto reči
t se javlja u 41.34 odsto reči
u se javlja u 14.46 odsto reči
v se javlja u 5.26 odsto reči
w se javlja u 8.89 odsto reči
x se javlja u 1.00 odsto reči
y se javlja u 8.61 odsto reči
z se javlja u 0.62 odsto reči

Slovo koje se najređe pojavljuje je: q
 
Odgovor na temu

B3R1
Berislav Todorovic
NL

Član broj: 224915
Poruke: 794



+630 Profil

icon Re: Zadaci za wannabe pythoniste18.03.2020. u 11:46 - pre 49 meseci
Lepo uradjeno. Popravio si stil kodiranja, nemas vise suvisne korake. Sve u svemu, napredujes.
 
Odgovor na temu

a1234567

Član broj: 46801
Poruke: 297
*.ip-149-56-143.net.



+3 Profil

icon Re: Zadaci za wannabe pythoniste18.03.2020. u 14:01 - pre 49 meseci
Hvala, Berislave.
To je po onome, i ćorava koka ubode neko zrno.
Tako i ja ovoga puta
 
Odgovor na temu

[es] :: Python :: Zadaci za wannabe pythoniste

Strane: << < .. 15 16 17 18 19 20 21 22 23 24 ... Dalje > >>

[ Pregleda: 50990 | Odgovora: 629 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.