Уведомления

Группа в Telegram: @pythonsu

#1 Май 23, 2013 14:22:39

r2d2
Зарегистрирован: 2013-05-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

НОД для нескольких чисел

Питон увидел 7 минут назад.

x = gcd_recur (spisok[0], spisok[1])
return a if b == 0 else gcd_recur (b, a % b)
TypeError: not all arguments converted during string formatting

Ошибка в операции остатка от деления над списком?

def input_ ():
    spisok = list (raw_input('Введите числа: '))
    return spisok
def count (l):
    return  len (l)
  
def gcd_recur (a, b):
    return a if b == 0 else gcd_recur (b, a % b)
spisok = input_ ()
quantity = count (spisok)
def Nod (spisok, quantity):
    x = gcd_recur (spisok[0], spisok[1])
    element = 2
    for element in quantity:
        x = gcd_recur(x,spisok[element])
    element +=1  
    return x   
Nod (spisok, quantity)

Юзай теги
[code python][/code]

Отредактировано FishHook (Май 23, 2013 14:51:00)

Офлайн

#2 Май 23, 2013 14:56:12

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

НОД для нескольких чисел

Подозреваю, что а - строка. Вы ведь нигде не преобразуете введенное число в собственно число.

#Это строка
raw_input('Введите числа: ')
#Это число
int(raw_input('Введите числа: '))
А символ процента примененный к строке означает подстановку параметров в форматированную строку, о чем Вам и сообщает ошибка.



Офлайн

#3 Май 23, 2013 15:11:04

r2d2
Зарегистрирован: 2013-05-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

НОД для нескольких чисел

Как тогда сделать spisok массивом элементов int, чтобы потом над ними можно было произвести операцию остатка от деления.
Если вот так

spisok = list (raw_input('Введите числа: '))
spisok = int(spisok)

ошибка

int() argument must be a string or a number, not 'list'

Офлайн

#4 Май 23, 2013 16:48:34

sanodin
От:
Зарегистрирован: 2011-06-16
Сообщения: 515
Репутация: +  31  -
Профиль   Отправить e-mail  

НОД для нескольких чисел

spisok = list (raw_input('Введите числа: '))
for i in spisok:
    print type(i)
    i=int(i)

Офлайн

#5 Май 23, 2013 19:30:02

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

НОД для нескольких чисел

r2d2
Как тогда сделать spisok массивом элементов int, чтобы потом над ними можно было произвести операцию остатка от деления.
В любом учебнике по питону это есть на первых десяти страницах после оглавления
l=["1","2","3"]
l=map(int,l)

Я так понимаю, что Вам нужен список цифр, а двузначные числа не участвуют?



Офлайн

#6 Май 23, 2013 22:55:00

r2d2
Зарегистрирован: 2013-05-23
Сообщения: 9
Репутация: +  0  -
Профиль   Отправить e-mail  

НОД для нескольких чисел

Пока без двухзначных бы разобраться.
В функцию список поступает правильно, но всё равно почему то выводится ошибка

return a if b == 0 else (b, a % b)
TypeError: not all arguments converted during string formatting
Что, я так понимаю, значит, что не все элементы преобразованы к типу str, что естественно, когда они все int. Почему он их хочет преобразовать в str?
Введите числа: 123
<type 'int'>
<type 'int'>
<type 'int'>
['1', '2', '3'] 3

Отредактировано r2d2 (Май 23, 2013 23:08:57)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version