Jump to content

SUBIECTE NOI
« 1 / 5 »
RSS
pelerinaj in Balcik

Noul format Jpegli iși propu...

Dade, dade

Parola la lock screen
 Deparazitare externa pisici fara ...

Seriale turcesti/coreene online H...

Merita un Termostat Smart pentru ...

Sfat achizitie MTB Devron Riddle
 Problema mare cu parintii= nervi ...

switch microtik

Permis categoria B la 17 ani

Sfaturi pentru pregatirea de eval...
 Crapaturi placa

cum imi accesez dosarul electroni...

Momentul Aprilie 1964

Sursa noua - zgomot ?
 

Python - operatii

- - - - -
  • Please log in to reply
13 replies to this topic

#1
pinguinul666

pinguinul666

    Senior Member

  • Grup: Senior Members
  • Posts: 4,710
  • Înscris: 06.10.2015
sal

in Linux, am scris un mic script de python, numit simplu calcul.py, rudimentar, ce calculeaza media aritmetica a doua numere pozitive introduse de user.
scriptul verifica valorile introduse, ca ambele sa fie pozitive (mai mari ca zero) (altfel, da avertisment)

intai, userul introduce cele 2 cifre.
apoi, scriptul le transforma in floating points (nr reale, in caz ca suma nu e numar par)
apoi, odata transformate, cele doua numere sunt adunate si impartite la 2, iar suma e aratata

am proleme la final, unde vreau sa scriu pur si simplu, valoare1 + valoare 2, ambele impartite la 2

imi da eroarea si o citez aici:

Quote

traceback (most recent call last):
  File "calcul.py", line 16, in <module>
print (valoare1 + valoare2)/2.0
TypeError: unsupported operand type(s) for /: 'NoneType' and 'float'


Codul sursa al micului script:

Quote


#!/usr/bin/env python3
cifra1 = input ('Introdu prima cifra: ');
cifra2 = input ('Introdu a doua cifra: ');

valoare1 = float (cifra1);
valoare2 = float (cifra2);

if valoare1 <= 0.0 :
  print ('Doar numere pozitive, mai mari de 0 !')
  quit()
if valoare2 <= 0.0 :
  print ('Doar numere POZITIVEE, mai mari de 0 !')
  quit()
else:
  print (valoare1 + valoare2)/2.0

ce gresesc?
si care e solutia?

multumesc


Later Edit:  am "trisat" nitel - adica am mai definit o variabila numita "suma = valoare1 + valoare2", iar la sfarsit am simplu: print (suma/2)
insa as dori, daca se poate, sa fac asta fara a mai defini o alta variabila pt suma valorilor introduse....sa adun direct valorile introduse

Si inca ceva - as dori ca verificarea faptului ca sunt pozitive numerele, sa se intample dupa introducerea fiecaruia, nu dupa ce ambele au fost introduse!
Adica asa cum faceam in C++, cand puteam verifica fiecare valoare individual.
in C++, daca primul numar introdus era negativ, se oprea programul.

Or aici remarc ca programul imi cere si a doua cifra, desi prima valoare e negativa (sau egala cu zero).

Se poate asta ?

Edited by pinguinul666, 01 March 2017 - 15:33.


#2
dd13

dd13

    Member

  • Grup: Members
  • Posts: 345
  • Înscris: 12.01.2017
In Python3 "print" este o functie.

Deci o folosesti cam asa:
print("salut")

Tu pe ultima linie ai
print (valoare1 + valoare2)
deci iti afiseaza suma celor doua valori si returneaza un None (null), iar apoi imparte acest None la 2, ceea ce nu se poate face:
print (valoare1 + valoare2) / 2.0
fiind echivalent cu
( print (valoare1 + valoare2) ) / 2.0

Ia incearca pe ultima linie:
print ( (valoare1 + valoare2) / 2.0 )

Edited by dd13, 01 March 2017 - 15:43.


#3
pinguinul666

pinguinul666

    Senior Member

  • Grup: Senior Members
  • Posts: 4,710
  • Înscris: 06.10.2015
GATA!
si verificarea dupa fiecare cifra !

am rationalizat nitel si am schimbat ordinea operatiunilor - adica am pus operatiunea de verificare dupa introducerea primei cifre si abia apoi sa te lase sa o introduci si pe a doua!

adica stil C++ :P

Noul cod:

Quote


#!/usr/bin/env python3

cifra1 = input ('Introdu prima cifra: ');
valoare1 = float (cifra1);
  if valoare1 <= 0.0 :
  print ('Doar numere pozitive, mai mari de 0 !')
  quit()
