├── 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 | 
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 | 
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 |
--------------------------------------------------------------------------------