Drfeelbad Posted April 18, 2012 Report Posted April 18, 2012 (edited) Buna! Acesta este primul meu thread de pe rstcenter. Vreau sa creez un program in Python 3.2 care sa calculeze viteza in mile pe ora si kilometri dar functia print imi da batai de cap. Cum pot sa printez o variabila integer si un text in acelasi print? Am incercat sa fac si o variabila string dar nu a mers.def mph(): dis=int(input("Insert distance: ")) distype=input("Miles or Kilometers?") minutes=int(input("Insert the number of minutes: ")) secs=int(input("Insert the number of seconds")) time = (minutes + (secs/60))/60 if distype == "miles" or "Miles" or "Mil" or "mil": speedinkm = (dis * 1.61)/time speedinmiles = dis / time if distype == "Kilometer" or "Kilometers" or "kilometer" or "Kilometer" or "km" or "Km": speedinmil = (dis / 1.61)/time speedinkm = dis / time kmh=" kilometers per hour" mph=" miles per hour" print (speedinkm + kmh) print (speedinmil + mph)mph() Edited April 18, 2012 by Drfeelbad Quote
xTremeSurfer Posted April 18, 2012 Report Posted April 18, 2012 Nu stiu python , dar cred ca ar fi ceva de genu print (speedinkm "+" kmh) ai incercat?sau (speedinkm "kilometers per hour") Quote
bcman Posted April 18, 2012 Report Posted April 18, 2012 Ai dou? variante.1. print (str(a) + 'asdf')2. print (a, 'asdf')Unde a este variabila ta de tip întreg, iar 'asdf' e stringul. În primul caz, converte?ti variabila în string ?i concatenezi acest string cu cel?lalt ('asdf'). Rezultatul va fi 2asdf (deci f?r? spa?iu) pentru a = 2.În cel de-al doilea caz, rezultatul va fi afi?at cu spa?iu, adic? 2 asdf. 1 Quote
Drfeelbad Posted April 18, 2012 Author Report Posted April 18, 2012 (edited) Multumusc, dar am dat de alta problemadef convertMiles(dis, time): Miles = dis Km = Miles * 1.61 speedinmil = Miles / time speedinkm = Km / time show(speedinkm, speedinmil)def convertKm(dis, time): Miles = dis * 0.621371 Km= dis speedinmil = Miles / time speedinkm = Km / time show(speedinkm, speedinmil)def show(speedinkm, speedinmil): print(speedinkm, " kilometers per hour") print(speedinmil, " miles per hour")def speed(): speedinmil=0 speedinkm=0 dis=int(input("Insert distance: ")) distype=input("Insert the distance type: ") minutes=int(input("Insert the number of minutes: ")) secs=int(input("Insert the number of seconds: ")) time = (minutes + (secs/60))/60 if distype == "miles" or "Miles" or "Mil" or "mil": convertMiles(dis, time) else: if distype == "Kilometer" or "Kilometers" or "kilometer" or "Kilometer" or "km" or "Km": convertKm(dis, time) else: print ("Incorrect distance type")speed() Rezultatul e gresit, si nu imi dau seama de ceInsert distance: 10Insert the distance type: kmInsert the number of minutes: 60Insert the number of seconds: 016.1 kilometers per hour10.0 miles per hour Edited April 18, 2012 by Drfeelbad Quote
cmiN Posted April 18, 2012 Report Posted April 18, 2012 1) Identarea e fututa, pune cate 4 spatii cum trebuie, probabil ca le ai puse deja, dar la copy paste s-au pierdut, oricum daca ea nu e buna uneori in loc de erori primesti comportament ciudat (de fapt ciudat pentru tine ca pcul face exact ceea ce ii zici).2) Ifurile sunt gandite prost, intotdeauna se va executa convertMiles fiindca primul if va fi intotdeauna True, deoarece prioritate are operatorul de comparatie apoi cei logici si chiar daca nu ar fi fost asa tot este aiurea pentru ca programul mai intai verifica daca ai introdus "miles" (sa zicem ca tu ai introdus "km") -> False apoi se duce la primul or si verifica expresia de dupa el "Miles" care este True (orice difera de 0, None, False, "", [], () este True). Ideea este ca dupa fiecare or sa te repeti cu distype == (adica if distype == "miles" or distype == "Miles" or distype == "Mil" or distype == "mil":). Dar dupa cum vezi e mult cod redundant asa ca ce ar fi sa restrangem iful la if distype in ("miles", "Miles", "Mil", "mil") ce poate fi redus la if distype.lower() in ("miles", "mil") ce poate fi redus la if distype[:3].lower() == "mil" sau de ce nu if distype[0].lower() == "m" analog si pentru km. Intotdeauna cand faci un program de genul ce interogheaza utilizatorul cauta sa stabilesti niste reguli stricte, spre exemplu sa verifici daca distanta este exact "mil" sau "km" daca nu sa fie semnalat cu un avertisment ca a introdus ceva gresit si cu posibilele intrari urmat de un exit sau reluare a buclei (daca faci o bucla a carei scapare este doar introducerea tuturor datelor corect).Oricum cred ca te-am plictisit deja, daca ai ajuns cu cititul pana aici e bine, totusi ar mai fi un:3) Poti formata sirurile C-like: "Ana are %d mere si 4 %s." % (23, "pere") sau "Ana are {} mere si 4 {}.".format(23, pere). La .format cand nu ai nimic intre acolade atunci se ia ordinea argumentelor din paranteza rotunda a metodei, dar poti avea numere la acolade {0}...{1} si atunci se iau argumentele in functie de locul ocupat prin numar, dar se pot folosi si argumente de tip keyword adica: "Ana are {nrMere} mere si 4 {fruct}.".format(fruct="pere", nrMere=23)Daca mai ma uit mult pe codul tau mai dau si de altele dar nu are rost eu cand eram incepator nici de atat nu eram in stare , ma mir ca mai exista interes pentru asa ceva in noile generatii.Pune-te la punct cu logica, cu cele mai scurte si clare drumuri, gandeste algoritmul a fi cat mai robust si prompt si apoi apuca-te de practica mereu cu ideea in minte ca nu programul trebuie sa depinda de user ci invers (cel putin ca incepator) fiindca risti sa incepi cu stangul din prima. 1 Quote
Drfeelbad Posted April 19, 2012 Author Report Posted April 19, 2012 Multumesc! Programul merge cum trebuie folosind if distype[0].lower() == "m" sau "k" Quote