├── LICENSE ├── README.md ├── TO-DO.md ├── examples ├── fibonacci-series │ └── fibonacci.py └── guess-number-game │ ├── README.md │ ├── first_person.py │ └── second_person.py ├── exercises └── README.md └── others └── README.md /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Arash Nemat Zadeh 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # دوره آموزش برنامه نویسی پایتون 2 |

3 | 4 |

5 | 6 | ## 0. مقدمه و آشنایی (ویدیو در یوتیوب: https://youtu.be/Rd7v9dURO6Q) 7 | ### توصیه های من به شما 8 | 1. ***تا میتونید زبان انگلیسیتون رو قوی کنید***، به نظرم مهم ترین مهارتیه که میتونید یاد بگیرید و شما رو توی زندگیتون بیشتر از هر چیزی جلو میندازه. وقتی زبانتون خوب باشه دیگه توی هر حوزه ای (برنامه نویسی، مهندسی، پزشکی، موسیقی، ...) میتونید تبدیل به یه متخصص بشید چون به بیشمار آموزش رایگان انگلیسی که توی اینترنت وجود داره دسترسی دارید که تعدادشون خیلی خیلی بیشتر و کیفیتشون بالاتر از آموزش های فارسیه. 9 | 2. لازم نیست خودتون رو هلاک کنید، ***روزی 5 دقیقه وقت بذارید ولی مداوم و هر روز وقت بذارید.*** ما تو دنیایی زندگی میکنیم که بیشتر آدم ها ماه ها و سال های طولانی از زندگیشون رو بدون این که هیچ چیز جدیدی یاد بگیرند سپری میکنند. تو همچین شرایطی کافیه هر روز اندازه 5 دقیقه یه چیز به درد بخور یاد بگیرید تا در دراز مدت تبدیل به یه آدم حرفه ای تو حوزه کاریتون بشید. 10 | ### ویدیو های جالب مرتبط با پایتون در یوتیوب 11 | | لینک ویدیو | توضیحات | 12 | | --- | --- | 13 | | https://www.youtube.com/watch?v=qQXXI5QFUfw | پر کاربرد ترین زبان های برنامه نویسی از 1965 تا 2022 | 14 | | https://www.youtube.com/watch?v=3PcIJKd1PKU | مقایسه تعداد خطوط، مدت زمان ساخت و مدت زمان اجرای یک کار یکسان با 3 زبان برنامه نویسی مختلف | 15 | | https://www.youtube.com/watch?v=_-KjEgCLQFw | نمونه بازی مار ساخته شده در 60 خط طی 5 دقیقه با پایتون | 16 | | https://www.youtube.com/watch?v=7kGNs5R-AM8 | نمونه بازی تتریس یا همون خونه سازی در 180 خط طی 9 دقیقه با پایتون 17 | ### مزایای پایتون 18 | - سادگی و توانایی نوشتن برنامه هایی با تعداد خطوط کم تر در زمان کوتاه تر 19 | - نزدیکی به زبان انسان و سطح بالا بودن (برای مثال مدیریت حافظه به صورت خودکار انجام میشه و دیگه نیازی نیست ما کاری کنیم) 20 | - توانایی ساخت برنامه برای پلتفرم های مختلف (ویندوز، مک، لینوکس، اندروید، ...) 21 | - کتاب خانه ها و ماژول های متعدد 22 | ### کاربرد ها و کتاب خانه ها 23 | - Natural Language Processing (پردازش زبان طبیعی) 24 | - Computer Vision (پردازش تصویر) 25 | - GUI (رابط کاربری گرافیکی) 26 | - Game (ساخت بازی) 27 | - Web (وب) 28 | - Data Science (علوم داده) 29 | - Math (ریاضی) 30 | - Machine Learning (یادگیری ماشین) 31 | ## 1. نصب نرم افزار و نحوه اجرای کد ها (ویدیو در یوتیوب: https://youtu.be/zo6jQ5ZAZW8) 32 | ### نصب خود پایتون روی سیستم 33 | اگر بخواهید توی سیستم با استفاده از نرم افزار هایی مثل vscode یا pycharm کد نویسی کنید نیازه که اول از همه خود پایتون نصب باشه. اگر ویندوز 10 یا 11 داشته باشید نسبت به ویندوز های قدیمی خیلی راحت تر خواهید بود. برای دانلودش میتونید به آدرس زیر مراجعه کنید. حواستون به این نکته هم باشه که موقع نصب هر کدوم از نرم افزار ها اگر گزینه (add python to path) وجود داشت تیکش رو بزنید. \ 34 | https://www.python.org/downloads 35 | ### محیط های توسعه یا همون IDE ها 36 | این محیط ها کدنویسی رو برای ما راحت تر میکنند. مثلا خط ها رو رنگ بندی میکنند یا اشکالات تایپی رو متوجه میشند. در نهایت فرق اساسی و مهمی ندارند و با هر کدوم که راحت تر هستید میتونید کار کنید. 37 | | نام برنامه | لینک دانلود | توضیحات | 38 | | --- | --- | --- | 39 | | vscode | https://code.visualstudio.com/Download | میشه گفت در حال حاضر محبوب ترین محیط برنامه نویسی برای اکثر زبان هاست. بعد از نصبش به هر زبانی که بخواید برنامه نویسی کنید پیغام دانلود افزونه مربوط به اون زبان رو میده که از داخل خودش اگه اینترنتتون وصل باشه قابل دانلوده | 40 | | pycharm | https://www.jetbrains.com/pycharm/download | دانلود و استفاده از نسخه کامیونیتی اش رایگانه | 41 | | sololearn code playground | https://www.sololearn.com/compiler-playground/python | نیازی به نصب نیست و میتونید تحت وب کدتون رو اجرا کنی | 42 | | Pydroid 3 - IDE for Python 3 | https://play.google.com/store/apps/details?id=ru.iiec.pydroid3 | میتونید توی موبایل باهاش کدنویسی کنید | 43 | ### دستور نمونه برای امتحان کردن محیط اجرای کد 44 | ```python 45 | print(2+3) 46 | ``` 47 | ## 2. گرفتن ورودی و چاپ خروجی، کار با متغیر ها، اعمال ریاضی (ویدیو در یوتیوب: https://youtu.be/buwe3yIzd3Q) 48 | ### نوشتن متن روی صفحه 49 | ```python 50 | print("hello world!") 51 | ``` 52 | حالت های دیگر پرینت: 53 | ```python 54 | print("hello ", end = "") # نوشتن متن روی صفحه بدون رفتن به خط بعد 55 | print("world!") 56 | print(10 * "stop") # ده بار نوشته استاپ رو پشت هم برای ما مینویسه 57 | ``` 58 | ### کامنت گذاری 59 | ```python 60 | print("این خط اجرا میشه") 61 | # print("این خط اجرا نمیشه") 62 | # کامنت تک خطی 63 | """ 64 | کامنت چند خطی 65 | کامنت چند خطی 66 | کامنت چند خطی 67 | """ 68 | ``` 69 | ### استفاده از متغیر 70 | ```python 71 | age = 20 72 | print(age) 73 | other_age = age + 1 74 | print(other_age) 75 | ``` 76 | ### انواع متغیر ها 77 | ```python 78 | age = 20 # integer عدد صحیح 79 | score = 19.25 # float عدد اعشاری 80 | name = "Arash" # string نوشته، متن 81 | status = False # boolean درست یا غلط 82 | ``` 83 | همچنین میشه برای کوتاه تر شدن نوشته چند تا متغیر رو پشت سر هم تو یه خط تعریف کرد: 84 | ```python 85 | a, b, c = 1, 19.5, "hello" 86 | print(a) 87 | print(b) 88 | print(c) 89 | ``` 90 | برای دور محتوای نوشته هم میتونیم از نقل قول تکی هم از نقل قول 2 تایی استفاده کنیم: 91 | ```python 92 | a = 'hello' 93 | b = "hello" 94 | ``` 95 | در نام گذاری متغیر ها حواستون باشه که به حرف بزرگ و کوچک باشه: 96 | ```python 97 | a = "hello" 98 | A = 3 99 | # این 2 متغیر متفاوت از هم هستند 100 | ``` 101 | شکل های درست و غلط برای نام گذاری متغیر ها: 102 | ```python 103 | # right forms✅: 104 | myvar = "John" 105 | my_var = "John" 106 | _my_var = "John" 107 | myVar = "John" 108 | MYVAR = "John" 109 | myvar2 = "John" 110 | 111 | # wrong forms❌: 112 | 2myvar = "John" 113 | my-var = "John" 114 | my var = "John" 115 | ``` 116 | ### گرفتن ورودی از کاربر 117 | ```python 118 | print("enter your age:") 119 | age = input() 120 | print("your age is:", age) 121 | ``` 122 | ### محاسبه سن از روی تاریخ تولد 123 | ```python 124 | birthday = input("enter your birthday: ") 125 | age = 2023 - int(birthday) 126 | print(age) 127 | ``` 128 | یکبار هم به جای `int(birthday)` بنویسید `birthday` تا خطایی که میده رو ببینید 129 | ### توابع تبدیل نوع متغیر ها 130 | ```python 131 | int() # تبدیل به عدد صحیح 132 | float() # تبدیل به عدد اعشاری 133 | bool() # تبدیل به غیر بولین (درست یا غلط) 134 | str() # تبدیل به متن 135 | ``` 136 | تبدیل جنس های مختف متغیر ها به یک دیگر (cast): 137 | ```python 138 | x = str(3) # x = '3' 139 | y = int(3) # y = 3 140 | z = float(3) # z = 3.0 141 | ``` 142 | تشخیص جنس متغیر ها با استفاده از type : 143 | ```python 144 | x = 5 145 | y = "Arash" 146 | print(type(x)) 147 | print(type(y)) 148 | ``` 149 | ## 3. شرط و عبارات منطقی (لینک ویدیو در یوتیوب: https://youtu.be/8XJP8RAbmgI) 150 | ### عملیات های ریاضی 151 | ```python 152 | print("taghsim:", 10 / 3) 153 | print("taghsim rond shode be paeen:", 10 // 3) 154 | print("zarb:", 10 * 3) 155 | print("jam:", 10 + 3) 156 | print("tafrigh:", 10 - 3) 157 | print("baghi mande:", 10 % 3) 158 | print("tavan:", 10 ** 3) 159 | print(10 * "stop") # ده بار نوشته استاپ رو پشت هم برای ما مینویسه 160 | ``` 161 | اگر توی یه عبارت ترکیب چند تا عملیات ریاضی باشه مشابه چیزی که تو ریاضی خوندیم اول پرانتز حساب میشه، بعد ضرب و تقسیم و نهایتا جمع و تفریق. 162 | ### مقایسه 163 | ```python 164 | x = input("enter x:") 165 | x = int(x) 166 | print(x == 10) # مساوی 167 | print(x != 10) # مخالف 168 | print(x > 10) # بزرگ تر 169 | print(x >= 10) # بزرگ تر یا مساوی 170 | print(x < 10) # کوچک تر 171 | print(x <= 10) # کوچک تر یا مساوی 172 | ``` 173 | ### عبارات منطقی 174 | ```python 175 | x = input("enter x:") 176 | x = int(x) 177 | print(x < 20 and x > 10) # و 178 | print(x > 100 or x < -100) # یا 179 | print(not x == 10) # برعکس 180 | ``` 181 | ### شرط 182 | ```python 183 | temperature = 25 184 | 185 | if temperature > 30: # اگر 186 | print("hot") 187 | print("drink water") 188 | elif temperature > 20: # در غیر این صورت اگر 189 | print("nice weather") 190 | print("go and play outside") 191 | else: # در غیر این صورت 192 | print("cold") 193 | print("end") 194 | ``` 195 | برنامه چک کردن سن: 196 | ```python 197 | if int(age) < 0: 198 | print("Age is wrong.") 199 | print("enter another age") 200 | elif int(age) < 18: 201 | print("you are a child") 202 | elif int(age) > 100: 203 | print("go die") 204 | else: 205 | print("You are in a good age") 206 | print("end") 207 | ``` 208 | برنامه ای که چک میکنه عدد ورودی بین 0 و 20 هست یا نه (به 4 شکل مختلف انجام دادم): 209 | ```python 210 | x = int(input()) 211 | 212 | print("1:") 213 | if 0 < x < 20: # اگر ایکس بین 0 و 20 بود 214 | print("ok") 215 | else: # در غیر این صورت 216 | print("not ok") 217 | 218 | print("2:") 219 | if 0 < x and x < 20: # نوع دیگر نوشتن، دقیقا همون کار مدل بالایی رو میکنه 220 | print("ok") 221 | else: # در غیر این صورت 222 | print("not ok") 223 | 224 | print("3:") 225 | if x < 0 or x > 20: # نوع دیگر نوشتن، دقیقا همون کار دو مدل قبلی رو میکنه 226 | print("not ok") 227 | else: # در غیر این صورت 228 | print("ok") 229 | 230 | print("4:") 231 | if not(x < 0 or x > 20): # نوع دیگر نوشتن، دقیقا همون کار سه مدل قبلی رو میکنه 232 | print("ok") 233 | else: # در غیر این صورت 234 | print("not ok") 235 | ``` 236 | نمونه ای از if که سر کلاس امتحان کردیم: 237 | ```python 238 | y = input("enter a text: ") 239 | 240 | if y.lower() != "hello": 241 | print("hello back to you") 242 | else: 243 | print("bye") 244 | ``` 245 | چک کردن زوج یا فرد بودن یک عدد: 246 | ```python 247 | x = input("enter your number: ") 248 | x = int(x) 249 | 250 | y = x % 2 # محاسبه باقیمانده تقسیم بر 2 251 | 252 | if y == 0: # اگر باقی مانده صفر بود 253 | print("even") 254 | else: # اگر باقی مانده صفر نبود 255 | print("odd") 256 | ``` 257 | ------------------------------------------------------------------------------------------------------------------------ 258 | ------------------------------------------------------------------------------------------------------------------------ 259 | ------------------------------------------------------------------------------------------------------------------------ 260 | ------------------------------------------------------------------------------------------------------------------------ 261 | ------------------------------------------------------------------------------------------------------------------------ 262 | 263 | 264 | ## گیتهاب 265 | - گیتهاب چیه و به جه دردی میخوره؟ چطوری تو ساخت یک فایل با دیگران مشارکت داشته باشیم و چطور درباره پروژه های دیگران نظر بدیم؟ ویدیوی ثبت نام و استفاده تو آپارات: https://aparat.com/v/mOrKl 266 | - آموزش pull request در گیتهاب توسط محمد کهنوی: https://www.aparat.com/v/TKckQ 267 | ### ویدیو ها 268 | 269 | 270 | - نحوه تبدیل فایل پایتون به فایل اجرایی exe در آپارات: https://aparat.com/v/Jmneh 271 | - آشنایی با ساخت ربات تلگرام با telebot در پایتون: https://aparat.com/v/nJyjc 272 | - معرفی و آشنایی با هوش مصنوعی ChatGpt توسط متین پیرولی: https://youtu.be/42W5ksGUS40 273 | ![ChatGPT](https://github.com/arashnm80/python-tutorial/assets/20334281/7880761f-459b-439b-b426-40685cb3bc50) 274 | 275 | 276 | 277 | 278 | 279 | 280 | 281 | ### شمارش در دنیای کامپیوتر و برنامه نویسی از صفر شروع میشه 282 | ``` 283 | 01234567... 284 | ↓↓↓↓↓ 285 | Arash... 286 | ``` 287 | همچنین: 288 | ``` 289 | True = 1 = وصل بودن، روشن بودن، درست بودن 290 | False = 0 = قطع بودن، خاموش بودن، غلط بودن 291 | ``` 292 | ### توابع کار با متن 293 | ```python 294 | text = "Arash Nemat Zadeh" 295 | print(text) # حالت معمولی 296 | print(text.upper()) # حروف بزرگ 297 | print(text.lower()) # حروف کوچک 298 | print(text.find("Nemat")) # پیدا کردن نوشته 299 | print("Arash" in text) # True 300 | print("Korosh" in text) # False 301 | print(text.replace("Arash","Korosh")) # جایگزین کردن نوشته 302 | ``` 303 | 304 | 305 | 306 | ### لیست 307 | ```python 308 | names = ['arash', 'korosh', 'maryam', 'mina', 'reza'] 309 | print(names) 310 | print(names[0]) # عضو اول 311 | print(names[1]) # عضو دوم 312 | print(names[-1]) # عضو آخر 313 | names[0] = 'aaaaarash' 314 | print(names) 315 | print(names[0:3]) # از عضو 0 تا 2 (خود 3 جزءش نیست) 316 | print(names) 317 | names[1:3] = ['k', 'm'] # جایگزین کردن بخشی از لیست با یه لیست دیگه 318 | print(names) 319 | ``` 320 | استفاده از توابع لیست: 321 | ```python 322 | numbers = [10, 20, 30, 40, 50] 323 | print(numbers) 324 | print(len(numbers)) # نمایش تعداد اعضا 325 | numbers.append(60) # اضافه کردن عضو به انتها 326 | print(numbers) 327 | numbers.insert(2, 100) # اضافه کردن عضو جدید قبل عضو دوم 328 | print(numbers) 329 | print(10 in numbers) # چک کردن حضور 10 بین اعضا 330 | print(90 in numbers) # چک کردن حضور 90 بین اعضا 331 | numbers.remove(100) # حذف 100 از بین اعضا 332 | print(numbers) 333 | numbers.clear() # پاک کردن تمام اعضا 334 | print(numbers) 335 | 336 | txt1 = "My name is {fname}, I'm {age}".format(fname = "John", age = 36) 337 | print(txt1) 338 | 339 | x = input() 340 | y = "Hello, this is our {name1} class".format(name1 = x) 341 | print(y) 342 | ``` 343 | ### حلقه 344 | حلقه while: 345 | ```python 346 | i = 1 347 | while i <= 5: 348 | print(i) 349 | i = i + 1 350 | ``` 351 | تکرار نوشته: 352 | ```python 353 | i = 1 354 | while i <= 5: 355 | print(i * "Bye") 356 | i = i + 1 357 | ``` 358 | استفاده از حلقه while برای ساخت دنباله فیبوناچی(دنباله ای که هر عضو اون جمع 2 تا عدد قبلیه): 359 | ```python 360 | a, b = 0, 1 361 | while a < 20: 362 | print(a) 363 | a, b = b, a + b 364 | ``` 365 | حلقه for: 366 | ```python 367 | names = ["ali", "amin", "shabnam"] 368 | for i in names: 369 | print("Salam " + i) 370 | 371 | # انجام همون کار با حلقه while 372 | i = 0 373 | while i < len(names): 374 | print("Salam " + names[i]) 375 | i = i + 1 376 | ``` 377 | نمایش اندازه هر کلمه در لیست با حلقه for: 378 | ```python 379 | my_words = ['programmer', 'git', 'vscode'] 380 | for w in my_words: 381 | print(w, len(w)) 382 | ``` 383 | ### range 384 | ```python 385 | numbers = range(5) # از صفر تا 4 (خود 5 شاملش نیست) 386 | for i in numbers: 387 | print(i) 388 | 389 | for i in range(5): # همون کد قبلی به صورت کوتاه تر 390 | print(i) 391 | 392 | numbers = range(15, 20) # از 15 تا 19 (خود 20 نیست) 393 | for i in numbers: 394 | print(i) 395 | 396 | numbers = range(10, 100, 5) # از 10 تا 100 پنج تا پنج تا (خود 100 که آخریه جزءش نیست) 397 | for i in numbers: 398 | print(i) 399 | 400 | ``` 401 | دنباله فیبوناچی با حلقه for: 402 | ```python 403 | # fibonacci series: z = x + y 404 | # 1 1 2 3 5 8 13 21 405 | # x y z → 406 | # x y z → 407 | # x y z → 408 | # x y z → 409 | 410 | x = 1 411 | y = 1 412 | for i in range(10): 413 | print(x) 414 | z = x + y 415 | x = y 416 | y = z 417 | ``` 418 | ### tuple 419 | توضیح: tuple مشابه list است با این تفاوت که قابل تغییر نیست. 420 | ```python 421 | numbers = (1, 2, 3, 4) 422 | numbers[0] = 10 # ارور میده چون قابل تغییر نیست 423 | ``` 424 | ### تو در تو نوشتن 425 | چاپ مقسوم علیه های اعداد 1 تا 20: 426 | ```python 427 | for x in range(1, 21): 428 | print("\n") 429 | print(x, end=": ") 430 | for i in range(1, x + 1): 431 | if x % i == 0: 432 | print(i, end=", ") 433 | ``` 434 | ### فراخوانی ماژول ها و کتاب خانه های از پیش تعریف شده 435 | تولید عدد رندوم: 436 | ```python 437 | import random # فراخوانی و وارد کردن توابع مربوط تو تولید اطلاعات رندوم به برنامه 438 | 439 | n = random.randint(1,1000) # تولید عدد رندوم از 1 تا 1000 440 | print(n) 441 | ``` 442 | ### توابع 443 | مثال اول: 444 | ```python 445 | def amin(): 446 | print("be amin khosh oomadid:") 447 | x = int(input()) 448 | y = int(input()) 449 | print(x + y) 450 | 451 | print("Hello") 452 | amin() 453 | print("bye") 454 | ``` 455 | مثال دوم: 456 | ```python 457 | import math # فراخوانی توابع ریاضی به برنامه خودمون 458 | 459 | # تابع حسین پارامتر نداره 460 | # یدونه ورودی از ما میگیره و فاکتوریلش رو حساب میکنه 461 | def hossein(): 462 | print("ye adad vared konid:") 463 | x = input() 464 | x = int(x) 465 | # x = math.sqrt(x) # تابع نمونه دیگری تو توابع ریاضی که رادیکال رو چاپ میکنه 466 | x = math.factorial(x) 467 | x = int(x) 468 | print(x) 469 | 470 | # تابع سید 2 تا پارامتر تو ورودی میگیره و ضربشون رو چاپ میکنه 471 | def seyed(a, b): 472 | z = a*b 473 | print(z) 474 | 475 | # مثلا میتونیم اینطوری از تابع سید که تو بالا تعریف کردیم استفاده کنیم: 476 | # for i in range(20): 477 | # x = int(input("x: ")) 478 | # y = int(input("y: ")) 479 | # seyed(x, y) 480 | ``` 481 | مثال سوم: 482 | فرض کنید کل کد مثال قبل رو توی یک فایل به اسم دلخواه مثل myfunc.py ذخیره کنیم. حالا کنارش تو همون پوشه یه فایل پایتون دیگه درست میکنیم و اگه بخوایم میتونیم از توابع قبلی بدون این که دوباره نویسی کنیم اینطوری استفاده کنیم: 483 | ```python 484 | from myfunc import hossein # وارد کردن تابع حسین از فایل قبلی 485 | 486 | hossein() # اجرای تابع حسین 487 | ``` 488 | ### خواندن و نوشتن فایل در پایتون 489 | #### مقدمه 490 | ما در پایتون یک فایل رو با دستور `()open` باز میکنیم. این دستور برای کار کردن به 2 پارامتر نیاز داره: اسم فایل و `mode` کار کردن. مود یا حالت کار با فایل میتونه یکی از 4 حالت زیر باشه: 491 | ``` 492 | "r" - Read - خواندن - حالت پیشفرض همینه که در صورت وجود نداشتن فایل ارور میده 493 | "a" - Append - ضمیمه در انتها - اگر فایل از قبل وجود نداشته باشه اون رو میسازه 494 | "w" - Write - نوشتن - فایل رو برای نوشتن باز میکنه و اگر از قبل وجود نداشته باشه میسازدش 495 | "x" - Create - ساختن - فایل رو ایجاد میکنه و اگر از قبل وجود داشته باشه اررور میده 496 | ``` 497 | همچنین میتونیم تعیین کنیم تا با فایل به صورت نوشته رفتار بشه یا دودویی: 498 | ``` 499 | "t" - Text - نوشته - حالت پیشفرض، برای متون 500 | "b" - Binary - دودویی یا باینری - مثلا برا عکس ها 501 | ``` 502 | مثلا فرض کنید فایلی به اسم `database.txt` داریم. میتونیم این فایل رو با یکی از دستور های زیر باز کنیم (چون `r` و `t` مقادیر پیشفرض هستند اجباری نیست که حتما بنویسیمشون): 503 | ```python 504 | f = open("database.txt") 505 | f = open("database.txt", "rt") 506 | ``` 507 | #### خواندن فایل 508 | از دستور `()read` برای خواندن اطلاعات فایل بعد از باز کردنش استفاده میشه. \ 509 | فرض کنید داخل پوشه ای که فایل پایتون اصلی مون به نام `main.py` وجود داره یک فایل متنی به نام `database.txt` با محتوای زیر وجود داره: 510 | ``` 511 | Hi everybody! 512 | My name is Arash Nemat Zadeh. 513 | What is your name? 514 | What are your hobbies? 515 | Who do you like to be? 516 | ``` 517 | حالا داخل فایل پایتونمون میتونیم کد زیر رو بنویسیم تا اطلاعات اون فایل رو بخونه و تو خروجی نمایش بده: 518 | ```python 519 | f = open("database.txt", "r") 520 | print(f.read()) 521 | ``` 522 | اگر این `database.txt` تو پوشه دیگری باشه میتونیم آدرس کاملش رو مشابه زیر بنویسیم: 523 | ```python 524 | f = open("C:\\Users\\Arash\\Desktop\\folder1\\folder2\\database.txt", "r") 525 | print(f.read()) 526 | ``` 527 | گاهی نیاز نداریم همه فایل رو بخونیم. مثلا اگر بخواهیم فقط 20 کاراکتر اول فایل رو چک کنیم این کد رو مینویسیم: 528 | ```python 529 | f = open("database.txt", "r") 530 | print(f.read(20)) 531 | ``` 532 | گاهی نیاز داریم فایل رو خط به خط بخونیم. هر بار که بخواهیم یک خط جدید از فایل رو بخونیم یک بار دستور `()readline` رو مینویسیم. مثلا اگر بخواهیم 2 خط اول فایلمون خوانده بشه 2 بار این دستور رو به شکل زیر مینویسیم: 533 | ```python 534 | f = open("database.txt", "r") 535 | print(f.readline()) 536 | print(f.readline()) 537 | ``` 538 | اگر بخواهیم همه خطوط رو تک تک بخونیم میتونیم از یک حلقه `for` به شکل زیر استفاده کنیم: 539 | ```python 540 | f = open("database.txt", "r") 541 | for x in f: 542 | print(x, end="") 543 | ``` 544 | یا مثلا وقتی میخوایم فقط یک خط به خصوص رو بخونیم به شکل زیر عمل میکنیم (چاپ خط سوم فایل در خروجی): 545 | ```python 546 | f = open("database.txt", "r") 547 | line = 1 548 | for x in f: 549 | if line == 4: 550 | print(x, end="") 551 | line += 1 552 | ``` 553 | به عنوان یک عادت خوب در دنیای برنامه نویسی همیشه در آخر برنامه بعد این که کار تان با فایل تمام شد آن را با دستور `()close` ببندید: 554 | ```python 555 | f = open("database.txt", "r") 556 | print(f.readline()) 557 | f.close() 558 | ``` 559 | #### نوشتن روی فایل 560 | با دستور `()write` میتونیم اطلاعات رو توی یک فایل بنویسیم و برای استفاده در آینده ذخیره کنیم: \ 561 | حالت `append` یعنی نوشتن در ادامه مطالب قبلی: 562 | ```python 563 | # comment: باز کردن فایلی جدید و اضافه کردن یک خط نوشته در انتهای آن 564 | f = open("database2.txt", "a") 565 | f.write("This is a line appended to the end.") 566 | f.close() 567 | 568 | # comment: باز کردن فایل خطوط بالاتر و خواندن خط نوشته شده 569 | f = open("database2.txt", "r") 570 | print(f.read()) 571 | ``` 572 | حالت `write` یعنی پاک کردن اطلاعات قبلی و نوشتن از اول: 573 | ```python 574 | # comment: باز کردن فایلی جدید و نوشتن روی آن با پاک کردن اطلاعات قبلی 575 | f = open("database3.txt", "w") 576 | f.write("This is a line written after deleting previous ones.") 577 | f.close() 578 | 579 | # comment: باز کردن فایل خطوط بالاتر و خواندن خط نوشته شده 580 | f = open("database3.txt", "r") 581 | print(f.read()) 582 | ``` 583 | هنگام استفاده از دستور `()write` اگر بعد از نوشتن یک خط بخواهیم به خط بعدی برویم به شکل زیر عمل میکنیم: 584 | ```python 585 | my_file.write("\n") 586 | ``` 587 | #### ساخت فایل جدید 588 | با دستور `()open` به 3 حالت زیر میتونیم یک فایل جدید بسازیم: 589 | ``` 590 | "x" - Create - ساختن - اگر فایل از قبل وجود داشته باشد ارور میدهد 591 | "a" - Append - ضمیمه کردن - اگر فایل از قبل وجود نداشته باشد آن را میسازد 592 | "w" - Write - نوشتن - اگر فایل از قبل وجود نداشته باشد آن را میسازد 593 | ``` 594 | #### حذف فایل 595 | برای حذف فایل مازول `os` را به برنامه اضافه کرده و از دستور `()remove` استفاده میکنیم: 596 | ```python 597 | import os 598 | os.remove("database.txt") 599 | ``` 600 | اگر فایل وجود نداشته باشد ولی بخواهیم آن را با دستور قبلی حذف کنیم ارور میگیریم. برای جلوگیری از این ارور میتوانیم اول بررسی کنیم که فایل وجود دارد یا نه: 601 | ```python 602 | import os 603 | if os.path.exists("database.txt"): # اگر فایل وجود داشت 604 | os.remove("database.txt") 605 | else: # اگر فایل وجود نداشت 606 | print("The file does not exist") 607 | ``` 608 | #### حذف پوشه 609 | به روش زیر میتوانیم یک پوشه را حذف کنیم: 610 | ```python 611 | import os 612 | os.rmdir("folder1") 613 | ``` 614 | ## ساخت رابط کاربری یا GUI با استفاده از tkinter 615 | نصب tkinter با وارد کردن کد زیر در ترمینال: 616 | ``` 617 | pip install tk 618 | ``` 619 | ساخت پنجره ساده: 620 | ```python 621 | from tkinter import * # وارد کردن کل اجزای ماژول تکینتر به برنامه 622 | 623 | window = Tk() # ساخت پنجره 624 | 625 | window.mainloop() # نمایش پنجره 626 | ``` 627 | تغییر ابعاد پنجره و محل قرار گرفتنش: 628 | ```python 629 | from tkinter import * # وارد کردن کل اجزای ماژول تکینتر به برنامه 630 | 631 | window = Tk() # ساخت پنجره 632 | 633 | # تنظیم ابعاد به فرمت زیر 634 | # widthxheight+x+y 635 | # میتونیم 2 تای آخر یا اصلا هر 4 تا رو ننویسیم 636 | window.geometry("800x400+50+10") 637 | 638 | window.mainloop() # نمایش پنجره 639 | ``` 640 | اضافه کردن label ها به صفحه: 641 | ```python 642 | from tkinter import * # وارد کردن کل اجزای ماژول تکینتر به برنامه 643 | 644 | window = Tk() # ساخت پنجره 645 | 646 | # تنظیم ابعاد به فرمت زیر 647 | # widthxheight+x+y 648 | # میتونیم 2 تای آخر یا اصلا هر 4 تا رو ننویسیم 649 | window.geometry("800x400+50+10") 650 | 651 | label1 = Label(window, text="Arash") # ساخت یک لیبل با نوشته دلخواه 652 | label1.place(x = 10, y = 30) # قرار دادن لیبل در جای دلخواه 653 | 654 | label2 = Label(window, text="Korosh") # ساخت یک لیبل با نوشته دلخواه 655 | label2.pack(padx=5, pady=2) # قرار دادن لیبل با فاصله گذاری خودکار 656 | label3 = Label(window, text="Ali") # ساخت یک لیبل با نوشته دلخواه 657 | label3.pack(padx=5, pady=2) # قرار دادن لیبل با فاصله گذاری خودکار 658 | label4 = Label(window, text="Reza") # ساخت یک لیبل با نوشته دلخواه 659 | label4.pack(padx=5, pady=2) # قرار دادن لیبل با فاصله گذاری خودکار 660 | 661 | label5 = Label(window, text="Maryam", font = ("Times", 20)) # تغییر سایز و فونت 662 | label5.place(x = 500, y = 300) 663 | 664 | label6 = Label(window, text = "Zahra", fg="blue", bg="yellow") # تنظیم رنگ نوشته و پس زمینه 665 | label6.pack() 666 | 667 | window.mainloop() # نمایش پنجره 668 | ``` 669 | ساخت Entry یا جای خالی تک خطی: 670 | ```python 671 | from tkinter import * # وارد کردن کل اجزای ماژول تکینتر به برنامه 672 | 673 | win = Tk() # ساخت پنجره 674 | 675 | entry1 = Entry(win) # ساخت جای خالی یک خطی برای نوشته 676 | entry1.pack() 677 | 678 | win.mainloop() # نمایش پنجره 679 | ``` 680 | قرار دادن یک label سمت چپ و یک entry سمت راست: 681 | ```python 682 | from tkinter import * # وارد کردن کل اجزای ماژول تکینتر به برنامه 683 | 684 | win = Tk() # ساخت پنجره 685 | 686 | entry1 = Entry(win) # ساخت جای خالی یک خطی برای نوشته 687 | entry1.pack(side=RIGHT) # قرار دادن سمت راست 688 | 689 | label1 = Label(win, text="my label") 690 | label1.pack(side=LEFT) # قرار دادن سمت چپ 691 | 692 | win.mainloop() # نمایش پنجره 693 | ``` 694 | 695 | برای علاقه مندان: بازی با حالت های دیگر چیدمان (زبانش فرانسویه ولی مهم نیست. میتونید به کد هاش نگاه مختصر بندازید و بعد چک کنید ببینید حاصل چه چیدمانی شده): https://infoforall.fr/python/python-act110.html 696 | 697 | قرار دادن button (دکمه) کنار entry که با زدن روش متن داخلش رو تو ترمینال چاپ میکنه: 698 | ```python 699 | from tkinter import * # وارد کردن کل اجزای ماژول تکینتر به برنامه 700 | 701 | def myfunc(): 702 | text = entry1.get() # دریافت نوشته از entry 703 | print(text) # چاپ نوشته در ترمینال 704 | 705 | win = Tk() # ساخت پنجره 706 | 707 | entry1 = Entry(win) # ساخت جای خالی یک خطی برای نوشته 708 | entry1.pack() 709 | 710 | btn1 = Button(win, text="print", command=myfunc) # تعریف دستور برای زمان کلیک شدن دکمه 711 | btn1.pack() 712 | 713 | win.mainloop() # نمایش پنجره 714 | ``` 715 | حالا کد قبلی رو تغییر میدیم تا به جای چاپ تو ترمینال به صورت messagebox (پیغام) روی صفحه به ما نشون بده: 716 | ```python 717 | from tkinter import * # وارد کردن کل اجزای ماژول تکینتر به برنامه 718 | from tkinter import messagebox # اضافه کردن ماژول پیغام به برنامه 719 | 720 | def myfunc(): 721 | text = entry1.get() # دریافت نوشته از entry 722 | messagebox.showinfo("my title", text) # نشان دادن پیغام در صفحه 723 | 724 | win = Tk() # ساخت پنجره 725 | 726 | entry1 = Entry(win) # ساخت جای خالی یک خطی برای نوشته 727 | entry1.pack() 728 | 729 | btn1 = Button(win, text="print", command=myfunc) # تعریف دستور برای زمان کلیک شدن دکمه 730 | btn1.pack() 731 | 732 | win.mainloop() # نمایش پنجره 733 | ``` 734 | نمونه استفاده از grid در tkinter پایتون: 735 | https://www.pythonguis.com/tutorials/create-ui-with-tkinter-grid-layout-manager/ 736 | ## تشخیص چهره با opencv و deepface 737 | آموزش برگرفته از: 738 | - https://youtu.be/pQvkoaevVMk \ 739 | نصب کتاب خانه ها: 740 | ``` 741 | pip install opencv-python 742 | pip install --no-deps deepface 743 | ``` 744 | کد: 745 | ```python 746 | import threading 747 | 748 | import cv2 749 | from deepface import DeepFace 750 | 751 | cap = cv2.VideoCapture(0, cv2.CAP_DSHOW) 752 | 753 | cap.set(cv2.CAP_PROP_FRAME_WIDTH, 640) 754 | cap.set(cv2.CAP_PROP_FRAME_HEIGHT, 480) 755 | 756 | counter = 0 757 | 758 | reference_img = cv2.imread("reference.jpg") # use your own image here 759 | 760 | face_match = False 761 | 762 | 763 | def check_face(frame): 764 | global face_match 765 | try: 766 | if DeepFace.verify(frame, reference_img.copy())['verified']: 767 | face_match = True 768 | else: 769 | face_match = False 770 | except ValueError: 771 | face_match = False 772 | 773 | 774 | while True: 775 | ret, frame = cap.read() 776 | 777 | if ret: 778 | if counter % 30 == 0: 779 | try: 780 | threading.Thread(target=check_face, args=(frame.copy(),)).start() 781 | except ValueError: 782 | pass 783 | counter += 1 784 | if face_match: 785 | cv2.putText(frame, "MATCH!", (20, 450), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 255, 0), 3) 786 | else: 787 | cv2.putText(frame, "NO MATCH!", (20, 450), cv2.FONT_HERSHEY_SIMPLEX, 2, (0, 0, 255), 3) 788 | 789 | cv2.imshow('video', frame) 790 | 791 | key = cv2.waitKey(1) 792 | if key == ord('q'): 793 | break 794 | 795 | cv2.destroyAllWindows() 796 | ``` 797 | -------------------------------------------------------------------------------- /TO-DO.md: -------------------------------------------------------------------------------- 1 | ## یادداشت برای خودم 2 | ### چیزایی که میخوام به مطالب اضافه کنم: 3 | - tuple, dict, list 4 | -------------------------------------------------------------------------------- /examples/fibonacci-series/fibonacci.py: -------------------------------------------------------------------------------- 1 | a, b = 0, 1 2 | while a < 20: 3 | print(a) 4 | a, b = b, a + b -------------------------------------------------------------------------------- /examples/guess-number-game/README.md: -------------------------------------------------------------------------------- 1 | تو این بازی قراره نفر اول یه عدد از 1 تا 1000 انتخاب کنه و نفر دوم حدس بزنه که اون عدد چیه؟ 2 | نفر دوم فرصت داره که 10 تا حدس بزنه. هر بار که یه عدد رو حدس میزنه نفر اول بهش میگه درست حدس زده یا باید عدد بزرگ تری رو حدس بزنه یا عدد کوچک تری رو. اگر نفر دوم نتونه با 10 بار پرسیدن عدد درست رو پیدا کنه باخته. تو این بازی اگر نفر دوم استراتژی درست رو برای حدس زدن انتخاب کنه همیشه میتونه برنده باشه. 3 | -------------------------------------------------------------------------------- /examples/guess-number-game/first_person.py: -------------------------------------------------------------------------------- 1 | import random 2 | 3 | n = random.randint(1,1000) 4 | win = False 5 | 6 | for step in range(10): 7 | print("enter your guess", step + 1) 8 | q = input() 9 | q = int(q) 10 | if q == n: 11 | print("Yayyyyy!") 12 | win = True 13 | break 14 | elif n > q: 15 | print("go upper") 16 | else: 17 | print("go lower") 18 | 19 | if win == False: 20 | print("you are a loser") 21 | print("my number was:", n) -------------------------------------------------------------------------------- /examples/guess-number-game/second_person.py: -------------------------------------------------------------------------------- 1 | up = 1000 2 | down = 1 3 | 4 | for step in range(10): 5 | guess = int((up + down) / 2) 6 | print("guess number", step + 1) 7 | print(guess) 8 | print("Was that right?") 9 | x = input() # u for upper, l for lower, f for find 10 | if x == "f": 11 | print("ok, right guess") 12 | break 13 | elif x == "u": 14 | down = guess 15 | elif x == "l": 16 | up = guess -------------------------------------------------------------------------------- /exercises/README.md: -------------------------------------------------------------------------------- 1 | # نکته مهم درباره هوش مصنوعی ها: 2 | استفاده از هوش مصنوعی ها مثل chatGPT نه تنها ممنوع نیست بلکه کاملا توصیه میشه. فقط به 2 تا نکته توجه کنید: 3 | 1. قبل از پرسیدن از AI هر چه قدرش رو که میتونید با استفاده از ذهن خودتون حل کنید. هر چه قدر بیشتر از مغزتون کار بکشید ورزیده تر میشه. 4 | 2. بعد از گرفتن جواب وقت بذارید و ریز به ریز کاری که کرده رو بفهمید و مهارت اینکه دفعه بعد همون رو خودتون بدون کمک بنویسید رو به دست بیارید. 5 | 6 | # تمارین 7 | - برنامه ای بنویسید که اسمتون رو چاپ کنه (یعنی در خروجی نمایش بده) 8 | - برنامه ای بنویسید که اسمتون رو از ورودی بگیره و بهتون سلام بده، یعنی ورودی و خروجی اش مشابه زیر باشه: 9 | 10 | input: (ورودی) 11 | ``` 12 | Arash Nemat Zadeh 13 | ``` 14 | output: (خروجی) 15 | ``` 16 | Hello Arash Nemat Zadeh 17 | ``` 18 | - برنامه ای بنویسید که 2 عدد از ورودی بگیری و جمعشون رو توی خروجی چاپ کنه: 19 | 20 | input: 21 | ``` 22 | 4 23 | 5 24 | ``` 25 | output: 26 | ``` 27 | 9 28 | ``` 29 | - تمرین بالا رو خوانا تر کنید و قبل هر مرحله پیغام مربوط بهش رو هم چاپ کنید: 30 | 31 | input: 32 | ``` 33 | Adade aval ra vared konid: 4 34 | Adade dovom ra vared konid: 5 35 | ``` 36 | output: 37 | ``` 38 | Hasel Jame 2 adad barabar ast ba: 9 39 | ``` 40 | 41 | - مشابه تمرین قبل رو با نام و نام خانوادگی تون تکرار کنید، یعنی برنامه ای بنویسید که نام و نام خانوادگی تون رو توی ورودی بگیره و نام کاملتون رو در خروجی چاپ کنه: 42 | 43 | input: 44 | ``` 45 | Name koochak khod ra vared konid: Arash 46 | Name khanevadegi khod ra vared konid: Nemat zadeh 47 | ``` 48 | output: 49 | ``` 50 | Name kamele shoma barabar ast ba: Arash Nemat Zadeh 51 | ``` 52 | - برنامه ای بنویسید که 2 عدد رو تو ورودی از ما بگیره و حاصل جمع، ضرب، تفریق، تقسیم، تقسیم همراه با رند کردن، یکی به توان دیگری و باقیمانده تقسیم یکی به دیگری مربوط به اون 2 عدد رو به ما برگردونه 53 | - برنامه ای بنویسید که 3 عدد در ورودی بگیره و میانگین اونها رو حساب کنه. 54 | - برنامه ای بنویسید که یک عدد در ورودی بگیرد و زوج یا فرد بودن آن را چاپ کند. 55 | - برنامه ای بنویسید که یک لیست شامل 3 اسم داشته باشد و نام کاربر را در زمان اجرا در ورودی بپرسد. سپس بررسی کند و در صورت وجود نام وارد شده در لیست پیغام موفقیت را چاپ کند. 56 | - برنامه ای بنویسید که اعداد 0 تا 99 را در خروجی چاپ کند. 57 | - برنامه ای بنویسید که اعداد بخش پذیر به 6 کوچک تر از 100 را در خروجی چاپ کند. 58 | - برنامه ای بنویسید که 5 عدد در ورودی بگیرد، آن ها را در یک لیست ذخیره کند و در نهایت میانگین آنها را در خروجی چاپ کند. 59 | - برنامه ای بنویسید که یک لیست شامل 5 نام کاربری و یک لیست شامل 5 رمز عبور داشته باشد. در ورودی از کاربر نام کاربری و رمز عبور شخصی اش را بپرسد و در صورت درست بودن پیغام موفقیت چاپ کند. 60 | - برنامه ای بنویسید که نمره شما رو در ورودی ازتون بگیره و با توجه به نمره تون یکی از این ها رو چاپ کنه: 19 تا 20: عالی، 16 تا 18: خیلی خوب، 12 تا 15: خوب، 10 تا 11: متوسط، زیر 10: نیاز به تلاش بیشتر 61 | - برنامه ای بنویسید که از 1 تا 100 اعداد بخش پذیر به 7 را چاپ کند. یکبار با استفاده از for و یکبار با while این کار را انجام دهید. 62 | - برنامه ای بنویسید که از کاربر رمز عبورش را بپرسد. در صورت درست بودن پیغام موفقیت نمایش دهد و در غیر این صورت پرسش را آنقدر تکرار کند تا بالاخره رمز درست وارد شود. 63 | - برنامه ای بنویسید که شکل های زیر را چاپ کند: 64 | ``` 65 | a) 66 | * 67 | ** 68 | *** 69 | **** 70 | ***** 71 | ``` 72 | ``` 73 | b) 74 | ***** 75 | **** 76 | *** 77 | ** 78 | * 79 | ``` 80 | ``` 81 | c) 82 | * 83 | ** 84 | *** 85 | **** 86 | ***** 87 | ``` 88 | ``` 89 | d) 90 | ***** 91 | **** 92 | *** 93 | ** 94 | * 95 | ``` 96 | - برنامه ای بنویسید که یک یا چند string رو در ورودی از ما بگیره و چند تابع یا عملیات دلخواه رو روی اون ها انجام بده. هر چند تا تابع که تونستید یاد بگیرید و پیاده سازی کنید بهتر. هدف از این تمرین اینه که خودتون شروع به سرچ کردن کنید و مطالب جدید رو پیدا کنید. برای مثال میتونید سرچ کنید: string functions in python. اسم هر سایتی که ازش کمک گرفتید رو هم ترجیحا بگید تا من تو فایل جواب ها هفته بعد لینکش رو برای بقیه بچه ها هم بذارم. (اگر برای این تمرین توضیحات بیشتر نیاز دارید میتونید این ویدیو رو ببینید: https://aparat.com/v/Z1qYE) 97 | - برنامه ای بنویسید که 5 بار هر بار نام کوچک و نام خانوادگی رو در ورودی از ما بگیره و در خروجی نام کامل رو چاپ کنه 98 | - برنامه ای بنویسید که 5 عدد رو در ورودی از شما بگیره و برای هر کدوم اگر عدد بزرگ تر از صفر بود اون رو توی یه لیست قرار بده. در نهایت محتویات لیست رو چاپ کنه 99 | - برنامه ای بنویسید که تابعی به نام prime تعریف کنه که کارش گرفتن عدد و تشخیص دادن این که اون عدد اول هست یا نه باشه. سپس از این تابع یکبار در همون فایل و یکبار دیگه تو یک فایل دیگه با استفاده از import کردن استفاده کنید. 100 | - برنامه ای بنویسید که با استفاده از tkinter یک پنجره تو صفحه ایجاد کنه، توی پنجره یک دکمه و یک جای خالی برای وارد کردن نوشته داشته باشه. ما داخل جای خالی اسممون رو وارد کنیم و با زدن دکمه به ما سلام بده، مثلا ما وارد کنیم Ali و اون با زدن دکمه پیغام Hello Ali رو نمایش بده. 101 | - برنامه ای بنویسید که توش مکان 2 تا مهره شطرنج رو بهش بدیم و بگه که مهره اول میتونه دومی رو بزنه یا نه؟ مهره اول رو یکبار رخ، اسب، فیل و وزیر در نظر بگیرید و برای هر حالت حل کنید. (فرض کنید فقط همین 2 مهره توی صفحه وجود دارند و حالت های خیلی خاص و نادر شطرنج رو هم نیاز نیست در نظر بگیرید. برای حالت کلی حل کنید.) - نحوه حرکت مهره ها در شطرنج اگه نمیدونید: https://docs.kde.org/trunk5/en/knights/knights/piece-movement.html 102 | 103 | -------------------------------------------------------------------------------- /others/README.md: -------------------------------------------------------------------------------- 1 | # سایر موارد 2 | ## مسابقه های برنامه نویسی 3 | ### کوئرا 4 | از این سایت میتونید برای شرکت در مسابقعات برنامه نویسی، تمرین مسائل و شرکت در آزمون های استخدامی شرکت ها استفاده کنید. 5 | ## بازی ها 6 | ### 7 billion humans 7 | برای اندروید و ویندوز در دسترسه و توی اون باید با بلوک هایی مشابه دستورات برنامه نویسی کارگر ها و بلوک ها رو جا به جا کنید و هدف هر مرحله رو انجام بدید 8 | ![7 billion humans](https://play-lh.googleusercontent.com/VgUps3B5ho5sd0rljuKzFr8-6wy-Pl98Vps1QL0bOA8iqO7eHdw8iU55IEZSPloilX4=w1052-h592) 9 | ## کلید های میانبر کیبورد 10 | 11 | - vscode: https://code.visualstudio.com/docs/getstarted/keybindings#_keyboard-shortcuts-reference 12 | - windows: https://go.microsoft.com/fwlink/?linkid=832145 13 | - linux: https://go.microsoft.com/fwlink/?linkid=832144 14 | - mac: https://go.microsoft.com/fwlink/?linkid=832143 15 | - pycharm: https://resources.jetbrains.com/storage/products/pycharm/docs/PyCharm_ReferenceCard.pdf 16 | ## منابعی که من برای درست کردن این دوره استفاده کردم 17 | به طور کلی من هیچ وقت دوره خاصی رو نمیگذرونم و هر چی یاد میگیرم با سرچ های روزانه توی گوگل، یوتیوب، کتاب ها، کانال ها، ... به دست میاد. اما اگه لینک خاصی یادم بمونه اینجا براتون میذارم. 18 | ### websites 19 | - python official website tutorial: https://docs.python.org/3/tutorial/ 20 | - convert python file to exe: https://towardsdatascience.com/how-to-easily-convert-a-python-script-to-an-executable-file-exe-4966e253c7e9 21 | - w3schools: https://www.w3schools.com/ 22 | 23 | ### youtube 24 | - Mosh - Python for Beginners - Learn Python in 1 Hour: https://www.youtube.com/watch?v=kqtD5dpn9C8 25 | - Tkinter Beginner Course - Python GUI Development - https://www.youtube.com/watch?v=ibf5cx221hk 26 | --------------------------------------------------------------------------------