Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
请建议在python中使用typeerror_Python - Fatal编程技术网

请建议在python中使用typeerror

请建议在python中使用typeerror,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("Ent

我的问题是“编写函数用户打印列表中的偶数”。我们必须要求用户输入列表。我遇到“类型错误:在字符串格式化过程中未转换所有参数”。如果我错了,请提供帮助

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))

您忘了将数字从
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]

%
也用于字符串格式化,并且由于
拆分
方法属于
字符串
,它还返回一个
字符串
,因此解释器尝试格式化它

更改行:

if i % 2 == 0:

您的代码应该可以工作


作为旁注,您的函数不会打印任何内容,因为
函数甚至没有返回值您的
缩进值有点小,所以我修复了它,您也忘记了使用
返回值
。我修复了所有这些,包括
类型错误
。代码如下:

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))

需要注意的几个问题。 前面已经提到了第一个问题,即需要将字符串转换为整数。 第二个是用下面的一行: 输入\否=输入(“输入数字顺序:”)。 当我测试时,函数“even_no”不会在上面的行作为全局变量出现的情况下执行。 为了克服这个问题,我在下面的代码中使用了tkinter和一个类。 请注意:这允许用户在输入字段中输入一个或多个数字。每个数字应以空格分隔。只能使用数字。 如果输入了偶数,它们将被打印到python shell中的列表中。如果没有输入偶数,则将打印空列表。如果输入了非数字字符,则会处理值错误,以指导用户使用正确的输入方法

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()

虽然我同意返回部分,但我在OP的代码上没有看到任何缩进错误。这是真的,没有缩进问题,但是缩进中的间距有点偏,所以我修复了它。也许我应该更好地澄清它。我将编辑它。
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()