Gå til innhold

[Python] Hvordan skrive inn en brøk/fraction, og deretter skrive det ut?


Anbefalte innlegg

Heisann.

 

Dette er sikkert tidenes mest tungvindte kode for en liten prosess. Tenkte å jobbe med å forenkle den litt etter at jeg har fått svar på følgende spm:

 

Jeg har laget et program som Gaus-eliminerer en matrise. Jeg taster da inn 16 tall, og så skriver programmet ut hver operasjon av løsningen, med beskrivelse.

Jeg ønsker å gi brukeren muligheten til å skrive inn en brøk i stede for heltall eller kommatall. F.eks "4/8", også vil jeg at programmet da gjør dette om til "1/2"v

 

 

Jeg leste litt om fractions, og gjorde et halvhjertet forsøk med dette. Jeg får det til å fungere hvis jeg skriver inn tallene rett inn i koden, men ikke når jeg skriver inn det samme i programmet.

 

 

Noen forslag til hvordan jeg kan få til dette?

 

 

import math
from fractions import Fraction


def sqcube():
   a = float(raw_input('r1, k1: '))
   b = float(raw_input('r1, k2: '))
   c = float(raw_input('r1, k3: '))
   d = float(raw_input('r1, k4: '))    

   e = float(raw_input('r2, k1: '))
   f = float(raw_input('r2, k2: '))
   g = float(raw_input('r2, k3: '))
   h = float(raw_input('r2, k4: '))

   i = float(raw_input('r3, k1: '))
   j = float(raw_input('r3, k2: '))
   k = float(raw_input('r3, k3: '))
   l = float(raw_input('r3, k4: '))

   m = Fraction(16, -10)

   print ''
   print 'The inserted matrix'
   print a, b, c, d
   print e, f, g, h
   print i, j, k, l
   print ''

   if a != 1:
     if e == 1:
e1, f1, g1, h1 = a, b, c, d
a, b, c, d = e, f, g, h
e, f, g, h = e1, f1, g1, h1
print 'Swapping row1 with row2'
print a, b, c, d
print e, f, g, h
print i, j, k, l
print ''

     elif i == 1:
i1, j1, k1, l1 = a, b, c, d
a, b, c, d = i, j, k, l
i, j, k, l = i1, j1, k1, l1
print 'Swapping row1 with row3'
print a, b, c, d
print e, f, g, h
print i, j, k, l
print ''

     else:
print 'Divide row1 by', a
d = d/a
c = c/a
b = b/a
a = a/a

print a, b, c, d
print e, f, g, h
print i, j, k, l
print ''

   print 'Subtracts ', e, '*row1 from row2, and ', i,'*row1 from row3'
   h = h-(e*d)
   g = g-(e*c)
   f = f-(e*b)  
   e = e-(e*a)
   l = l-(i*d)
   k = k-(i*c)
   j = j-(i*b)
   i = i-(i*a)

   print a, b, c, d
   print e, f, g, h
   print i, j, k, l
   print ''

   if f != 1:
     e = (e/f)
     g = (g/f)
     h = (h/f)
     f = (f/f)
     print 'Divide the second row with the value of the second colonne to have a leading 1 in the stear'
     print a, b, c, d
     print e, f, g, h
     print i, j, k, l
     print ''
   l = l-(j*h)
   k = k-(j*g)
   i = i-(j*e)
   j = j-(j*f)
   print 'Creates zero in the second colonne for row3. This is done by subtracting a constant from the row'
   print a, b, c, d
   print e, f, g, h
   print i, j, k, l
   print ''

   if k != 1:
     i = (i/k)
     j = (j/k)
     l = (l/k)
     k = (k/k)
   print 'Divide the third row with the value of the second colonne to have a leading 1 in the stear'
   print a, b, c, d
   print e, f, g, h
   print i, j, k, l
   print ''


sqcube()

Lenke til kommentar
Videoannonse
Annonse