else:
  cifra2 = input ('Introdu a doua cifra: ');
  valoare2 = float (cifra2);
if valoare2 <= 0.0 :
  print ('Doar numere POZITIVEE, mai mari de 0 !')
  quit()

suma = valoare1 + valoare2;

print (suma / 2.0);

dar problema initiala a ramas ....anume a adunarii valorilor valoare 1 si 2 si impartirea lor la 2, fara a apela la o variabila intermediara pt suma lor

 dd13, on 01 martie 2017 - 15:36, said:

In Python3 "print" este o functie.

Deci o folosesti cam asa:
print("salut")

Tu pe ultima linie ai
print (valoare1 + valoare2)
deci iti afiseaza suma celor doua valori si returneaza un None (null), iar apoi imparte acest None la 2, ceea ce nu se poate face:
print (valoare1 + valoare2) / 2.0
fiind echivalent cu
( print (valoare1 + valoare2) ) / 2.0

Ia incearca pe ultima linie:
print ( (valoare1 + valoare2) / 2.0 )


multe multumiri

Edited by pinguinul666, 01 March 2017 - 15:40.


#4
Konatau

Konatau

    Junior Member

  • Grup: Members
  • Posts: 205
  • Înscris: 18.03.2012
Ai incercat:
print(str((valoare1 + valoare2)/2))

?

Edited by Konatau, 01 March 2017 - 16:12.


#5
MembruAnonim

MembruAnonim

    MembruAnonim

  • Grup: Banned
  • Posts: 398,284
  • Înscris: 08.10.2015
