请在python

时间:2019-04-17 11:08:40

标签: 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))

5 个答案:

答案 0 :(得分:1)

%也用于字符串格式化,并且由于split方法属于string,因此它也返回string,因此,解释器尝试对其进行格式化。

更改行:

if i % 2 == 0:

if int(i) % 2 == 0:

您的代码应该起作用。

请注意,您的函数不会打印任何内容,因为even_no函数没有回报

答案 1 :(得分:0)

您忘记了将数字从str转换为intmap可以用于此目的。您也没有返回列表。

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]

答案 2 :(得分:0)

您的about:flags 有点问题,所以我解决了这个问题,您也忘记使用indentation。我已修复所有问题,包括您的return。这是代码:

TypeError

答案 3 :(得分:0)

需要注意的两个问题。 已经提到了第一个,这是将字符串转换为整数的需要。 第二行是以下行: input_no = input(“输入数字序列:”)。 当我测试时,函数“ 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()

答案 4 :(得分:0)

感谢大家的帮助和付出时间。