12 svar
395 visningar
Le oeuf du canard behöver inte mer hjälp
Le oeuf du canard 19 – Fd. Medlem
Postad: 25 feb 2018 19:15

Gör en funktion som tar en lista av bråk och delar in nämnaren och täljaren i en tupel av listor

Jag kommer inte på hur jag borde lösa detta...

Write a function getNumbers(listOfFractions), that gets a list of fractions as an argument.

The function parses the numerators and deminominators into their own lists, and returns both lists in a tuple.

For example, if called with agument list [1/2, 3/4], the function would return a tuple that contains lists ([1,3], [2,4]).

 

Jag har försökt lösa det med

def getNumbers(listOfFractions):
       i = 0
       while i in range[0,len(listOfFractions),1):
                list = tuple(list(listOfFractions[i].split('\')))

pi-streck=en-halv 497 – Fd. Medlem
Postad: 25 feb 2018 19:19

Innehåller listan med rationella tal strängar? Det vill säga,

['1/2','3/4', ...]?

Le oeuf du canard 19 – Fd. Medlem
Postad: 25 feb 2018 19:44

frac = []
for i in range(random.randint(10,15)):
f = Fraction(random.randint(1,5), random.randint(2,8))
frac.append(f)

print "List of fractions:", frac
num,den = getNumbers(frac)
print "Numerators:", num
print "Denominators:", den

det där är baskoden varefter vi skall lägga in vårt. Allt vad jag vet tyvärr.

pi-streck=en-halv 497 – Fd. Medlem
Postad: 25 feb 2018 19:48

här är Fraction en funktion som gör vad?

skapar den strängar?

Le oeuf du canard 19 – Fd. Medlem
Postad: 25 feb 2018 19:53

import random
from fractions import Fraction

 

oj detta blev bort från toppen...

tror den skapar integer type objects?

pi-streck=en-halv 497 – Fd. Medlem
Postad: 25 feb 2018 19:57 Redigerad: 25 feb 2018 20:00

Edit: Okej, ska kika på den funktionen.  Ah, okej. Då funkar inte mitt förslag nedan.

Angående din kod:

"while i in range[0,len(listOfFractions),1):"  
du kan använda "for i in listOfFractions:" istället, och då itererar man över varje element i listan. Och du använder "[" istället för "(" vid range-funktionen.

"list = tuple(list(listOfFractions[i].split('\')))"
här "skriver du över" list i varje iteration? och du ska splitta på '/', inte '\'?

 

Här är ett förslag som gör jobbet i alla fall.

def getNumbers(listOfFractions):
    out = []
    for i in listOfFractions:
        numerator, denominator = int(i[0]), int(i[-1])
        out.append([numerator, denominator])
    return tuple(out)

Le oeuf du canard 19 – Fd. Medlem
Postad: 25 feb 2018 20:01

 den ger en sådanhäran felkod

numerator, denominator = int(i[0]), int(i[-1])
TypeError: 'Fraction' object does not support indexing

pi-streck=en-halv 497 – Fd. Medlem
Postad: 25 feb 2018 20:04
Le oeuf du canard skrev :

 den ger en sådanhäran felkod

numerator, denominator = int(i[0]), int(i[-1])
TypeError: 'Fraction' object does not support indexing

Ja,

byt ut till:

numerator, denominator = i.numerator, i.denominator

Fraction-objektet har de attributen.

Le oeuf du canard 19 – Fd. Medlem
Postad: 25 feb 2018 20:06

 num,den = getNumbers(frac)
ValueError: too many values to unpack

 

nu får jag denna istället

pi-streck=en-halv 497 – Fd. Medlem
Postad: 25 feb 2018 20:11

Ah, jag missuppfattade. 

def getNumbers(listOfFractions):
   nums = []
   dens = []
   for i in listOfFractions:
       numerator, denominator = i.numerator, i.denominator
       nums.append(numerator)
       dens.append(denominator)
   return tuple([nums,dens])

Le oeuf du canard 19 – Fd. Medlem
Postad: 25 feb 2018 20:12

 Aah super najs!

pi-streck=en-halv 497 – Fd. Medlem
Postad: 25 feb 2018 20:14
Le oeuf du canard skrev :

 Aah super najs!

Eller, kortare:

def getNumbers(listOfFractions):
   nums = [i.numerator for i in listOfFractions]
   dens = [i.denominator for i in listOfFractions]

   return tuple([nums, dens])

PeterÅ 842
Postad: 28 feb 2018 14:33 Redigerad: 28 feb 2018 14:36

'

Svara
Close