Помогите мне заставить мой код Python 2 работать в Python 3 - PullRequest
1 голос
/ 03 августа 2011
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.Благодаря.

Ответы [ 4 ]

4 голосов
/ 03 августа 2011

Я вставил ваш код в файл, сохранил его, затем открыл его в оболочке 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
1 голос
/ 03 августа 2011

Действительно, @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
1 голос
/ 03 августа 2011

Проблемы не имеют ничего общего с вашей версией Python. В вашем коде странные символы.

Я вставил его в Metapad , и появилась группа ?, я предполагаю, что это означает непечатный символ.

Просто введите его заново, и он будет работать нормально, или найдите текстовый редактор, который покажет эти символы и удалит их, или используйте Python для удаления любых непечатаемых символов.

0 голосов
/ 03 августа 2011

Используйте 2to3 на вашей установке Python. Стандартно (думаю) с 2.7.2 +

...