Jeg ønsker å gi brukeren muligheten til å skrive inn en brøk i stede for heltall eller kommatall. F.eks "4/8", også vil jeg at programmet da gjør dette om til "1/2"

 

Jeg leste litt om fractions, og gjorde et halvhjertet forsøk med dette. Jeg får det til å fungere hvis jeg skriver inn tallene rett inn i koden, men ikke når jeg skriver inn det samme i programmet.

 

>>> from fractions import Fraction as F
>>> F("4/8")
Fraction(1, 2)

 

Hva er det _minste_ eksempelet som illustrerer det du prøver/ønsker å få til? fractions.py har det regulære uttrykket som definerer hva som betraktes som gyldig brøk. Dersom det ikke er tilstrekkelig, definer gjerne ditt eget minispråk og bruk dertil egnet verktøy for å trekke ut teller og nevner.

Lenke til kommentar

Takk skal du ha. Skal prøve dette så fort jeg er på progge-pcen. Men skjønte ikke helt det andre du skrev. "minste eksempelet"?, "Definere mitt eget minispråk"?, "egnet verktøy"?

 

 

Hadde satt veldig stor pris på om du kunne gått litt mer i dybden her :)

Lenke til kommentar
Jeg ønsker å gi brukeren muligheten til å skrive inn en brøk i stede for heltall eller kommatall. F.eks "4/8", også vil jeg at programmet da gjør dette om til "1/2"

Du kan lage en funksjon som tar bruker input.

 

from fractions import Fraction as F

def user_input(arg=None):
   arg = raw_input('Enter a fractions: ') #4/8
   return 'Your fraction was the same as %s' % F(arg)

print user_input(arg)
'''-->Out
Your fraction was the same as 1/2
'''

Eller om du vil ta bruker input inn som et argument.

from fractions import Fraction as F

def user_input(arg=None):    
   return 'Your fraction was the same as %s' % F(arg)

arg = raw_input('Enter a fractions: ') #4/8
print user_input(arg)
'''-->Out
Your fraction was the same as 1/2
'''

Det er uklart hvordan du vil bruke dette i koden din.

Nå har du en lang funksjon,del opp i flere funksjoner.

Dette gjør koden letter og lese og teste.

 

Du bør gjøre feilbehandling(exception handling) ved bruker input.

Bare test med en tastefeil og programmet kræsjer,skriv inn en bokstav i bruker input.

Endret av SNIPPSAT
Lenke til kommentar

Takk skal du ha. Skal prøve dette så fort jeg er på progge-pcen.

 

Du kan begynne med å ikke bruke "progge" i ditt vokabular.

 

Men skjønte ikke helt det andre du skrev. "minste eksempelet"?,

 

Ingen er interessert i å lese 2 sider med tvilsom kode for Gauss-eliminasjon, når problemet gjelder brøkangivelse fra brukeren. Mesteparten av koden du postet er komplett uinteressant for det spesifikke problemet du har (nemlig brøkinnlesing).

 

Lag det minste eksempelet (færrest tegn) som illustrerer det problemet du egentlig ønsker hjelp til.

 

"Definere mitt eget minispråk"?,

 

fractions-modulen definerer et regulært uttrykk for hva den modulen regner som en brøk. Denne kan du lese selv i fractions.py (som følger med CPython). Dersom definisjonen som fractions bruker ikke passer med din ide av hvordan en brøk skal se ut, så kan du lage din egen beskrivelse av det og deretter skrive din egen funksjon for å omforme en tekst til en instans av Fraction basert på denne beskrivelsen. F.eks. denne artikkelen forklarer "eget minispråk" nærmere.

 

"egnet verktøy"?

 

re-modulen er ikke nødvendigvis et spesielt godt valg (regulære uttrykk har en veldig lei tendens til å vokse ut til det ikke-håndterlige (fractions.py:_RATIONAL_FORMAT er et godt eksempel, forresten)). Det finnes verktøy for Python som sjekker om input er ihht en bestemt spesifikasjon, og som kan være greiere å vedlikeholde enn re.

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...