我正在尝试创建一个程序,它将创建10个随机数并测试它们是偶数还是奇数。 我有一个名为rand_list的列表,由
创建rand_list = []
for int in range(10):
rand_list.append(random.randint(1,1000))
intermediary = rand_list.append(random.randint(1,1000))
remainder2 = intermediary % 2 #this statement produces an error
print("the \i number is even \n", rand_list[int])
else:
print("the \i number is odd \n", rand_list[int])
我不明白为什么如果余数== 0:不起作用。它给了我{TypeError:不支持的操作数类型%:' NoneType'和' int'}我在比较两种不同类型的物体吗?
答案 0 :(得分:3)
remainder2 = intermediary %2
产生错误,因为list.append()
返回None,因为错误状态。您还每次向列表中添加2个随机整数。您可能想要的是intermediary = rand_list[-1]
,它将返回列表中的最后一个元素。
此外,请在您的问题中提供工作/格式良好的代码。缩进有点令人困惑,你也错过了一行代码。
答案 1 :(得分:1)
append()
函数不返回任何内容。它修改了列表。你想要做的就是这样的事情
rand_list.append(random.randint(1,1000))
intermediary = rand_list[-1]
remander2= intermediary % 2
或者更干净:
intermediary = random.randint(1,1000)
rand_list.append(intermediary)
remainder2 = intermdiary % 2
答案 2 :(得分:1)
如果使用if语句,则使用
if number%2 == 0
# is even
else
# is odd
您正在接收TyperError,因为您正在为一个名副其实的方法调用 - 这根本不做任何事情(因此您的错误消息中为NoneType)。然后尝试对此NoneType执行操作,就像它是Int一样。这不行。
答案 3 :(得分:0)
您的代码中几乎没有错误。
1)list.append()
modyfies列表到位,在最后添加新元素。
它不返回任何内容,或者更准确地说,它返回None
。
因此,您intermediary == None
并且您无法使用%
运算符
与None
...
您可以将随机数分配给变量:
x = random.randint(1,1000)
rand_list.append(x) # append it to your list
remainder = x % 2 # take remainder using
因为你只关心它是否为零,你可以稍后使用事实,
零在布尔上下文中等于False
,以及所有其他数字
被视为True
所以你可以写一下:
is_odd = x % 2
或更具可读性:
is_odd = bool(x % 2)
2)另一个问题是,您错过了代码中的if
。
实际上,您甚至没有使用remainder2
变量!
正确的代码是:
if (remainder2 == 0):
print("the \i number is even \n", rand_list[int])
else:
print("the \i number is odd \n", rand_list[int])
或使用我上面的建议:
if is_odd:
print("the \i number is odd \n", x)
else:
print("the \i number is even \n", x)
3)最后一点是,正如@Padraic Cunningham指出的那样,
你不应该使用int
作为变量名。它不会产生错误,
当您影子类型为int
且内置int()
时。
总而言之,您的代码可能如下所示:
rand_list = []
for i in range(10):
x = random.randint(1,1000)
if (x % 2):
print(i, '-', x, "- the number is odd.")
else:
print(i, '-', x, "- the number is even.")