Пожалуйста, предложите использовать typeerror в python

#python

#python

Вопрос:

У меня возник вопрос, в котором говорится: «Напишите функцию, которая печатает четное число из списка). Мы должны попросить пользователя ввести список. Я получаю сообщение «Ошибка типа: не все аргументы преобразованы при форматировании строки». Пожалуйста, помогите, я ошибаюсь.

 def even_no(x):
        a = x.split()
        new_list = []
        for i in a:
                if i % 2 == 0:
                        new_list.append(i)
input_no = input("Enter number sequence: ")
print(even_no(input_no))
 

Ответ №1:

% также используется для форматирования строк, и поскольку split метод принадлежит string , он также возвращает a string , следовательно, интерпретатор пытается его отформатировать.

измените строку:

 if i % 2 == 0:
 

Для

 if int(i) % 2 == 0:
 

что ваш код должен работать.

В качестве примечания, ваша функция ничего не напечатает, потому что для функции нет возврата even_no

Ответ №2:

Вы забыли преобразовать числа из str в int . map может быть использован для этого. Также вы не вернули свой список.

 def even_no(x):
    a = map(int, x.split())
    new_list = []
    for i in a:
        if i % 2 == 0:
            new_list.append(i)
    return new_list

input_no = input("Enter number sequence: ")
print(even_no(input_no))
 

Пример выполнения:

 Enter number sequence: 10 20 30
[10, 20, 30]
 

Ответ №3:

Следует отметить пару проблем. Первый из них уже упоминался, а именно необходимость преобразования строк в целые числа. Второй — со следующей строкой: input_no = input(«Введите числовую последовательность: «) . Когда я тестировал, функция «even_no» не выполнялась с приведенной выше строкой, присутствующей в качестве глобальной переменной. Чтобы преодолеть эту проблему, я использовал tkinter и класс в следующем коде. Пожалуйста, обратите внимание: это позволяет пользователю вводить число или числа в поле ввода. Каждое число должно быть разделено пробелом. Следует использовать только числа. Если будут введены какие-либо четные числа, они будут напечатаны в виде списка в оболочке python. Если четные числа не введены, будет напечатан пустой список. Если вводятся нечисловые символы, ошибка значения обрабатывается, чтобы указать пользователю правильный метод ввода.

 import tkinter as tk
from tkinter import Tk, messagebox
import tkinter.filedialog
from tkinter import Tk, Label, Button
from tkinter import *


class Control(tk.Tk):
    def __init__(self, *args, **kwargs):
        tk.Tk.__init__(self, *args, **kwargs)

        self.controller = self



        self.shared_data = {
            "input_no": tk.StringVar(),
        }

        self.title('Even')

        self.entry = Entry(self, textvariable=self.shared_data["input_no"])
        self.entry.pack()

        self.enterbutton = tk.Button(self, text='Enter',
                                    command=(self.even_no)
                                     )

        self.enterbutton.pack()

    def even_no(self):
        try:
            user_input = self.shared_data["input_no"].get()
            a = user_input.split()
            new_list = []
            for i in a:
                if int(i) % 2 == 0:
                    new_list.append(int(i))
            print(new_list)
        except ValueError:
            print('Invalid Entry. Please enter numbers only. n'
                  'Please make sure that each number is separated by a space.')


Control1 = Control()

Control1.mainloop()
 

Ответ №4:

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

 def even_no(x):
    a = x.split()
    new_list = []
    for i in a:
        if int(i) % 2 == 0:
            new_list.append(i)
    return new_list
input_no = input("Enter number sequence: ")
print(even_no(input_no))
 

Комментарии:

1. Хотя я согласен с возвращаемой частью, я не вижу никакой ошибки отступа в коде OP

2. Это правда, что проблем с отступом не было, однако интервал в отступе был немного смещен, поэтому я это исправил. Может быть, мне лучше уточнить это. Я буду редактировать его.