为什么我的代码在IDLE中工作,但在我保存文件并双击文件时却没有

时间:2014-03-05 20:08:13

标签: python cmd python-idle

当我在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")

3 个答案:

答案 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编码。