In loc sa te complici cu 4 variabile incearca asa:
cifra1=float(input("Introdu valoarea A: ))
cifra2=float(input("Introdu valoarea B: ))


Verificarea numerelor:
if cifra1 >= 0.0 and cifra2 >= 0.0:
	 ''' calculezi si faci ce ai de facut '''
else:
	 print("Valoarea X e mai mica ca 0. Valorile acceptate sunt cele mai mari sau egale cu 0.")
	 break


Vezi asa daca merge si pare mai frumos.

Edited by MembruAnonim, 01 March 2017 - 16:19.


#6
poadol

poadol

    Guru Member

  • Grup: Senior Members
  • Posts: 14,104
  • Înscris: 13.12.2010

 pinguinul666, on 01 martie 2017 - 15:46, said:

GATA!
si verificarea dupa fiecare cifra !
am rationalizat nitel si am schimbat ordinea operatiunilor - adica am pus operatiunea de verificare dupa introducerea primei cifre si abia apoi sa te lase sa o introduci si pe a doua!
adica stil C++ Posted Image
Noul cod:
dar problema initiala a ramas ....anume a adunarii valorilor valoare 1 si 2 si impartirea lor la 2, fara a apela la o variabila intermediara pt suma lor
multe multumiri
Asa merge, cica era greseala de indentatie:
#!/usr/bin/env python3

cifra1 = input ('Introdu prima cifra: ');
valoare1 = float (cifra1);
if valoare1 <= 0.0 :
  print ('Doar numere pozitive, mai mari de 0 !')
  quit()
else:
  cifra2 = input ('Introdu a doua cifra: ');
  valoare2 = float (cifra2);
if valoare2 <= 0.0 :
  print ('Doar numere POZITIVEE, mai mari de 0 !')
  quit()

suma = valoare1 + valoare2;

print (suma / 2.0);


Daca am inteles eu gresit, scuze.

Attached Files


Edited by poadol, 01 March 2017 - 16:24.


#7
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,443
  • Înscris: 10.08.2005
suma = float(0);
nrElem = 2;
cifra = input ('Introdu prima cifra: ');
if cifra > 0:
	suma += cifra;
else:
	print("Integer Error");
	quit();
cifra = input ('Introdu a doua cifra: ');
if cifra > 0:
	suma += cifra;
else:
	print("Integer Error");
	quit();
print (suma / nrElem);

observati cum se repeta codul

Edited by MarianG, 01 March 2017 - 20:54.


#8
VladBtz

VladBtz

    Active Member

  • Grup: Members
  • Posts: 1,702
  • Înscris: 24.09.2014

 MarianG, on 01 martie 2017 - 20:54, said:


observati cum se repeta codul

iar probleme de matematica booleana ? Posted Image)

Edited by VladBtz, 02 March 2017 - 00:09.


#9
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,443
  • Înscris: 10.08.2005
depinde de cum privesti problema,
ideea este ca: poate vrei sa citesti un numar arbitrar de valori
nu ai sa copiezi
cifra = input ('Introdu a doua cifra: ');
if cifra > 0:
		suma += cifra;
else:
		print("Integer Error");
		quit();

de X ori, ci doar trebuie sa il executi in mod repetat

Edited by MarianG, 02 March 2017 - 00:17.


#10
xxvirusxx

xxvirusxx

    Retired

  • Grup: Senior Members
  • Posts: 13,441
  • Înscris: 11.11.2005
Eu sunt mai incepator :lol:, nu am mai avut timp de citit

procentTVA=int(input('Tasteaza o valoare pentru TVA : '));
extragereTVA=(procentTVA+100)/100
cuTVA=float(input('Tasteaza pretul cu TVA: '));
faraTVA=float(cuTVA/extragereTVA)
valoareTVA=cuTVA-faraTVA

print('Pretul fara TVA este : ', format(faraTVA, '.2f'));
print('Valoarea TVA este: ', format(valoareTVA, '.2f'));


#11
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,443
  • Înscris: 10.08.2005
Atunci vezi despre try except
eu am vrut sa scot in evidenta cu totul altceva,
metoda in sine o ai o singura data, iar cand corectezi  (limite si exceptii) lucrezi intr-un sigur loc,

#12
pinguinul666

pinguinul666

    Senior Member

  • Grup: Senior Members
  • Posts: 4,710
  • Înscris: 06.10.2015

 MembruAnonim, on 01 martie 2017 - 16:18, said:

In loc sa te complici cu 4 variabile incearca asa:
cifra1=float(input("Introdu valoarea A: ))
cifra2=float(input("Introdu valoarea B: ))


Verificarea numerelor:
if cifra1 >= 0.0 and cifra2 >= 0.0:
	 ''' calculezi si faci ce ai de facut '''
else:
	 print("Valoarea X e mai mica ca 0. Valorile acceptate sunt cele mai mari sau egale cu 0.")
	 break


Vezi asa daca merge si pare mai frumos.

multam fain! :D

#13
MembruAnonim

MembruAnonim

    MembruAnonim

  • Grup: Banned
  • Posts: 398,284
  • Înscris: 08.10.2015
#!/usr/bin/python

from sys import argv

numbers = 0
suma = 0
readNr = 0

while readNr >= 0 and numbers < int(argv[1]):
	readNr = float(input("Introdu numarul: "))
	suma += readNr
	numbers += 1

print("Media numerelor introduse este ", (suma / numbers))

Apelezi jucaria cu un argument, adica cate numere vrei sa introduci de la tastatura:

Quote

┌(ghost)─(Shouryuu)─(4.9.11-1-ARCH)
└─(python)─(14 files, 60KB)─ $ python test.py 2
Introdu numarul: 5
Introdu numarul: 15
Media numerelor introduse este  10.0

┌(ghost)─(Shouryuu)─(4.9.11-1-ARCH)
└─(python)─(14 files, 60KB)─ $ python test.py 5
Introdu numarul: 10
Introdu numarul: 2
Introdu numarul: 4
Introdu numarul: 100
Introdu numarul: 12
Media numerelor introduse este  25.6


#14
MarianG

MarianG

    be that as it may

  • Grup: Moderators
  • Posts: 31,443
  • Înscris: 10.08.2005

 pinguinul666, on 02 martie 2017 - 08:56, said:


multam fain! Posted Image
Incearca sa introduci valori gresite, cum ar o litera

Anunturi

Chirurgia cranio-cerebrală minim invazivă Chirurgia cranio-cerebrală minim invazivă

Tehnicile minim invazive impun utilizarea unei tehnologii ultramoderne.

Endoscoapele operatorii de diverse tipuri, microscopul operator dedicat, neuronavigația, neuroelectrofiziologia, tehnicile avansate de anestezie, chirurgia cu pacientul treaz reprezintă armamentarium fără de care neurochirurgia prin "gaura cheii" nu ar fi posibilă. Folosind tehnicile de mai sus, tratăm un spectru larg de patologii cranio-cerebrale.

www.neurohope.ro

0 user(s) are reading this topic

0 members, 0 guests, 0 anonymous users

Forumul Softpedia foloseste "cookies" pentru a imbunatati experienta utilizatorilor Accept
Pentru detalii si optiuni legate de cookies si datele personale, consultati Politica de utilizare cookies si Politica de confidentialitate