TypeError: не может умножить последовательность на non-int типа 'str' мой код включен [дубликат]

Согласно doc (http://www.w3schools.com/jsref/jsref_sethours.asp) setHours () должен просто изменить значение часа объекта даты, а не преобразовать его.

В этом документе говорится:

Возвращаемое значение: число, представляющее количество миллисекунд между объектом даты и полночь 1 января 1970 г.

Это не convert объект даты. Он изменяет существующий, а затем возвращает значение.

Созданный ранее объект даты до сих пор существует с измененным значением часа и любыми ссылками на него (например, тот, который у вас еще есть в переменной с именем date).

216
задан martineau 21 May 2017 в 01:40
поделиться

16 ответов

Python 2.x

Для ввода пользовательских данных использовались две функции: input и raw_input . Разница между ними заключается в том, что raw_input не оценивает данные и не возвращает их в виде строки. Но input будет оценивать все, что вы ввели, и результат оценки будет возвращен. Например,

>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

Данные 5 + 17 оцениваются, а результат - 22. Когда он оценивает выражение 5 + 17, он обнаруживает, что вы добавляете два числа, и поэтому результат будет иметь одинаковый тип int. Таким образом, преобразование типа выполняется бесплатно, а 22 возвращается в результате input и сохраняется в переменной data. Вы можете думать о input как raw_input, состоящем из вызова eval .

>>> data = eval(raw_input("Enter a number: "))
Enter a number: 5 + 17
>>> data, type(data)
(22, <type 'int'>)

Примечание: вы должны быть осторожны, когда используете input в Python 2.x. Я объяснил, почему нужно быть осторожным при его использовании, в этом ответе .

Но raw_input не оценивает ввод и возвращает его как строку, как строку.

>>> import sys
>>> sys.version
'2.7.6 (default, Mar 22 2014, 22:59:56) \n[GCC 4.8.2]'
>>> data = raw_input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <type 'str'>)

Python 3.x

Python 3.x input и Python 2.x raw_input похожи, а raw_input недоступен в Python 3.x.

>>> import sys
>>> sys.version
'3.4.0 (default, Apr 11 2014, 13:05:11) \n[GCC 4.8.2]'
>>> data = input("Enter a number: ")
Enter a number: 5 + 17
>>> data, type(data)
('5 + 17', <class 'str'>)

Решение

Чтобы ответить на ваш вопрос, поскольку Python 3.x не оценивает и не конвертирует тип данных, вам необходимо явно преобразовать его в int s, с int , как это

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Вы можете принимать номера любой базы и преобразовывать их непосредственно в base-10 с помощью функции int, например

>>> data = int(input("Enter a number: "), 8)
Enter a number: 777
>>> data
511
>>> data = int(input("Enter a number: "), 16)
Enter a number: FFFF
>>> data
65535
>>> data = int(input("Enter a number: "), 2)
Enter a number: 10101010101
>>> data
1365

Второй параметр указывает, что является базой введенных чисел, а затем внутренне понимает и преобразует его. Если введенные данные ошибочны, он выдаст ValueError.

>>> data = int(input("Enter a number: "), 2)
Enter a number: 1234
Traceback (most recent call last):
  File "<input>", line 1, in <module>
ValueError: invalid literal for int() with base 2: '1234'

Кроме того, ваша программа может быть немного изменена, например

while True:
    ...
    ...
    if input("Play again? ") == "no":
        break

Вы можете избавиться от переменной play, используя break и while True.

PS: Python не ожидает ; в конце строки:)

