Python 程序在不应该打印时打印 None
Python program prints None when it isn't supposed to
我编写了一个程序,当我在控制台中按 2 时输出最长的相等数字序列,但出于某种原因它打印出彼此相关的数字(即如果我输入 1 2 2 2 4 5 它输出222 而不是 2 2 2) 并且出于某种原因它还打印 None
我做的断言测试也因为某些原因失败了
输入:按1,输入1 2 2 2 2 4 5 6 1 4
预期输出:按 2,然后应该显示 2 2 2 2 2
实际输出:22222 None
def lista_egale(lst1):
l = 1
prev_one = None
number = 0
lmax = -1
for current in lst1:
if prev_one == current:
l += 1
elif l > lmax:
lmax = l
number = prev_one
l = 1
prev_one = current
print(number * lmax)
def test_egale():
assert lista_egale([1, 2, 2, 2, 4, 5, 6]) == 2 2 2
assert lista_egale([4, 1, 2, 4, 1, 2, 3, 2]) == 1
assert lista_egale([1, 1, 1, 1, 1, 2, 2, 2, 2]) == 1 1 1 1 1
def show_menu():
print("lists")
print("1. Enter the list")
print("2. Check if the list has a max sequence of equal numbers and print it")
print("4. exit")
def ui_read_list():
input_list = input("Numbers go here ")
return input_list.split()
def run():
global lst1
lst1 = []
show_menu()
while True:
cmd = input(">>>")
if cmd == "4":
return
if cmd == "1":
lst1 = ui_read_list()
elif cmd == "2":
print(lista_egale(lst1))
else:
print("invalid command")
def main():
run()
test_egale()
#test_munte()
main()
你运行
print(lista_egale(lst1))
你函数的 return 值
lista_egale(lst1)
是 None
,它被打印出来。可能您想 运行 只是:
lista_egale(lst1)
这对我有用,除了第二个断言(对我来说)根本没有意义。为什么您希望 [1] 被 returned 而不是其他任何东西?无论如何,在那种情况下 returns [4]。
def lista_egale(lst1):
l = 0
prev_one = None
number = 0
lmax = -1
for current in lst1:
if prev_one == current:
l += 1
elif l > lmax:
lmax = l
number = prev_one
l = 1
prev_one = current
return ([number] * lmax)
def test_egale():
assert lista_egale([1, 2, 2, 2, 4, 5, 6]) == [2, 2, 2]
assert lista_egale([4, 1, 2, 4, 1, 2, 3, 2]) == [1]
assert lista_egale([1, 1, 1, 1, 1, 2, 2, 2, 2]) == [1, 1, 1, 1, 1]
def show_menu():
print("lists")
print("1. Enter the list")
print("2. Check if the list has a max sequence of equal numbers and print it")
print("4. exit")
def ui_read_list():
input_list = input("Numbers go here ")
return input_list.split()
def run():
global lst1
lst1 = []
show_menu()
while True:
cmd = input(">>>")
if cmd == "4":
return
if cmd == "1":
lst1 = ui_read_list()
elif cmd == "2":
print(lista_egale(lst1))
else:
print("invalid command")
def main():
run()
test_egale()
#test_munte()
main()
编辑:
你的错误是:
l
被初始化为 1,尽管它应该被初始化为 0(因为如果最长的“连胜”是 1 长,那么什么都不会到达 l>lmax
.
- 在
lista_eagle
函数中你没有 return 任何东西而是打印了结果。
- 您正在打印
number * lmax
,它是一个数字而不是条纹本身,您可以通过将数组本身连接 lmax 次来获得条纹本身(如此处 return [number] * lmax
所示)。
正如其他人所指出的,听起来您期望 lista_egale
到 return 一个值而不是打印它。我认为您还想使用列表的 count
函数来查找每个项目在列表中的次数,如下所示:
def lista_egale(lst1):
lmax = -1
number = 0
for current in lst1:
if lst1.count(current) > lmax:
lmax = lst1.count(current)
number = current
return ' '.join([str(number)] * lmax)
然后为了让你的断言起作用,比较也应该是这样的字符串:
def test_egale():
assert lista_egale([1, 2, 2, 2, 4, 5, 6]) == '2 2 2'
assert lista_egale([4, 1, 2, 4, 1, 2, 3, 2]) == '1'
assert lista_egale([1, 1, 1, 1, 1, 2, 2, 2, 2]) == '1 1 1 1 1'
在 lista_egale()
的打印语句中执行此操作:
print((str(number)+" ")*lmax)
这将打印 2 2 2 而不是 222
我编写了一个程序,当我在控制台中按 2 时输出最长的相等数字序列,但出于某种原因它打印出彼此相关的数字(即如果我输入 1 2 2 2 4 5 它输出222 而不是 2 2 2) 并且出于某种原因它还打印 None
我做的断言测试也因为某些原因失败了
输入:按1,输入1 2 2 2 2 4 5 6 1 4
预期输出:按 2,然后应该显示 2 2 2 2 2
实际输出:22222 None
def lista_egale(lst1):
l = 1
prev_one = None
number = 0
lmax = -1
for current in lst1:
if prev_one == current:
l += 1
elif l > lmax:
lmax = l
number = prev_one
l = 1
prev_one = current
print(number * lmax)
def test_egale():
assert lista_egale([1, 2, 2, 2, 4, 5, 6]) == 2 2 2
assert lista_egale([4, 1, 2, 4, 1, 2, 3, 2]) == 1
assert lista_egale([1, 1, 1, 1, 1, 2, 2, 2, 2]) == 1 1 1 1 1
def show_menu():
print("lists")
print("1. Enter the list")
print("2. Check if the list has a max sequence of equal numbers and print it")
print("4. exit")
def ui_read_list():
input_list = input("Numbers go here ")
return input_list.split()
def run():
global lst1
lst1 = []
show_menu()
while True:
cmd = input(">>>")
if cmd == "4":
return
if cmd == "1":
lst1 = ui_read_list()
elif cmd == "2":
print(lista_egale(lst1))
else:
print("invalid command")
def main():
run()
test_egale()
#test_munte()
main()
你运行
print(lista_egale(lst1))
你函数的 return 值
lista_egale(lst1)
是 None
,它被打印出来。可能您想 运行 只是:
lista_egale(lst1)
这对我有用,除了第二个断言(对我来说)根本没有意义。为什么您希望 [1] 被 returned 而不是其他任何东西?无论如何,在那种情况下 returns [4]。
def lista_egale(lst1):
l = 0
prev_one = None
number = 0
lmax = -1
for current in lst1:
if prev_one == current:
l += 1
elif l > lmax:
lmax = l
number = prev_one
l = 1
prev_one = current
return ([number] * lmax)
def test_egale():
assert lista_egale([1, 2, 2, 2, 4, 5, 6]) == [2, 2, 2]
assert lista_egale([4, 1, 2, 4, 1, 2, 3, 2]) == [1]
assert lista_egale([1, 1, 1, 1, 1, 2, 2, 2, 2]) == [1, 1, 1, 1, 1]
def show_menu():
print("lists")
print("1. Enter the list")
print("2. Check if the list has a max sequence of equal numbers and print it")
print("4. exit")
def ui_read_list():
input_list = input("Numbers go here ")
return input_list.split()
def run():
global lst1
lst1 = []
show_menu()
while True:
cmd = input(">>>")
if cmd == "4":
return
if cmd == "1":
lst1 = ui_read_list()
elif cmd == "2":
print(lista_egale(lst1))
else:
print("invalid command")
def main():
run()
test_egale()
#test_munte()
main()
编辑:
你的错误是:
l
被初始化为 1,尽管它应该被初始化为 0(因为如果最长的“连胜”是 1 长,那么什么都不会到达l>lmax
.- 在
lista_eagle
函数中你没有 return 任何东西而是打印了结果。 - 您正在打印
number * lmax
,它是一个数字而不是条纹本身,您可以通过将数组本身连接 lmax 次来获得条纹本身(如此处return [number] * lmax
所示)。
正如其他人所指出的,听起来您期望 lista_egale
到 return 一个值而不是打印它。我认为您还想使用列表的 count
函数来查找每个项目在列表中的次数,如下所示:
def lista_egale(lst1):
lmax = -1
number = 0
for current in lst1:
if lst1.count(current) > lmax:
lmax = lst1.count(current)
number = current
return ' '.join([str(number)] * lmax)
然后为了让你的断言起作用,比较也应该是这样的字符串:
def test_egale():
assert lista_egale([1, 2, 2, 2, 4, 5, 6]) == '2 2 2'
assert lista_egale([4, 1, 2, 4, 1, 2, 3, 2]) == '1'
assert lista_egale([1, 1, 1, 1, 1, 2, 2, 2, 2]) == '1 1 1 1 1'
在 lista_egale()
的打印语句中执行此操作:
print((str(number)+" ")*lmax)
这将打印 2 2 2 而不是 222