Python 2.7和Python 3中的范围差异

Python 2.7和Python 3中的范围差异,python,python-2.7,python-3.x,Python,Python 2.7,Python 3.x,我在Python2和Python3上运行了以下代码 i = int(input()) for j in range(i): k = int(input()) print(k*k)%(1000000000+7) 输入来自包含以下内容的文件 2 2 1 Python2版本运行良好,但Python3给出了此错误 4 Traceback (most recent call last): File "solution.py", line 4, in <module>

我在Python2和Python3上运行了以下代码

i = int(input())
for j in range(i):
    k = int(input())
    print(k*k)%(1000000000+7)
输入来自包含以下内容的文件

2
2
1
Python2版本运行良好,但Python3给出了此错误

4
Traceback (most recent call last):
  File "solution.py", line 4, in <module>
    print(k*k)%(1000000000+7)
TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'
4
回溯(最近一次呼叫最后一次):
文件“solution.py”,第4行,在
打印(k*k)%(100000000+7)
TypeError:不支持%的操作数类型:'NoneType'和'int'

为什么在Python 3中会出现此错误?在Python 2中如何更正此错误?解析如下:

n = (k*k)%(1000000000+7)
print n
n = print(k*k)
n%(1000000000+7)  # TypeError
print((k*k)%(1000000000+7))
在Python 3中,解析方式不同,如下所示:

n = (k*k)%(1000000000+7)
print n
n = print(k*k)
n%(1000000000+7)  # TypeError
print((k*k)%(1000000000+7))
这是由于将
print
从语句更改为函数所致。打印函数的返回代码为
None
,不能与余数运算符
%
一起使用


还要注意Python2上的
input
和Python3

之间的区别,Python2的解析如下:

i = int(input())
for j in range(i):
    k = int(input())
    print(k*k)%(1000000000+7)
n = (k*k)%(1000000000+7)
print n
n = print(k*k)
n%(1000000000+7)  # TypeError
print((k*k)%(1000000000+7))
在Python 3中,解析方式不同,如下所示:

n = (k*k)%(1000000000+7)
print n
n = print(k*k)
n%(1000000000+7)  # TypeError
print((k*k)%(1000000000+7))
这是由于将
print
从语句更改为函数所致。打印函数的返回代码为
None
,不能与余数运算符
%
一起使用


还要注意Python2和Python3上的
input
之间的差异这与
范围无关。您只是尝试在
None
上使用模运算,这就是print函数返回的结果。只需按如下方式重新排列这些论题:

i = int(input())
for j in range(i):
    k = int(input())
    print(k*k)%(1000000000+7)
n = (k*k)%(1000000000+7)
print n
n = print(k*k)
n%(1000000000+7)  # TypeError
print((k*k)%(1000000000+7))

希望这有帮助

它与
范围
无关。您只是尝试在
None
上使用模运算,这就是print函数返回的结果。只需按如下方式重新排列这些论题:

n = (k*k)%(1000000000+7)
print n
n = print(k*k)
n%(1000000000+7)  # TypeError
print((k*k)%(1000000000+7))

希望这有帮助

在Python 3中,
print
是一个函数,因此
k*k
print()
的一个参数,然后打印的结果(None)被赋予
%
操作符。要解决这个问题,只需在整件事的周围加上括号(当然不包括实际的
print
word)。如果你想打印
(k*k)%(100000000+7)
的结果,你必须将整件事用括号括起来:
print((k*k)%(100000000+7))
。顺便说一句:这在python和python3中产生相同的结果。(当您开始使用逗号或关键字参数时,输出会发生变化…)在Python 3中,
print
是一个函数,因此
k*k
print()
的一个参数,然后打印的结果(无)被赋予
%
操作符。要解决这个问题,只需在整件事的周围加上括号(当然不包括实际的
print
word)。如果你想打印
(k*k)%(100000000+7)
的结果,你必须将整件事用括号括起来:
print((k*k)%(100000000+7))
。顺便说一句:这在python和python3中产生相同的结果。(开始使用逗号或关键字参数时,输出会发生变化…)