سلام. در محیط vim زمان اجرا کردن کد با ارور invalid syntax برای تابع print برخورد کردم که متاسفانه نتونستم رفعش کنم. ممنوم اگه بتونید کمک کنید. از پایتون ورژن ۳.۵ استفاده میکنم. لازمه ذکر کنم که این خطا فقط در vim اتفاق میفته و در ادیتور خود پایتون بدون خطا اجرا میشه. ارور هم مربوط به لاین ۳۴ هست.
ویم من هم از python3 پشتیبانی میکنه که عکسش رو گذاشتم.
این کد پایتون هستش:#!/usr/bin/pyhton3.5
print("\n"*20)
class inclusive_range:
def __init__(self, *args):
numargs = len(args)
if numargs < 1:
raise TypeError("requiers at leas one argument")
elif numargs == 1:
self.stop = args[0]
self.start = 0
self.step = 1
elif numargs == 2:
(self.start, self.stop) = args
self.step = 1
elif numargs == 3:
(self.start, self.stop, self.step) = args
pass
else:
raise TypeError("expected at most 3 argument,\
got {}".format(numargs))
def __iter__(self):
i = self.start
while i <= self.stop:
yield i
i += self.step
def main():
o = inclusive_range(5, 25, 1)
for i in o:
print(i, end=' ')
print("\n")
if __name__ == "__main__":
main()
۱-در خط ۳۴ بهجای چهارتا فاصله (space) سهتاست.
۲-در Vim باید انتخابهای tabstop,shiftwidth,softtabstop و expandtab رو تنظیم کنید.
۳-اولین خطی که برای ترجیح مفسر (در زمان اجرا کردن برنامه) استفاده کردید بهطورکلی نابجاست و میباید دستور env رو بنویسید.
۴-برای کاری به این سادگی نیازی به شیءگرایی نیست و تابعها بهصرفهترند.
کد پیشنهادیِ من برای اینکار:
#!/usr/bin/env python3
def inclusive_range(x, y, z=1):
return range(x, y + 1, z)
if __name__ == '__main__':
print(' '.join([str(i) for i in inclusive_range(5, 25, 1)]))
سلام. سپاس بابت توجه شما :)
احتمالا زمانی که کدها رو اینجا گذاشتم این اتفاق رخ داده وگرنه داخل اسکریپت من تمام فاصلهها درسته، همچنین میدونیم که پیغام خطای مربوط به ایندینت و پیغام خطای مربوط به سینتکس کاملا متفاوته و هر کودوم برای مورد خودش رخ میده. مثلا خطای مربوط به فاصله یا تو رفتگی یا ایندنت به شکل زیر هست:
IndentationError: expected an indented block
در حالی که خطایی که برای من اتفاق میفته مربوط هستش به سینتکس پرینت همانطور که توی شرح موضوع توضیح دادم!
-------------------------------------------------------------------------------------------------------------
softtabstopو ... در vimrc تنظیم کردم. ولی باز هم مواردی رو که شما گفتید حتما چک میکنم :)
نابجایی مربوط به شبنگ لاین رو متوجه نشدم! چون خیلی وقته دارم با همچین شبنگی کار میکنم و مشکلی نداشته. اگه اشتباه نکنم زمانی از شبنگی که شما فرمودید استفاده میشه که اطلاعاتی از مسیر نصب پایتون وجود نداشته برا همین آدرس env میدیم که به اولین پایتون دیفالتی که برخورد کرد اجرا بشه. اتفاقا من همین شبنگ رو هم مطابق چیزی که شما گفتید قبلا قرار داده بودم ولی باز هم ایراد گرفته بود!
این هم لینک مربوط به شبنگ که توسط سایت خود پایتون توضیح داده شده:
https://docs.python.org/3/using/windows.html#shebang-lines
من فقط تمرین شی گرایی رو داشتم با پایتون انجام میدادم و مقصودم نوشتن همچین کدی با استفاده از شی گرایی نبود! آخه من یکم مبتدی هستم. یکم که چه عرض کنم بیشتر از یکم :D
به هر حال بابت وقتی که گذاشتید و راهنمایی که کردید بسیار سپاسگزارم. منتظر راهنماییهای بیشتر شما هستم.