我通过Visual Studio Code运行此代码:
counter = 0
while True:
max_count = input('enter an int: ')
if max_count.isdigit():
break
print('sorry, try again')
max_count = int(max_count)
while counter < max_count:
print(counter)
counter = counter + 1
看到这样的反应非常惊讶:
python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"
malikarumi@Tetuoan2:~$ python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"
enter an int: 5
Traceback (most recent call last):
File "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py", line 7, in <module>
if max_count.isdigit():
AttributeError: 'int' object has no attribute 'isdigit'
因为input()总是应该返回一个字符串: https://docs.python.org/3.5/library/functions.html#input
我输入了一个引用的字符串:
malikarumi@Tetuoan2:~$ python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"
enter an int: '5'
0
1
2
3
4
现在它按预期工作。然后我在我的标准问题Ubuntu终端上运行它:
malikarumi@Tetuoan2:~/Documents/PYTHON/Blaikie Python$ python3 flatnested.py
enter an int: 5
0
1
2
3
4
它按预期工作,注意5周围没有引号。
这里发生了什么? Visual Studio Code&#39;重写了#39; Python的规则?
答案 0 :(得分:1)
简答
当您通过Visual Studio Code运行代码时,似乎正在使用Python 2.7来运行代码。
如果您希望继续使用Python 2.7,请使用raw_input
代替input
功能。
<强>解释强>
查看Python 2.7 documentation的输入函数。它与Python 3.x中使用的输入函数不同。在Python 2.7中,输入函数使用eval
函数来处理程序接收的输入,就好像输入是一行Python代码一样。
python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"
malikarumi@Tetuoan2:~$ python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"
enter an int: 5
Traceback (most recent call last):
File "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py", line 7, in <module>
if max_count.isdigit():
AttributeError: 'int' object has no attribute 'isdigit'
上述案例中使用Python 2.7发生的事情是:
eval("5").isdigit() # 5.isdigit()
上面的Python语句无效,因为它导致尝试在整数上调用.isdigit()
方法。但是,Python中的整数没有这种方法。
malikarumi@Tetuoan2:~$ python "/home/malikarumi/Documents/PYTHON/Blaikie Python/flatnested.py"
enter an int: '5'
0
1
2
3
4
在上面的例子中,使用Python 2.7,发生了什么:
eval("'5'").isdigit() # '5'.isdigit()
上面的语句是有效的,因为它导致一个字符串调用.isdigit()
方法,该方法确实存在于字符串中。
我希望这能回答您的问题并让您更清楚地了解Python 2.7和Python 3.x中input
函数之间的差异。
答案 1 :(得分:0)
如果您正在使用Ubuntu(或其他LINUX发行版),在终端中输入python
时,它与python2
相等,因此您第一次使用python
时,你使用Python 2而不是Python 3,这个错误是显而易见的。
为什么你把引号字符串放在原因,因为在Python 2中,input()
等于eval(raw_input())
>>> input()
5
5
# equal with eval(5), which is 5
带引号字符串
>>> input()
'5'
'5'
# equal with eval('5'), which is '5'
第二次,由于您明确使用python3