Преобразование строки в кортеж целых чисел, который добавляется в список кортежей

Это задание предназначено для обучения функции «карта».

Пользователь вводит дробь, такую ​​как «1/2» или «6/19», которая затем преобразуется из строки в кортеж целых чисел.

После того, как все дроби введены, возвращается список кортежей.

Я работаю с этим списком, чтобы уменьшить, отфильтровать и отсортировать кортежи, но я не уверен, как даже начать задачу и получить список.

Вот пример того, что должно работать:

Мне нужна помощь в преобразовании введенных дробей:

Enter fraction: 1/2
Enter fraction: 6/19
Enter fraction: 20/8

в кортежи

(1, 2)
(6, 19)
(20, 8)

И после получения всех дробей необходимо вернуть список кортежей.

[(1, 2), (6, 19), (20, 8)]

Это то, что у меня есть до сих пор:

def prompt_fractions():
    frac_list = []
    while True:
        my_frac = input("Enter fraction: ")
        if my_frac == "stop":
            return frac_list
        else:
            print(my_frac)
            frac_list.append(my_frac)

def main():
    frac_list = prompt_fractions()
    print(frac_list)

я пытался использовать

my_frac = list(map(prompt_fractions, my_frac))

а также

my_frac = my_frac.split('/')

но первое требовало другого аргумента, и я не был уверен, что делать со вторым.


person Spook Chaser    schedule 26.10.2014    source источник


Ответы (1)


Вы были почти там; my_frac.split('/') возвращает список строк, а не кортеж целых чисел:

>>> '1/2'.split('/')
['1', '2']

Итак, вам нужно преобразовать; map() пригодится здесь:

my_frac = tuple(map(int, my_frac.split('/')))

Это создает кортеж, в котором каждая часть результата разделения сначала преобразуется в целое число:

>>> tuple(map(int, '1/2'.split('/')))
(1, 2)
>>> tuple(map(int, '6/19'.split('/')))
(6, 19)
>>> tuple(map(int, '20/8'.split('/')))
(20, 8)
person Martijn Pieters    schedule 26.10.2014
comment
Большое спасибо! Я знал, что это простое решение, я просто не знал, что это такое. - person Spook Chaser; 26.10.2014