我遇到一个问题,上面写着“写一个函数,用户从列表中打印偶数)。我们必须要求用户输入一个列表。我收到一个“类型错误:在字符串格式化期间并非所有参数都转换了”。帮助是我错了。
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))
答案 0 :(得分:1)
%
也用于字符串格式化,并且由于split
方法属于string
,因此它也返回string
,因此,解释器尝试对其进行格式化。
更改行:
if i % 2 == 0:
到
if int(i) % 2 == 0:
您的代码应该起作用。
请注意,您的函数不会打印任何内容,因为even_no
函数没有回报
答案 1 :(得分:0)
您忘记了将数字从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]
答案 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)
感谢大家的帮助和付出时间。