212
ответ дан Community 19 August 2018 в 04:39
поделиться
  • 1
    Есть ли другой способ, как функция или что-то такое, что нам не нужно преобразовывать в int в 3.x, кроме того, что явное преобразование в int? – Shreyan Mehta 9 April 2016 в 06:19
  • 2
    @ShreyanMehta eval будет работать, но не пойду на это, если у вас нет насущных причин. – thefourtheye 9 April 2016 в 07:01
  • 3
    Не могли бы вы добавить версию tl; dr в начало ответа? Это длинный ответ, и я считаю, что многие не потрудились его прочитать и будут просто использовать input() и eval(input()) – Elazar 13 November 2017 в 02:19
  • 4
    @thefourtheye хотя бы использовать ast.literal_eval для этого. У него нет проблем безопасности eval. – spectras 6 April 2018 в 12:48
  • 5
    Я использую этот Q & amp; A как цель обмана, но, возможно, вы можете добавить TDLR с решением python 3, то есть int(input() ... вверху? Python 2 близится к концу своей жизни, а информация о python 3 слишком похожа на IMO – Chris_Rands 24 July 2018 в 14:36
  • 6
    – thefourtheye 17 October 2018 в 06:01

Я столкнулся с проблемой получения целочисленного ввода при решении задачи на CodeChef , где две целые числа, разделенные пробелом, должны быть считаны из одной строки.

Пока int(input()) достаточно для одного целого числа, я не нашел прямого способа ввода двух целых чисел. Я пробовал это:

num = input()
num1 = 0
num2 = 0

for i in range(len(num)):
    if num[i] == ' ':
        break

num1 = int(num[:i])
num2 = int(num[i+1:])

Теперь я использую num1 и num2 как целые числа. Надеюсь, это поможет.

2
ответ дан Aravind 19 August 2018 в 04:39
поделиться
  • 1
    Это выглядит очень интересно. Однако, не i уничтожен, когда цикл for завершен? – Hosch250 23 May 2014 в 17:33
  • 2
    @hosch250 Когда цикл завершен, значение индексной переменной (здесь i) остается. Я попробовал эту штуку, и она работает правильно. – Aravind 24 May 2014 в 16:18
  • 3
    Для такого рода манипулирования вводами вы можете либо num1, num2 = map(int, input().split()), если знаете, сколько целых чисел вы встретите, или nums = list(map(int, input().split())), если вы этого не сделаете. – Mathias Ettinger 12 July 2018 в 12:58

Несколько вопросов требуют ввода нескольких целых чисел в одной строке. Лучший способ - ввести всю строку чисел одну строку, а затем разделить на целые числа.

 p=raw_input()
    p=p.split()      
    for i in p:
        a.append(int(i))
8
ответ дан Dan Neely 19 August 2018 в 04:39
поделиться

По умолчанию функция ввода принимает входные данные в качестве формата строки

для другого типа данных, который вы должны вводить пользователю

. В Python 2 мы используем функцию raw_input (). он ждет, когда пользователь наберет какой-то ввод и нажмите «возврат», и нам нужно сохранить значение в переменной путем кастинга в качестве нашего типа данных желания. Будьте осторожны при использовании литья типа

x = raw_input("Enter a number: ") #String input
x = int(raw_input("Enter a number: ")) #integer input 
x = float(raw_input("Enter a float number: ")) #float input 
x = eval(raw_input("Enter a float number: ")) #eval input

В Python 3 мы используем функцию input (), которая возвращает значение входного пользователя

x = input("Enter a number: ") #String input

, если вы вводите строку, int, float , eval будет принимать в качестве ввода строки

x = int(input("Enter a number: ")) #integer input 

, если вы введете строку для int cast ValueError: недействительный литерал для int () с базой 10:

x = float(input("Enter a float number: ")) #float input

, если вы введите строку для float cast ValueError: не удалось преобразовать строку в float

x = eval(input("Enter a float number: ")) #eval input

, если вы введете строку для eval cast

NameError: name '' не определено

Эти ошибки также применимы для python 2

1
ответ дан Derlin 19 August 2018 в 04:39
поделиться

Python 3.x имеет функцию input(), которая всегда возвращает строку. Поэтому вы должны преобразовать в int

python 3.x

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

python 2.x

В функциях python 2.x raw_input() и input() всегда возвращает строку, поэтому вы должны также преобразовать их в int.

x = int(raw_input("Enter a number: "))
y = int(input("Enter a number: "))
4
ответ дан Harun ERGUL 19 August 2018 в 04:39
поделиться

В Python 3.x, raw_input был переименован в input, а Python 2.x input удален.

Это означает, что так же, как raw_input, input в Python 3.x всегда возвращает строковый объект.

Чтобы устранить проблему, вам нужно явно вставить эти вводы в целые числа, поместив их в int :

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Кроме того, Python не нужен / не использует точки с запятой для завершения строк. Итак, если они не делают ничего позитивного.

28
ответ дан iCodez 19 August 2018 в 04:39
поделиться

В Python 3.x. По умолчанию функция ввода принимает входные данные в строчном формате. Чтобы преобразовать его в целое число, вам нужно включить int (input ())

x=int(input("Enter the number"))
4
ответ дан Madhusudan chowdary 19 August 2018 в 04:39
поделиться

input() (Python 3) и raw_input() (Python 2) всегда возвращают строки. Преобразуйте результат в целое число с помощью int().

x = int(input("Enter a number: "))
y = int(input("Enter a number: "))

Pro tip: в Python не нужны полуколоны.

13
ответ дан Martijn Pieters 19 August 2018 в 04:39
поделиться
n=int(input())
for i in range(n):
    n=input()
    n=int(n)
    arr1=list(map(int,input().split()))

цикл for должен запускать 'n' количество раз. вторая «n» - длина массива. последний оператор отображает целые числа в список и принимает входные данные в форме, разделенной пробелом. вы также можете вернуть массив в конце цикла for.

0
ответ дан ravi tanwar 19 August 2018 в 04:39
поделиться

Принимая int в качестве входа в python: мы берем простой строковый ввод, используя:

input()

теперь мы хотим int как input.so мы выводим эту строку в int. просто используя:

int(input())
5
ответ дан Rohit-Pandey 19 August 2018 в 04:39
поделиться
def dbz():
    try:
        r = raw_input("Enter number:")
        if r.isdigit():
            i = int(raw_input("Enter divident:"))
            d = int(r)/i
            print "O/p is -:",d
        else:
            print "Not a number"
    except Exception ,e:
        print "Program halted incorrect data entered",type(e)
dbz()

Or 

num = input("Enter Number:")#"input" will accept only numbers
2
ответ дан Sanyal 19 August 2018 в 04:39
поделиться

Хотя в вашем примере int(input(...)) делает трюк в любом случае, python-future 's builtins.input заслуживает внимания, поскольку это гарантирует, что ваш код работает как для Python 2, так и для 3 и отключает поведение Python2 по умолчанию input, пытающееся быть «умным» относительно типа входных данных (builtins.input в основном ведет себя как raw_input).

2
ответ дан Tobias Kienzler 19 August 2018 в 04:39
поделиться

Для нескольких целых чисел в одной строке карта может быть лучше.

arr = map(int, raw_input().split())

Если число уже известно (например, 2 целых числа), вы можете использовать

num1, num2 = map(int, raw_input().split())
18
ответ дан user1341043 19 August 2018 в 04:39
поделиться

Да, в python 3.x, raw_input заменяется на input. Чтобы вернуться к старому поведению input, используйте:

eval(input("Enter a number: "))

Это позволит питону знать, что введенный ввод является целым числом

0
ответ дан Waseem Akhtar 19 August 2018 в 04:39
поделиться
  • 1
    Это верно? – tjt263 8 March 2016 в 14:46
  • 2
    Да, вы можете попробовать – Waseem Akhtar 3 July 2016 в 11:26
  • 3
    Это позволит питону знать, что введенный ввод является целым числом , это может быть намного хуже, чем целое число. – Padraic Cunningham 18 October 2016 в 17:52

Преобразовать в целые числа:

my_number = int(input("enter the number"))

Аналогично для чисел с плавающей запятой:

my_decimalnumber = float(input("enter the number"))
4
ответ дан xlm 19 August 2018 в 04:39
поделиться
1
ответ дан Artjom B. 30 October 2018 в 16:30
поделиться
Другие вопросы по тегам:

Похожие вопросы: