2011-08-03 42 views
1
import math,sys,time;i=0 
while 1: sys.stdout.write("\r"+':(_​_)'[:3+int(round(math.sin(​i)))]+'n'+':(__)'[3+int(ro​und(math.sin(i))):]);sys.s​tdout.flush();time.sleep(.​15);i+=0.5*math.pi 

我在Python 2很久以前寫了簡單的程序,它工作得很好,但它在Python 3語法錯誤,我將不勝感激,如果有人能夠幫助我將它更新爲符合Python 3。謝謝。幫我做我的Python 2代碼工作在Python 3

+2

這是代碼高爾夫挑戰? – RoundTower

+0

@RoundTower是啊 –

+0

我認爲你只是有編碼問題(非ASCII字符) – wim

回答

4

我粘貼你的代碼在一個文件中,保存它,然後在Python的外殼打開一看:

In [10]: f=open('test2.py') 

In [11]: content=f.read() 

In [12]: content 
Out[12]: '#!/usr/bin/env python\n# coding: utf-8\n\nimport math,sys,time;i=0\nwhile 1: sys.stdout.write("\\r"+\':(_\xe2\x80\x8b_)\'[:3+int(round(math.sin(\xe2\x80\x8bi)))]+\'n\'+\':(__)\'[3+int(ro\xe2\x80\x8bund(math.sin(i))):]);sys.s\xe2\x80\x8btdout.flush();time.sleep(.\xe2\x80\x8b15);i+=0.5*math.pi\n' 

通知的'\xe2\x80\x8b'字節在這裏和那裏灑。這些都是ZERO WIDTH SPACE字符UTF-8編碼:

In [24]: print(repr(u'\N{ZERO WIDTH SPACE}'.encode('utf-8'))) 
'\xe2\x80\x8b' 

這就是爲什麼你的代碼引起SyntaxErrors。

只需重新鍵入(或複製下面的代碼),它會在Python3運行:

import math, sys, time; i=0 
while 1: sys.stdout.write('\r'+':(__)'[:3+int(round(math.sin(i)))]+'n'+':(__)'[3+int(round(math.sin(i))):]); sys.stdout.flush(); time.sleep(0.15); i+=0.5*math.pi 
+0

您贏得互聯網。謝謝你,先生。 –

0

在你的python安裝中使用2to3。它標準(我認爲)與2.7.2 +

+0

我現在在Python 3.1上的winblows,我無法找到它。你知道特定的目錄嗎? –

+0

@agf:不,絕對不是。 –

+0

@Joe Mas:它安裝在你的Python安裝下的Tools \ Scripts下。在Unix上,它也作爲一個單獨的命令安裝,所以你只需運行2to3,但在Windows下,我認爲你必須運行python3 C:\ WhereEverYourPythonIs \ Tools \ Scripts \ 2to3.py,但在更高版本中可能已經更改。 –

1

這些問題與你的Python版本無關。你的代碼中有怪異的字符。

我把它貼在Metapad和一堆?出現了,我認爲意思是不可打印的字符。

只需重新鍵入它,它將正常工作,或找到一個文本編輯器來顯示這些字符並刪除它們,或使用Python刪除任何不可打印的字符。

1

事實上,@agf是正確的。在第一個(__)的下劃線之間有一個奇怪的字符。更正(並與Python 3工作正常):

import math,sys,time;i=0 
while 1: sys.stdout.write("\r"+':(__)'[:3+int(round(math.sin(i)))]+'n'+':(__)'[3+int(round(math.sin(i))):]);sys.stdout.flush();time.sleep(.15);i+=0.5*math.pi 
相關問題