Jump to content
Drfeelbad

Problema

Recommended Posts

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 by Drfeelbad
Link to comment
Share on other sites

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.

  • Downvote 1
Link to comment
Share on other sites

Multumusc, dar am dat de alta problema

def 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 ce

Insert distance: 10

Insert the distance type: km

Insert the number of minutes: 60

Insert the number of seconds: 0

16.1 kilometers per hour

10.0 miles per hour

Edited by Drfeelbad
Link to comment
Share on other sites

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.

  • Downvote 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.



×
×
  • Create New...