当我在IDLE中运行我的代码时,我的代码工作正常,但是当我在CMD中正常打开它时,它会显示错误消息并立即关闭,让我没有时间阅读错误消息。然而,我确实设法屏蔽了错误消息,并说:
“文件”文件位置...“第12行,编码 return codecs.charmap_encode(input,errors,encoding_map) UnicodeEncodeError:'charmap'编解码器无法编码位置102中的字符'\ u03c0':字符映射到“
我不确定这意味着什么,以及如何解决它,奇怪的是它在IDLE中工作但不是CMD。 CMD和IDLE都在同一个版本的python上,我的计算机上只安装了1个版本的python,所以问题不在于版本不匹配。你知道为什么它工作,然后不工作,如何解决它?我正在使用python 3.3.3。这是我的代码(用于计算Pi近似使用无限系列,其中用户输入他们想要使用的系列的多少项):
import math
go="Y"
while go=="Y" or go=="y" or go=="Yes" or go=="yes":
count=input("The infinite series 1/1 - 1/3 + 1/5 - 1/7... converges to π/4, how many of these divisions would you like the computer to do?\n")
if count.isdigit():
count = int(count)
pi=0
realcount = 0
while realcount <= count:
realcount = realcount + 1
if realcount / 2 == math.floor(realcount / 2):
pi = pi - (1 / ((2 * realcount) - 1))
else:
pi = pi + (1 / ((2 * realcount) - 1))
print("π ≈",4 * (pi))
go=input("Would you like to try again?\n")
else:
go=input("Sorry you must input a positive integer, would you like to try again?\n")
答案 0 :(得分:2)
在代码中添加一行以进行设置编码:
# -*- coding: utf-8 -*-
import math
go="Y"
while go=="Y" or go=="y" or go=="Yes" or go=="yes":
count=input("The infinite series 1/1 - 1/3 + 1/5 - 1/7... converges to π/4, how many of these divisions would you like the computer to do?\n")
if count.isdigit():
count = int(count)
pi=0
realcount = 0
while realcount <= count:
realcount = realcount + 1
if realcount / 2 == math.floor(realcount / 2):
pi = pi - (1 / ((2 * realcount) - 1))
else:
pi = pi + (1 / ((2 * realcount) - 1))
print("π ≈",4 * (pi))
go=input("Would you like to try again?\n")
else:
go=input("Sorry you must input a positive integer, would you like to try again?\n")
答案 1 :(得分:1)
IDLE与命令文件之间的区别在于源代码的编码。
如果没有另外指定,Python 3将源代码读取为UTF-8编码。官方文档有information on encodings,您可以在其中查看如何使用不同的编码。正确的编码取决于系统的区域设置。或者更好,您可以简单地将源保存为UTF-8。该过程取决于您的文本编辑器。
答案 2 :(得分:1)
它是关于你的代码中的字符π(unicode'\ u03c0'),python解释器的默认编码是ASCII,这意味着你不能在不告诉系统的情况下在源代码中使用非ascii字符。
您可以1)使用pi而不是π,或2)在代码的头部添加一行:#coding=utf-8
告诉解释器您在源代码中使用utf-8编码。