Я хочу получить сумму чисел в списке, но theres TypeError: неподдерживаемый тип операндов для +: 'int' и 'str' [duplicate]

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

Если вы сами настраиваете базу данных MySql (на выделенном или виртуальном плане сервера), вы должны иметь возможность настроить ее для приема удаленных хостов. В этом случае вам нужно изменить свой файл my.con, чтобы разрешить удаленные хосты (вы также можете сделать это с помощью инструментов MySql Admin), и вам необходимо предоставить логин, который вы пытаетесь использовать для доступа с удаленного IP:

http://www.cyberciti.biz/tips/how-do-i-enable-remote-access-to-mysql-database-server.html

Ваш предыдущий комментарий о SQLyog - очень хорошая идея. И я могу поручиться за этот продукт. Это отличный инструмент. Бесплатные админ-инструменты из MySql (Workbench - http://www.mysql.com/downloads/workbench/ ) также достойны и позволят вам также проверять удаленный доступ.

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 не ожидает ; в конце строки:)

210
ответ дан Community 16 August 2018 в 03:00
поделиться
  • 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 16 August 2018 в 03:00
поделиться
  • 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 16 August 2018 в 03:00
поделиться

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

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

. В 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 16 August 2018 в 03:00
поделиться

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 16 August 2018 в 03:00
поделиться

В 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 16 August 2018 в 03:00
поделиться

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

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

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 16 August 2018 в 03:00
поделиться
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 16 August 2018 в 03:00
поделиться

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

input()

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

int(input())
5
ответ дан Rohit-Pandey 16 August 2018 в 03:00
поделиться
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 16 August 2018 в 03:00
поделиться

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

2
ответ дан Tobias Kienzler 16 August 2018 в 03:00
поделиться

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

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

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

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

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

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

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

0
ответ дан Waseem Akhtar 16 August 2018 в 03:00
поделиться
  • 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 16 August 2018 в 03:00
поделиться
1
ответ дан Artjom B. 29 October 2018 в 08:50
поделиться
Другие вопросы по тегам:

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