0% found this document useful (0 votes)
6 views

py_note

Uploaded by

amir1384amir1396
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
6 views

py_note

Uploaded by

amir1384amir1396
Copyright
© © All Rights Reserved
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 91

‫ﺑﻪ ﻧﺎﻡ ﺧﺪﺍ‬

‫ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣەﻧﻮﯾﺴ ﭘﺎﯾﺘﻮﻥ‬


‫)ﻣﻘﺪﻣﺎﺗ (‬

‫ﺗﻬﻴﻪﻛﻨﻨﺪﻩ‪ :‬ﺱ‪ .‬ﻣﻮﺳﻮﯼ‬

‫‪[email protected]‬‬
‫‪ ۱۳‬ﺁﺑﺎﻥ ‪۱۴۰۳‬‬
‫ﭘﻴﺶﮔﻔﺘﺎﺭ‬

‫ﺗﺎﺭﻳﺨﭽﻪ ﺯﺑﺎﻥ ﭘﺎﻳﺘﻮﻥ‬


‫ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﻧﮕﺎﻫی ﺑﻪ ﺳﻴﺮ ﺗﺎﺭﻳﺨی ﺷﻜﻞﮔﻴﺮﯼ ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣﻪ ﻧﻮﻳﺴی ‪ Python‬ﺑﻴﺎﻧﺪﺍﺯﻳﻢ ﺷﺎﻳﺪ ﺑﺎﻳﺪ ﺑﻪ ﺳﺎﻝ ‪۱۹۸۲‬‬
‫ﺑﺎﺯﮔﺮﺩﻳﻢ‪ ،‬ﺯﻣﺎﻧی ﻛﻪ ‪ Guido Van Rossum‬ﺧﺎﻟﻖ ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴی ﭘﺎﻳﺘﻮﻥ ﻓﻌﺎﻟﻴﺖ ﺧﻮﺩ ﺭﺍ ﺩﺭ ﻣﺆﺳﺴﻪﯼ‬
‫ﺗﺤﻘﻴﻘﺎﺗی ﻣﺮﻛﺰ ﺭﻳﺎﺿﻴﺎﺕ ﻭ ﻋﻠﻮﻡ ﻛﺎﻣﭙﻴﻮﺗﺮﯼ ‪ CWI‬ﺩﺭ ﺁﻣﺴﺘﺮﺩﺍﻡ ﻫﻠﻨﺪ ﺁﻏﺎﺯ ﻛﺮﺩ ﻭ ﺩﺭ ﺳﺎﻝ ‪ ۱۹۹۱‬ﺍﻭﻟﻴﻦ ﻧﺴﺨﻪ‬
‫ﺯﺑﺎﻥ ﭘﺎﻳﺘﻮﻥ ﺍﺭﺍﺋﻪ ﺩﺍﺩ‪.‬‬
‫ﺩﺍﺳﺘﺎﻥ ﻧﺎﻣﮕﺬﺍﺭﯼ‪:‬‬
‫ﻭﻥ ﺭﻭﺳﻮﻡ ﭘﻴﺶ ﺍﺯ ﻫﺮ ﭼﻴﺰ‪ ،‬ﺗلاﺵ ﻛﺮﺩ ﻧﺎﻣی ﻣﻨﺎﺳﺐ ﺑﺮﺍﯼ ﺯﺑﺎﻥ ﺟﺪﻳﺪﯼ ﻛﻪ ﺩﺭ ﺻﺪﺩ ﻃﺮﺍﺣی ﺁﻥ ﺑﻮﺩ ﭘﻴﺪﺍ ﻛﻨﺪ ﻭ‬
‫ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺍﻳﻦ ﻛﻪ ﺍﻳﻦ ﺯﺑﺎﻥ ﺟﺪﻳﺪ ﺍﺯ ﺩﻝ ﭘﺮﻭﮊﻩﯼ ‪ ABC‬ﺑﻴﺮﻭﻥ ﻣیﺁﻣﺪ‪ ،‬ﺩﺭ ﺍﺑﺘﺪﺍ ﻗﺼﺪ ﺩﺍﺷﺖ ﺁﻥ ﺭﺍ ‪ B‬ﺑﻨﺎﻣﺪ‪ ،‬ﺍﻣﺎ‬
‫ﻣﺘﻮﺟﻪ ﺷﺪ ﺯﺑﺎﻧی ﺑﻪ ﻫﻤﻴﻦ ﻧﺎﻡ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ .‬ﭘﺲ ﺍﺯ ﺁﻥ ﻛﻪ ﺭﻭﺳﻮﻡ ﺑﺴﻴﺎﺭﯼ ﺍﺯ ﭘﻴﺸﻨﻬﺎﺩﺍﺕ ﺍﻋﻀﺎﯼ ﮔﺮﻭﻩ ﺭﺍ ﺩﺭ ﻣﻮﺭﺩ‬
‫ﻧﺎﻡ ﺯﺑﺎﻥ ﺟﺪﻳﺪ ﺭﺩ ﻛﺮﺩ ﺗﺼﻤﻴﻢ ﮔﺮﻓﺖ ﺍﻭﻟﻴﻦ ﻧﺎﻣی ﺭﺍ ﻛﻪ ﺑﻪ ﺫﻫﻨﺶ ﺭﺳﻴﺪ ﺍﻧﺘﺨﺎﺏ ﻛﻨﺪ‪ ،‬ﻛﻪ ﺑﻪ ﻃﻮﺭ ﺍﺗﻔﺎﻗی ﺑﻪ ﻳﺎﺩ‬
‫ﻛﻤﺪﯼ ﻣﺤﺒﻮﺑﺶ ﻛﻪ ﺁﻥ ﺭﻭﺯﻫﺎ ﺍﺯ ﺷﺒﻜﻪﯼ ‪ BBC‬ﺑﺎ ﻧﺎﻡ ‪ Monty Python’s Flying Circus‬ﭘﺨﺶ ﻣیﺷﺪ‬
‫ﺍﻓﺘﺎﺩ ﻭ ﺑﻪ ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﻧﺎﻡ ﭘﺎﻳﺘﻮﻥ ﺭﺍ ﺑﺮﺍﯼ ﭘﺮﻭﮊﻩﯼ ﺟﺪﻳﺪ ﺧﻮﺩ ﺍﻧﺘﺨﺎﺏ ﻛﺮﺩ‪.‬‬
‫ﺗﺎ ﻣﺪﺕﻫﺎ ﺭﻭﺳﻮﻡ ﺍﺟﺎﺯﻩ ﻧﻤیﺩﺍﺩ ﻛﻪ ﺍﺯ ﺗﺼﻮﻳﺮ ﭘﺎﻳﺘﻮﻥ ﻛﻪ ﮔﻮﻧﻪﺍﯼ ﻣﺎﺭ ﺍﺳﺖ ﺑﻪ ﻋﻨﻮﺍﻥ ﻧﻤﺎﺩ ﺍﻳﻦ ﺯﺑﺎﻥ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‬
‫ﻭ ﺍﻭﻟﻴﻦ ﺑﺎﺭ ﺍﻧﺘﺸﺎﺭﺍﺕ ‪ O’Reilly‬ﻛﻪ ﻫﻤﻴﺸﻪ ﺗﺼﻮﻳﺮ ﻳﮏ ﺟﺎﻧﻮﺭ ﺭﺍ ﺭﻭﯼ ﻛﺘﺎﺏﻫﺎﯼ ﺧﻮﺩ ﻗﺮﺍﺭ ﻣیﺩﻫﺪ‪ ،‬ﺍﺯ ﺗﺼﻮﻳﺮ‬
‫ﻳﮏ ﻣﺎﺭ ﺭﻭﯼ ﻛﺘﺎﺏ ﺁﻣﻮﺯﺵ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴی ﺑﻪ ﺯﺑﺎﻥ ﭘﺎﻳﺘﻮﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ ﻭ ﺑﻌﺪﻫﺎ ﻧﻴﺰ ﺍﻏﻠﺐ ﺍﺯ ﺗﺼﻮﻳﺮ ﻳﮏ ﻣﺎﺭ ﺑﻪ‬
‫ﻋﻨﻮﺍﻥ ﻧﻤﺎﺩ ﭘﺎﻳﺘﻮﻥ ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪ‪.‬‬

‫ﻧﺴﺨﻪﻫﺎﯼ ﺯﺑﺎﻥ ﭘﺎﻳﺘﻮﻥ‬


‫• ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﭘﺎﻳﺘﻮﻥ ﺩﻭ ﻧﺴﺨﻪ ﺩﺍﺭﺩ‪ .‬ﻧﺴﺨﻪ ‪ 2.x‬ﻭ ﻧﺴﺨﻪ ‪3.x‬‬

‫ﺁ‬
‫ﺏ‬
‫• ﭘﺸﺘﻴﺒﺎﻧی ﺍﺯ ﺩﻭ ﻧﺴﺨﻪﯼ ‪ 2‬ﻭ ‪ 3‬ﺑﻪ ﺻﻮﺭﺕ ﻣﻮﺍﺯﯼ ﺩﺭ ﻛﻨﺎﺭ ﻫﻢ ﺍﺩﺍﻣﻪ ﺩﺍﺭﺩ‪ ،‬ﺑﺎ ﺍﻳﻦ ﺣﺎﻝ ﺑﺮ ﺍﺳﺎﺱ ﻗﺮﺍﺭﺩﺍﺩﻫﺎﯼ‬
‫ﺻﻮﺭﺕ ﮔﺮﻓﺘﻪ ﺗﻮﺳﻌﻪ ﻧﺴﺨﻪﯼ ‪ 2‬ﺗﻨﻬﺎ ﺗﺎ ﺷﻤﺎﺭﻩﯼ ‪ 2.7‬ﺍﺩﺍﻣﻪ ﻣیﻳﺎﺑﺪ ﻭ ﭘﺸﺘﻴﺒﺎﻧی ﺍﺯ ﺁﻥ ﻓﻘﻂ ﺗﺎ ﺳﺎﻝ ‪۲۰۲۰‬‬
‫ﺍﺩﺍﻣﻪ ﺩﺍﺷﺖ‪.‬‬

‫• ﻗﺎﻋﺪﺗ ًﺎ ﭘﺲ ﺍﺯ ﺍﻧﺘﺸﺎﺭ ﻧﺴﺨﻪﯼ ‪ 3‬ﭘﺎﻳﺘﻮﻥ ﺗﻤﺎﻡ ﺑﺮﻧﺎﻣﻪﻫﺎ ﻭ ﻛﺘﺎﺑﺨﺎﻧﻪﻫﺎﯼ ﻧﺴﺨﻪﯼ ﻗﺒﻠی ﺑﺎﻳﺪ ﺑﻪ ﻧﺴﺨﻪﯼ ﺟﺪﻳﺪ‬
‫ﺍﺭﺗﻘﺎ ﻣیﻳﺎﻓﺘﻨﺪ‪ ،‬ﺑﺎ ﺍﻳﻦ ﺣﺎﻝ ِﺍﻋﻤﺎﻝ ﻗﺎﺑﻠﻴﺖﻫﺎ ﻭ ﮔﺮﺍﻣﺮ ﺟﺪﻳﺪ ﺩﺭ ﻧﺴﺨﻪﻫﺎﯼ ﻗﺒﻠی ﻭ ﻣﻬﺎﺟﺮﺕ ﺷﺮﻛﺖﻫﺎﯼ‬
‫ﺑﺰﺭﮒ ﺑﻪ ﻧﺴﺨﻪﯼ ﺟﺪﻳﺪ ﺑﺴﻴﺎﺭ ﺯﻣﺎﻥ ﺑﺮ ﺑﻮﺩ‪ .‬ﺍﺯ ﻃﺮﻓی ﻧﺴﺨﻪﯼ ﺟﺪﻳﺪ ﻫﻢ ﻗﺎﺑﻠﻴﺖ ‪Backward Com-‬‬
‫‪ patibility‬ﻳﺎ ﺳﺎﺯﮔﺎﺭﯼ ﺑﺎ ﻧﺴﺨﻪﻫﺎﯼ ﭘﻴﺸﻴﻦ ﺭﺍ ﻧﺪﺍﺷﺖ ﻭ ﺩﺭ ﺻﻮﺭﺗی ﻛﻪ ﺍﻳﺮﺍﺩﯼ ﺩﺭ ﻧﺴﺨﻪﻫﺎﯼ ‪ 2‬ﻭﺟﻮﺩ‬
‫ﺩﺍﺷﺖ‪ ،‬ﻛﺎﺭﺑﺮﺍﻥ ﻧﻤیﺗﻮﺍﻧﺴﺘﻨﺪ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﺴﺨﻪﯼ ﺟﺪﻳﺪ ﺑﺮ ﺁﻥ ﺍﻳﺮﺍﺩﺍﺕ ﻓﺎﺋﻖ ﺁﻳﻨﺪ‪ .‬ﺑﺮ ﻫﻤﻴﻦ ﺍﺳﺎﺱ ﺗﻴﻢ‬
‫ﺗﻮﺳﻌﻪﯼ ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴی ﭘﺎﻳﺘﻮﻥ ﺗﺼﻤﻴﻢ ﮔﺮﻓﺖ ﺩﺭ ﻳﮏ ﺩﻭﺭﻩﯼ ﺯﻣﺎﻧی ﻣﺤﺪﻭﺩ ﺗﻮﺳﻌﻪﯼ ﻧﺴﺨﻪﯼ ‪ 2‬ﺭﺍ‬
‫ﺍﺩﺍﻣﻪ ﺩﻫﺪ‪.‬‬

‫ﭼﺮﺍ ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴی ﭘﺎﻳﺘﻮﻥ؟‬


‫ﺯﺑﺎﻥ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴی ﭘﺎﻳﺘﻮﻥ ﺑﻪ ﺩلاﻳﻞ ﺯﻳﺮ ﺍﻧﺘﺨﺎﺏ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪ .۱‬ﻳﺎﺩﮔﻴﺮﯼ ﺁﻥ ﻧﺴﺒﺘ ًﺎ ﺳﺎﺩﻩ ﺍﺳﺖ‪ ،‬ﭼﺮﺍ ﻛﻪ ﮔﺮﺍﻣﺮ ﺁﻥ ﺑﻪ ﺯﺑﺎﻥ ﻣﺤﺎﻭﺭﻩ )ﺍﻧﮕﻠﻴﺴی( ﻧﺰﺩﻳﮏ ﺍﺳﺖ‪.‬‬

‫‪ .۲‬ﺩﺍﺭﺍﯼ ﻛﺎﺭﺑﺮﺩﻫﺎﯼ ﻣﺘﻨﻮع ﺍﺳﺖ‪.‬‬

‫‪ .۳‬ﻣﺘﻦ ﺑﺎﺯ ﻭ ﺭﺍﻳﮕﺎﻥ ﺍﺳﺖ‪.‬‬

‫‪ .۴‬ﺩﺍﺭﺍﯼ ﻛﺘﺎﺑﺨﺎﻧﻪﻫﺎﯼ ﻭﺳﻴع ﻭ ﻣﺘﻨﻮﻋی ﺍﺳﺖ‪.‬‬

‫‪ .۵‬ﺭﻭﯼ ﻫﻤﻪﯼ ﺳﻴﺴﺘﻢ ﻋﺎﻣﻞﻫﺎ ﻧﻈﻴﺮ ‪ Windows‬ﻭ ‪ Mac.Os‬ﻭ ‪ Linux‬ﻛﺎﺭ ﻣیﻛﻨﺪ‪.‬‬

‫‪ُ .۶‬ﻛﺪﻫﺎﯼ ﺁﻥ ﺍﺯ ﻳﮏ ﺳﻴﺴﺘﻢ ﺑﻪ ﺳﻴﺴﺘﻢ ﺩﻳﮕﺮ ﻗﺎﺑﻞ ﺣﻤﻞ ﺍﺳﺖ‪.‬‬

‫‪ .۷‬ﺧﺎﺻﻴﺖ ﺷیﮔﺮﺍﻳﯽ ‪ ۱‬ﺩﺍﺭﺩ‪.‬‬

‫‪ .۸‬ﺭﺷﺪ ﺳﺮﻳع ﻭ ﺍﺳﺘﻔﺎﺩﻩ ﺁﻥ ﺩﺭ ﺩﻧﻴﺎ‬

‫ﺗﻤﺎﻡ ُﻛﺪﻫﺎﯼ ﺍﻳﻦ ﺟﺰﻭﻩ ﺩﺭ ﻣﺤﻴﻂ ‪ JupyterLab‬ﻧﻮﺷﺘﻪ ﻭ ﺍﺟﺮﺍ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﻭ ﺩﺭج ﺁﻧﻬﺎ ﺩﺭ ﺟﺰﻭﻩ ﻫﻢ ﺑﻪ ﻫﻤﺎﻥ‬
‫ﺻﻮﺭﺕ ﻣﺤﻴﻂ ﻳﺎﺩ ﺷﺪﻩ ﺣﺮﻭﻑﻧﮕﺎﺭﯼ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺍﺟﺮﺍﯼ ﭘﺎﺭﻩﺍﯼ ﺍﺯ ﺳﻠﻮﻝ ‪۲‬ﻫﺎ ﻧﻴﺎﺯﻣﻨﺪ ﺍﺟﺮﺍﯼ ﺳﻠﻮﻝ]ﻫﺎﯼ[‬
‫ﭘﻴﺸﻴﻦ ﺍﺳﺖ‪.‬‬
‫ﺩﺭ ﺧﺎﺗﻤﻪ ﺑﺮ ﺑﻨﺪﻩ ﻓﺮﺽ ﺍﺳﺖ ﻛﻪ ﺍﺯ ﺁﻗﺎﯼ ﻭﻓﺎ ﺧﻠﻴﻘی ﺑﺨﺎﻃﺮ ﻓﺮﺍﻫﻢ ﻧﻤﻮﺩﻥ ﺑﺴﺘﻪﯼ ﺯﯼﭘﺮﺷﻴﻦ ‪ ۳‬ﻛﻪ ﺍﻣﻜﺎﻥ ﻧﻮﺷﺘﻦ‬
‫ﻣﺘﻮﻥ ﻓﺎﺭﺳی ﺩﺭ ﻣﺤﻴﻂ لاﺗﮏ ‪ ۴‬ﺭﺍ ﺍﻳﺠﺎﺩ ﻧﻤﻮﺩﻩ ﺍﺳﺖ‪ ،‬ﺻﻤﻴﻤﺎﻧﻪ ﺳﭙﺎﺳﮕﺰﺍﺭﯼ ﻛﻨﻢ‪.‬‬
‫‪1. Object Oriented‬‬
‫‪2. Cell‬‬
‫‪3. XEPersian‬‬
‫‪4. LATEX‬‬
‫ﭖ‬
‫ﻣﺴﻠﻤ ًﺎ ﻧﻮﺷﺘﻪ ﺣﺎﺿﺮ ﺧﺎﻟی ﺍﺯ ﺧﻠﻞ ﻧﻴﺴﺖ‪ ،‬ﻧﻮﻳﺴﻨﺪﻩ ﺍﺯ ﻫﺮ ﮔﻮﻧﻪ ﺍﻇﻬﺎﺭ ﻧﻈﺮ ﻭ ﭘﻴﺸﻨﻬﺎﺩﯼ ﺑﺮﺍﯼ ﺍﺻلاﺡ ﻭ ﺍﺭﺗﻘﺎﺀ ﺁﻥ‬
‫ﺍﺳﺘﻘﺒﺎﻝ ﻭ ﺍﺳﺘﻔﺎﺩﻩ ﺧﻮﺍﻫﺪ ﻧﻤﻮﺩ‪.‬‬
‫ﻓﻬﺮﺳﺖ ﻣﻄﺎﻟﺐ‬

‫ﺡ‬ ‫ﭘﻴﺶﮔﻔﺘﺎﺭ‬

‫‪۱‬‬ ‫‪ ۱‬ﻛﻠﻴﺎﺕ ﺯﺑﺎﻥ‬


‫‪۱‬‬ ‫‪ ۱-۱‬ﻣﻘﺪﻣﻪ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۱‬‬ ‫‪ ۱-۱-۱‬ﻣﺤﺎﺳﺒﺎﺕ ﺍﻭﻟﻴﻪ ﺭﻳﺎﺿی ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۲‬‬ ‫‪ ۲-۱-۱‬ﺍﻧﻮﺍﻉ ﺩﺍﺩﻩﻫﺎ ﻳﺎ ﻣﻘﺎﺩﻳﺮ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۳‬‬ ‫‪ ۱-۲-۱-۱‬ﺍﻭﻟﻮﻳﺖ ﺍﺟﺮﺍﯼ ﻋﻤﻠﻴﺎﺕ ‪. . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۴‬‬ ‫‪ ۳-۱-۱‬ﻣﺘﻐﻴﺮ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶‬‬ ‫‪ ۴-۱-۱‬ﻋﻤﻠﮕﺮﻫﺎ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶‬‬ ‫‪ ۱-۴-۱-۱‬ﻋﻤﻠﮕﺮﻫﺎﯼ ﺣﺴﺎﺑﯽ ‪. . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۷‬‬ ‫‪ ۲-۴-۱-۱‬ﻋﻤﻠﮕﺮﻫﺎﯼ ﻣﻘﺎﻳﺴﻪﺍﯼ ‪. . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۷‬‬ ‫‪ ۳-۴-۱-۱‬ﻋﻤﻠﮕﺮﻫﺎﯼ ﺑﻮﻟی ‪. . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۹‬‬ ‫‪ ۵-۱-۱‬ﺗﺎﺑع )(‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . input‬‬
‫‪۱۰‬‬ ‫‪ ۶-۱-۱‬ﻧﻮﺷﺘﻦ ﻳﺎﺩﺩﺍﺷﺖ ﺑﺮﺍﯼ ﺗﻮﺿﻴح ‪. . . . . . . . . . . . . . . . . . . . . . . . .‬‬

‫‪۱۲‬‬ ‫‪ ۲‬ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬


‫‪۱۲‬‬ ‫‪ ۱-۲‬ﻣﻘﺪﻣﻪ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۱۲‬‬ ‫‪ ۲-۲‬ﺷﺮﻁ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۱۴‬‬ ‫‪ ۱-۲-۲‬ﺷﺮﻁﻫﺎﯼ ﺗﻮ ﺩﺭ ﺗﻮ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۱۵‬‬ ‫‪ ۲-۲-۲‬ﺩﺳﺘﻮﺭ ﺷﺮﻁﻫﺎﯼ ﻣﻔﺼﻞ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬

‫ﺕ‬
‫ﺙ‬
‫‪۱۶ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬ ‫‪ ۳-۲‬ﺣﻠﻘﻪ ‪. .‬‬
‫ﺣﻠﻘﻪ ﺑﺎ ﺩﺳﺘﻮﺭ ‪۱۶ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . while‬‬ ‫‪۱-۳-۲‬‬
‫ﺩﻭ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪ break‬ﻭ ‪۱۹ . . . . . . . . . . . . . . . . . . . . . . . continue‬‬ ‫‪۲-۳-۲‬‬
‫ﺑﻠﻮﮎ ‪ else‬ﺩﺭ ﺣﻠﻘﻪ ‪۲۰ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬ ‫‪۳-۳-۲‬‬
‫ﻣﻔﻬﻮﻡ ‪ flag‬ﺩﺭ ﺣﻠﻘﻪ ‪۲۱ . . . . . . . . . . . . . . . . . . . . . . . . . . while‬‬ ‫‪۴-۳-۲‬‬
‫ﺣﻠﻘﻪ ﺑﺎ ﺩﺳﺘﻮﺭ ‪۲۱ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . for‬‬ ‫‪۵-۳-۲‬‬
‫‪ ۱-۵-۳-۲‬ﺗﺎﺑع )(‪۲۲ . . . . . . . . . . . . . . . . . . . . . . . . . . range‬‬
‫ﺣﻠﻘﻪﻫﺎﯼ ﺗﻮ ﺩﺭ ﺗﻮ ‪۲۴ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬ ‫‪۶-۳-۲‬‬
‫‪ ۱-۶-۳-۲‬ﻓﺮﻣﺖﻫﺎ ‪۲۵ . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪ ۲-۶-۳-۲‬ﻭﺍﺭﺩ ﻛﺮﺩﻥ ﻣﺎﮊﻭﻝ ﺩﺭ ﭘﺎﻳﺘﻮﻥ ‪۲۸ . . . . . . . . . . . . . . . . . . . .‬‬

‫‪۳۰‬‬ ‫‪ ۳‬ﺗﻮﺍﺑع ﺩﺭ ﭘﺎﻳﺘﻮﻥ‬


‫‪ ۱-۳‬ﻣﻘﺪﻣﻪ ‪۳۰ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪ ۲-۳‬ﺗﻮﺍﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻛﺎﺭﺑﺮ ‪۳۱ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪ ۱-۲-۳‬ﻣﻘﺪﺍﺭ ‪۳۲ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . None‬‬
‫‪ ۱-۱-۲-۳‬ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪۳۳ . . . . . . . . . . . . . . . . . . . . . . . . . return‬‬
‫‪ ۲-۱-۲-۳‬ﻓﺮﺍﺧﻮﺍﻧی ﻳﮏ ﺗﺎﺑع ﺩﺍﺧﻞ ﺗﺎﺑع ﺩﻳﮕﺮ ‪۳۴ . . . . . . . . . . . . . . . .‬‬
‫‪ ۲-۲-۳‬ﻧﺤﻮﻩ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻦ ﻭ ﺗﺮﺗﻴﺐ ﺁﺭﮔﻮﻣﺎﻥﻫﺎ ‪۳۵ . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪ ۳-۲-۳‬ﻧﺤﻮﻩ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻣﻘﺎﺩﻳﺮ ﭘﻴﺶﻓﺮﺽ ﺩﺭ ﺁﺭﮔﻮﻣﺎﻥ ﺗﻮﺍﺑع ‪۳۵ . . . . . . . . . . . . . .‬‬
‫‪ ۱-۳-۲-۳‬ﺁﺭﮔﻮﻣﺎﻥﻫﺎﯼ ﺍﺧﺘﻴﺎﺭﯼ ﺗﺎﺑع ‪۳۸ . . . . . . . . . . . . . . . . . print‬‬
‫‪ ۴-۲-۳‬ﻣﺘﻐﻴﺮﻫﺎﯼ ﻣﺤﻠی ﻭ ﺟﻬﺎﻧی ‪۳۹ . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬

‫‪۴۳‬‬ ‫‪ ۴‬ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬


‫‪۴۳‬‬ ‫‪ ۱-۴‬ﻣﻘﺪﻣﻪ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۴۴‬‬ ‫‪ ۲-۴‬ﻟﻴﺴﺖ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۴۴‬‬ ‫‪ ۱-۲-۴‬ﺩﺳﺘﺮﺳی ﺑﻪ ﻣﻘﺎﺩﻳﺮ ﻟﻴﺴﺖ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻧﺪﻳﺲ ‪. . . . . . . . . . . . . . . . .‬‬
‫‪۴۶‬‬ ‫‪ ۱-۱-۲-۴‬ﺍﻧﺪﻳﺲ ﻣﻨﻔی ‪. . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۴۶‬‬ ‫‪ ۲-۱-۲-۴‬ﺯﻳﺮﻟﻴﺴﺖﻫﺎ ﻭ ﺑﺮﺵ ‪. . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۴۷‬‬ ‫‪ ۳-۱-۲-۴‬ﺗﻐﻴﻴﺮ ﻣﻘﺎﺩﻳﺮ ﻟﻴﺴﺖ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻧﺪﻳﺲﻫﺎ ‪. . . . . . . . . . . . .‬‬
‫‪۴۸‬‬ ‫‪ ۴-۱-۲-۴‬ﺟﻤﻊ ﻭ ﺿﺮﺏ ﺩﺭ ﻟﻴﺴﺖﻫﺎ ‪. . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۴۸‬‬ ‫‪ ۲-۲-۴‬ﺍﻓﺰﻭﺩﻥ ﻋﻨﺎﺻﺮ ﺟﺪﻳﺪ ﺑﻪ ﻟﻴﺴﺖ ‪. . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۴۹‬‬ ‫‪ ۳-۲-۴‬ﺣﺬﻑ ﺍﻋﻀﺎﯼ ﻟﻴﺴﺖ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۵۱‬‬ ‫‪ ۴-۲-۴‬ﺳﺎﻣﺎﻥ ﺩﺍﺩﻥ ﺑﻪ ﻟﻴﺴﺖ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۵۲‬‬ ‫‪ ۵-۲-۴‬ﺩﺭﺳﺖ ﻛﺮﺩﻥ ﻟﻴﺴﺖ ﺑﺎ ﺗﺎﺑع ‪. . . . . . . . . . . . . . . . . . . . . . . range‬‬
‫ﺝ‬
‫‪۵۲‬‬ ‫‪ ۶-۲-۴‬ﻛﭙﯽ ﻛﺮﺩﻥ ﻟﻴﺴﺖ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۵۴‬‬ ‫‪ ۱-۶-۲-۴‬ﭘﻴﻤﺎﻳﺶ ﻟﻴﺴﺖ ﺗﻮﺳﻂ ﺣﻠﻘﻪ ‪. . . . . . . . . . . . . . . . . . . .‬‬
‫‪۵۴‬‬ ‫ﭼﻨﺪﺗﺎﻳﯽ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬ ‫‪۳-۴‬‬
‫‪۵۴‬‬ ‫‪ ۱-۳-۴‬ﺗﻌﺮﻳﻒ ﭼﻨﺪﺗﺎﻳﯽ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۵۵‬‬ ‫ﺭﺷﺘﻪﻫﺎ ﻭ ﺭﻭﺵﻫﺎ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬ ‫‪۴-۴‬‬
‫‪۵۶‬‬ ‫‪ ۱-۴-۴‬ﺭﻭﺵﻫﺎ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۵۸‬‬ ‫‪ ۲-۴-۴‬ﺗﺒﺪﻳﻞ ﺭﺷﺘﻪ ﺑﻪ ﻟﻴﺴﺖ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۵۹‬‬ ‫ﺩﻳﻜﺸﻨﺮﯼ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬ ‫‪۵-۴‬‬
‫‪۵۹‬‬ ‫‪ ۱-۵-۴‬ﺗﺮﺗﻴﺐ ﺩﺭ ﻟﻴﺴﺖ ﻭ ﺩﻳﻜﺸﻨﺮﯼ ‪. . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶۰‬‬ ‫‪ ۲-۵-۴‬ﻭﻳﺮﺍﻳﺶ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶۱‬‬ ‫‪ ۳-۵-۴‬ﺯﻭجﻫﺎﯼ ﻛﻠﻴﺪ‪-‬ﻣﻘﺪﺍﺭ ﺩﺭ ﺣﻠﻘﻪ ‪. . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶۳‬‬ ‫‪ ۴-۵-۴‬ﺍﻳﺠﺎﺩ ﺩﻳﻜﺸﻨﺮﯼ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﺎﺑع )(‪. . . . . . . . . . . . . . . . . . . dict‬‬
‫‪۶۳‬‬ ‫‪ ۵-۵-۴‬ﺩﺭﻫﻢ ﺷﺪﮔی ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶۳‬‬ ‫‪ ۱-۵-۵-۴‬ﻟﻴﺴﺘی ﺍﺯ ﺩﻳﻜﺸﻨﺮﯼﻫﺎ ‪. . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶۴‬‬ ‫‪ ۲-۵-۵-۴‬ﻟﻴﺴﺖ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ ‪. . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶۵‬‬ ‫‪ ۳-۵-۵-۴‬ﺩﻳﻜﺸﻨﺮﯼ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ ‪. . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶۷‬‬ ‫ﻣﺠﻤﻮﻋﻪ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬ ‫‪۶-۴‬‬

‫‪۶۹‬‬ ‫‪ ۵‬ﻋﻤﻠﻴﺎﺕ ﺭﻭﯼ ﻓﺎﻳﻞﻫﺎ ﻭ ﻣﺪﻳﺮﻳﺖ ﺧﻄﺎﻫﺎ‬


‫‪۶۹‬‬ ‫‪ ۱-۵‬ﻣﻘﺪﻣﻪ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۶۹‬‬ ‫‪ ۲-۵‬ﻧﺤﻮﮤ ﺩﺳﺘﺮﺳی ﺑﻪ ﻓﺎﻳﻞﻫﺎ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۷۰‬‬ ‫‪ ۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۷۰‬‬ ‫‪ ۱-۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ ‪. . . . . . . . . . . . . . . . . . . . . read‬‬
‫‪۷۱‬‬ ‫‪ ۲-۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ ‪. . . . . . . . . . . . . . . . . . . readline‬‬
‫‪۷۳‬‬ ‫‪ ۳-۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ ‪. . . . . . . . . . . . . . . . . . readlines‬‬
‫‪۷۴‬‬ ‫‪ ۴-۳-۵‬ﻣﺤﻴﻂ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . with‬‬
‫‪۷۵‬‬ ‫‪ ۵-۳-۵‬ﻧﺴﺒﺖ ﺩﺍﺩﻥ ﻣﺤﺘﻮﯼ ﻓﺎﻳﻞ ﺑﻪ ﻳﮏ ﻣﺘﻐﻴﺮ ‪. . . . . . . . . . . . . . . . . . . .‬‬
‫‪۷۶‬‬ ‫‪ ۴-۵‬ﻧﻮﺷﺘﻦ ﺭﻭﯼ ﻓﺎﻳﻞ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۷۷‬‬ ‫‪ ۵-۵‬ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﺍﻃلاﻋﺎﺕ ﺑﻪ ﺍﻧﺘﻬﺎﯼ ﻳﮏ ﻓﺎﻳﻞ ‪. . . . . . . . . . . . . . . . . . . . . . .‬‬
‫‪۷۸‬‬ ‫‪ ۶-۵‬ﺣﺎﻟﺖﻫﺎﯼ ﺗﺮﻛﻴﺒﯽ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﻭ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ‪. . . . . . . . . . . . . . . . . . .‬‬
‫‪۸۱‬‬ ‫‪ ۷-۵‬ﻋﻤﻠﻴﺎﺕ ﺑﺎ ﻓﺎﻳﻞﻫﺎ ﺑﺎ ﭘﺴﻮﻧﺪ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . CSV‬‬
‫ﻓﻬﺮﺳﺖ ﺷﻜﻞﻫﺎ‬

‫‪۱۳‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫ﺭﻭﻧﺪﻧﻤﺎﯼ ﺑﻠﻮﮎ ‪. . . . if-else‬‬ ‫‪۱-۲‬‬
‫‪۱۴‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫ﺭﻭﻧﺪﻧﻤﺎﯼ ﺷﺮﻁ ﺗﻮ ﺩﺭ ﺗﻮ ‪if-else‬‬ ‫‪۲-۲‬‬
‫‪۱۵‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫ﺭﻭﻧﺪﻧﻤﺎﯼ ﺷﺮﻁ ‪. . . . . . elif‬‬ ‫‪۳-۲‬‬
‫‪۱۶‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫‪.‬‬ ‫ﺭﻭﻧﺪﻧﻤﺎﯼ ﺣﻠﻘﻪ ‪. . . . . . . .‬‬ ‫‪۴-۲‬‬

‫ﭺ‬
‫ﻓﻬﺮﺳﺖ ﺟﺪﻭﻝﻫﺎ‬

‫‪۷‬‬ ‫‪ ۱-۱‬ﻋﻤﻠﮕﺮﻫﺎﯼ ﻣﻘﺎﻳﺴﻪﺍﯼ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬

‫‪۷۸‬‬ ‫‪ ۱-۵‬ﺣﺎلاﺕ ﻣﺨﺘﻠﻒ ﺑﺎﺯ ﻛﺮﺩﻥ ﻓﺎﻳﻞﻫﺎ ‪. . . . . . . . . . . . . . . . . . . . . . . . . . . .‬‬

‫ﺡ‬
‫���‬

‫‪۱‬‬
‫ﻛﻠﻴﺎﺕ ﺯﺑﺎﻥ‬

‫ﻣﻘﺪﻣﻪ‬ ‫‪۱-۱‬‬
‫ﺩﺭ ﺍﻳﻦ ﻓﺼﻞ ﻣﻮﺍﺭﺩ ﺍﻭﻟﻴﻪ ﺯﺑﺎﻥ ﺁﻭﺭﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﻛﻪ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ‪:‬‬

‫• ﻣﺤﺎﺳﺒﺎﺕ ﺍﻭﻟﻴﻪ ﺭﻳﺎﺿی‬

‫• ﺍﻧﻮﺍﻉ ﺩﺍﺩﻩﻫﺎ ﻳﺎ ﻣﻘﺎﺩﻳﺮ‬

‫• ﻣﻌﺮﻓی ﻣﺘﻐﻴﺮ‪ ،‬ﻋﺒﺎﺭﺕ‬

‫• ﻣﻌﺮﻓی ﻋﻤﻠﮕﺮﻫﺎ‬

‫ﻣﺤﺎﺳﺒﺎﺕ ﺍﻭﻟﻴﻪ ﺭﻳﺎﺿی‬ ‫‪۱-۱-۱‬‬


‫ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﻣیﺗﻮﺍﻥ ﭼﻬﺎﺭ ﻋﻤﻞ ﺍﺻﻠی ﻭ ﺗﻮﺍﻥ ﺭﺍ ﻣﺜﻞ ﻳﮏ ﻣﺎﺷﻴﻦ ﺣﺴﺎﺏ ﻣﺤﺎﺳﺒﻪ ﻧﻤﻮﺩ‪ .‬ﺑﺮﺍﯼ ﺟﻤﻊ ﺍﺯ ﻋلاﻣﺖ )‪،(+‬‬
‫ﺑﺮﺍﯼ ﺗﻔﺮﻳﻖ ﺍﺯ ﻋلاﻣﺖ )‪ ،(-‬ﺑﺮﺍﯼ ﻋﻤﻞ ﺿﺮﺏ ﺍﺯ ﻋلاﻣﺖ )∗( ﻭ ﺑﺮﺍﯼ ﺗﻘﺴﻴﻢ ﺍﺯ ﻋلاﻣﺖ )‪ (/‬ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﺑﻪ‬
‫ﭼﻨﺪ ﻣﺜﺎﻝ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫‪In [1]:‬‬ ‫‪4+5‬‬
‫‪5 -7‬‬
‫‪3*5‬‬
‫‪5/4‬‬
‫‪9/3‬‬

‫‪۱‬‬
‫‪ .۱-۱‬ﻣﻘﺪﻣﻪ‬ ‫‪۲‬‬
‫‪Out[1]:‬‬ ‫‪9‬‬
‫‪-2‬‬
‫‪15‬‬
‫‪1.25‬‬
‫‪3.0‬‬

‫ﺗﻮﺟﻪ‪ :‬ﺣﺎﺻﻞ ﺗﻘﺴﻴﻢ ﺩﺭ ﻫﻤﻪ ﺣﺎﻟﺖﻫﺎ‪ ،‬ﻋﺪﺩ ﺍﻋﺸﺎﺭﯼ ﺍﺳﺖ‪.‬‬


‫ﺑﺮﺍﯼ ﻧﺸﺎﻥ ﺩﺍﺩﻥ ﻧﺘﻴﺠﻪ ﺍﺟﺮﺍﯼ ُﻛﺪﻫﺎ ﺭﻭﯼ ﺻﻔﺤﮥ ﻧﻤﺎﻳﺶ ﻣیﺗﻮﺍﻥ ﺍﺯ ﺗﺎﺑع )(‪ print‬ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ‪.‬‬
‫ﺩﺭ ﻣﻮﺭﺩ ﺗﻘﺴﻴﻢ ﺩﻭ ﻋﻤﻠﮕﺮ )‪ (//‬ﻭ )‪ (%‬ﻫﻢ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ .‬ﺍﻭﻟی ﻗﺴﻤﺖ ﺻﺤﻴح ﻋﻤﻞ ﺗﻘﺴﻴﻢ ﻭ ﺩﻭﻣی ﺑﺎﻗﻴﻤﺎﻧﺪﻩ ﺗﻘﺴﻴﻢ‬
‫ﺭﺍ ﺑﺪﺳﺖ ﻣیﺩﻫﺪ‪ .‬ﻣﺘﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫)‪print (17/5‬‬
‫)‪print (17//5‬‬
‫)‪print (17%5‬‬

‫‪Out[1]:‬‬ ‫‪3.4‬‬
‫‪3‬‬
‫‪2‬‬

‫ﻭ ﺍﮔﺮ ﻣﻘﺪﺍﺭ ‪ −۱۷٫۵‬ﺭﺍ ﻗﺮﺍﺭ ﺩﻫﻴﻢ‪ ،‬ﻧﺘﻴﺠﻪ ﻣیﺷﻮﺩ‪.‬‬


‫‪In [2]:‬‬ ‫)‪print ( -17/5‬‬
‫)‪print ( -17//5‬‬
‫)‪print ( -17%5‬‬

‫‪Out[2]:‬‬ ‫‪-3.4‬‬
‫‪-4‬‬
‫‪3‬‬

‫ﺑﺮﺍﯼ ﻋلاﻣﺖ ﺗﻮﺍﻥ ﺍﺯ )∗∗( ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪.‬‬


‫‪In [3]:‬‬ ‫‪5**3‬‬

‫‪Out[3]:‬‬ ‫‪125‬‬

‫‪ ۲-۱-۱‬ﺍﻧﻮﺍﻉ ﺩﺍﺩﻩﻫﺎ ﻳﺎ ﻣﻘﺎﺩﻳﺮ‬


‫ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﺩﻭ ﺩﺳﺘﻪ ﺩﺍﺩﻩ ﺩﺍﺭﻳﻢ‪ .‬ﺩﺍﺩﻩﻫﺎﯼ ﻋﺪﺩﯼ ﻭ ﺩﺍﺩﻩﻫﺎﯼ ﻏﻴﺮ ﻋﺪﺩﯼ‪ .‬ﺩﺍﺩﻩﻫﺎﯼ ﻋﺪﺩﯼ ﺳﻪ ﻧﻮع ‪ ۱‬ﻫﺴﺘﻨﺪ‪.‬‬
‫ﺻﺤﻴح ‪۲‬‬ ‫•‬

‫• ﺍﻋﺸﺎﺭﯼ ‪ ۳‬ﻳﺎ ﺩﺍﺭﺍﯼ ﻧﻘﻄﻪ ﺍﻋﺸﺎﺭ‬


‫‪1. type‬‬
‫‪2. integer‬‬
‫‪3. float‬‬
‫‪۳‬‬ ‫ﻓﺼﻞ ‪ .۱‬ﻛﻠﻴﺎﺕ ﺯﺑﺎﻥ‬
‫• ﻣﺨﺘﻠﻂ ‪۱‬‬

‫ﻭ ﺩﺍﺩﻩﻫﺎﯼ ﻏﻴﺮ ﻋﺪﺩﯼ‬

‫ﺭﺷﺘﻪ ‪۲‬‬ ‫•‬

‫ﺑﻮﻟی ‪۳‬‬ ‫•‬

‫ﺩﺭ ﻣﻮﺭﺩ ﺩﺍﺩﻩﻫﺎﯼ ﻋﺪﺩﯼ‪ ،‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ‪ ۲۳‬ﻳﮏ ﻋﺪﺩ ﺻﺤﻴح ﻭ ‪ ۷٫۷‬ﻳﮏ ﻋﺪﺩ ﺍﻋﺸﺎﺭﯼ ﺍﺳﺖ‪ .‬ﻋﺪﺩ ‪ ۵.‬ﺩﺍﺭﺍﯼ‬
‫ﻧﻘﻄﻪ ﺍﻋﺸﺎﺭ ﺍﺳﺖ‪ ،‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻋﺪﺩ ﺍﻋﺸﺎﺭﯼ ﻣﺤﺴﻮﺏ ﻣیﺷﻮﺩ‪.‬‬
‫ﻓﺮﻡ ﻛﻠی ﻋﺪﺩ ﻣﺨﺘﻠﻂ ﺑﻪ ﺻﻮﺭﺕ ‪ x + y j‬ﺍﺳﺖ‪ .‬ﻗﺴﻤﺖ ﻣﻮﻫﻮﻣی ﻋﺪﺩ ﻫﻤﺎﻥ ﻣﺆﻟﻔﻪﺍﯼ ﺍﺳﺖ ﺣﺮﻑ ‪ j‬ﺭﺍ ﺩﺍﺭﺩ‪.‬‬
‫ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﺗﺎﺑﻌی ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﻧﻮع ﺩﺍﺩﻩﻫﺎ ﺭﺍ ﻣﺸﺨﺺ ﻣیﻛﻨﺪ‪ .‬ﺍﻳﻦ ﺗﺎﺑع ﺑﻪ ﺻﻮﺭﺕ )(‪ type‬ﺍﺳﺖ‪ .‬ﺍﻛﻨﻮﻥ ﺑﻪ ﭼﻨﺪ‬
‫ﻣﺜﺎﻝ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫‪In [1]:‬‬ ‫))‪print ( type (5‬‬

‫‪Out[1]:‬‬ ‫>' ‪<class 'int‬‬

‫‪In [2]:‬‬ ‫))‪print ( type (7.7‬‬

‫‪Out[2]:‬‬ ‫>' ‪<class 'float‬‬

‫‪In [3]:‬‬ ‫))‪print ( type (2+3 j‬‬

‫‪Out[3]:‬‬ ‫>' ‪<class ' complex‬‬

‫‪ ۱-۲-۱-۱‬ﺍﻭﻟﻮﻳﺖ ﺍﺟﺮﺍﯼ ﻋﻤﻠﻴﺎﺕ‬

‫ﺍﻭﻟﻮﻳﺖ ﺍﻭﻝ ﺍﻧﺠﺎﻡ ﻋﻤﻠﻴﺎﺕ ﭘﺮﺍﻧﺘﺰ ﺍﺳﺖ‪ .‬ﺳﭙﺲ ﺗﻮﺍﻥ ﻭ ﺑﻌﺪ ﺿﺮﺏ ﻭ ﺗﻘﺴﻴﻢ ﻭ ﺳﺮﺍﻧﺠﺎﻡ ﺟﻤﻊ ﻭ ﺗﻔﺮﻳﻖ ﺍﺳﺖ‪ .‬ﺑﻪ‬
‫ﭼﻨﺪ ﻣﺜﺎﻝ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫‪In [4]:‬‬ ‫‪3+26 -2*3**2‬‬

‫‪Out[4]:‬‬ ‫‪11‬‬

‫‪In [5]:‬‬ ‫)‪print (4+12/2+3‬‬


‫))‪print (4+12/(2+3‬‬

‫‪Out[5]:‬‬ ‫‪13.0‬‬
‫‪6.4‬‬

‫‪1. complex‬‬
‫‪2. string‬‬
‫‪3. boolean‬‬
‫‪ .۱-۱‬ﻣﻘﺪﻣﻪ‬ ‫‪۴‬‬
‫ﺩﺭ ﻣﻮﺭﺩ ﺩﺍﺩﻩﻫﺎﯼ ﻏﻴﺮ ﻋﺪﺩﯼ ﺑﺎﻳﺪ ﺑﻪ ﺭﺷﺘﻪ ﺍﺷﺎﺭﻩ ﻧﻤﻮﺩ‪ .‬ﺭﺷﺘﻪﻫﺎ ﻣﺠﻤﻮﻋﻪﺍﯼ ﺍﺯ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﻫﺴﺘﻨﺪ ﻛﻪ ﺩﺍﺧﻞ )' '(‬
‫ﻭ ﻳﺎ )" "( ﻗﺮﺍﺭ ﻣیﮔﻴﺮﻧﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫)"! ‪print (" Hello world‬‬
‫)'‪print (' welcome to python learning .‬‬

‫‪Out[1]:‬‬ ‫! ‪Hello world‬‬


‫‪welcome to python learning .‬‬

‫ﺗﻮﺟﻪ‪ :‬ﺍﮔﺮ ﺩﺍﺧﻞ ﻛﺎﺭﺍﻛﺘﺮﻫﺎﯼ ﺭﺷﺘﻪ ﻋلاﻣﺖ ﺁﺳﭙﺎﺳﺘﺮﻑ ﺑﻮﺩ‪ ،‬ﺑﺎﻳﺪ ﺍﺯ ﻛﻮﺗﻴﺸﻦ ﺩﻭﺗﺎﻳﯽ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ‪ .‬ﻭ ﻳﺎ ﺍﮔﺮ‬
‫ﺩﺍﺧﻞ ﻛﺎﺭﺍﻛﺘﺮﻫﺎﯼ ﺩﺍﺧﻞ ﺭﺷﺘﻪ ﻋلاﻣﺖ )"( ﺑﻮﺩ‪ ،‬ﺑﺎﻳﺪ ﺍﺯ ﻳﮏ ﻛﻮﺗﻴﺸﻦ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫)"‪print ("I'm student .‬‬
‫)'‪print ('It is the " special " book .‬‬

‫‪Out[2]:‬‬ ‫‪I'm student .‬‬


‫‪It is the " special " book .‬‬

‫ﻣﻮﺭﺩ ﺩﻭﻡ ﺩﺍﺩﻩﻫﺎﯼ ﻏﻴﺮ ﻋﺪﺩﯼ‪ ،‬ﺩﺍﺩﻩﻫﺎﯼ ﺑﻮﻟی ﺍﺳﺖ ﻛﻪ ﻓﻘﻂ ﺩﻭ ﻣﻘﺪﺍﺭ ﻣیﭘﺬﻳﺮﺩ‪ ،‬ﺩﺭﺳﺖ )‪ (True‬ﻭ ﻳﺎ ﻏﻠﻂ‬
‫)‪ (False‬ﺣﺮﻑ ﺍﻭﻝ ﺁﻧﻬﺎ ﺣﺘﻤ ًﺎ ﺑﺎﻳﺪ ﺑﺰﺭﮒ ﺑﺎﺷﺪ‪ .‬ﻣﺜﺎﻝ ﺁﻧﻬﺎ ﺭﺍ ﺩﺭ ﺍﺩﺍﻣﻪ ﻣﺸﺎﻫﺪﻩ ﺧﻮﺍﻫﻴﺪ ﻧﻤﻮﺩ‪.‬‬

‫ﻣﺘﻐﻴﺮ‬ ‫‪۳-۱-۱‬‬
‫ﺩﺭ ﺍﺟﺮﺍﯼ ﻋﻤﻠﻴﺎﺕ ﻧﺘﺎﺑج ﺩﺭ ﺟﺎﻳﯽ ﺫﺧﻴﺮﻩ ﻧﻤیﺷﻮﺩ ﻭ ﭼﻨﺎﻧﭽﻪ ﺑﻌﺪ ًﺍ ﺑﻪ ﺁﻧﻬﺎ ﻧﻴﺎﺯ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﻢ ﻣﺠﺪﺩﺍ ﺑﺎﻳﺪ ﻋﻤﻠﻴﺎﺕ‬
‫ﺭﺍ ﺗﻜﺮﺍﺭ ﻧﻤﻮﺩ ﻭ ﺍﻳﻦ ﻋﻤل ًا ﺍﺩﺍﻣﻪ ﻛﺎﺭ ﺭﺍ ﻧﺎ ﻣﻤﻜﻦ ﻣیﺳﺎﺯﺩ ﻣﮕﺮ ﺁﻥ ﻛﻪ ﺑﺘﻮﺍﻧﻴﻢ ﺁﻧﻬﺎ ﺭﺍ ﺩﺭ ﺣﺎﻓﻈﻪ ﺩﺧﻴﺮﻩ ﻛﻨﻴﻢ‪ .‬ﺑﺮﺍﯼ‬
‫ﺍﻳﻦ ﻛﺎﺭ ﺑﺎﻳﺪ ﺍﺯ ﻣﺘﻐﻴﺮ ‪۱‬ﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ‪ .‬ﺑﻪ ﻃﻮﺭ ﺳﺎﺩﻩ ﻣﺘﻐﻴﺮ‪ ،‬ﻣﺤﻠی ﺍﺯ ﺣﺎﻓﻈﻪ ﺍﺳﺖ ﻛﻪ ﻧﺘﺎﻳح ﻣﻮﺭﺩ ﻧﻄﺮ ﺩﺭ ﺁﻥ‬
‫ﺫﺧﻴﺮﻩ ﻣیﺷﻮﺩ‪.‬‬
‫ﻣﺘﻐﻴﺮﻫﺎ ﺳﻪ ﻭﻳﮋﮔی ﺩﺍﺭﻧﺪ‪ .‬ﻧﺎﻡ‪ ،‬ﻣﻘﺪﺍﺭ ﻭ ﻧﻮع‪ .‬ﻧﺎﻡﮔﺬﺍﺭﯼ ﺁﻧﻬﺎ ﺍﺯ ﻗﻮﺍﻋﺪ ﺯﻳﺮ ﭘﻴﺮﻭﯼ ﻣیﻛﻨﺪ‪.‬‬

‫‪ .۱‬ﺍﺯ ﺣﺮﻭﻑ ﺍﻟﻔﺒﺎﯼ ﺑﺰﺭﮒ ﺍﻧﮕﻠﻴﺴی ‪ A‬ﺗﺎ ‪ Z‬ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﻫﻤﭽﻨﻴﻦ ﻣیﺗﻮﺍﻥ ﺣﺮﻭﻑ ﻛﻮﭼﮏ ﺍﻧﮕﻠﻴﺴی ﺍﺯ‬
‫‪ a‬ﺗﺎ ‪ z‬ﺭﺍ ﻧﻴﺰ ﺑﻪ ﻛﺎﺭ ﮔﺮﻓﺖ‪.‬‬

‫‪ .۲‬ﻣیﺗﻮﺍﻥ ﺍﺯ ﺍﺭﻗﺎﻡ ‪ 0‬ﺗﺎ ‪ 9‬ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ‪.‬‬

‫‪ .۳‬ﺍﺯ ﺑﻴﻦ ﻛﺎﺭﺍﻛﺘﺮﻫﺎﯼ ﺧﺎﺹ ﻣﺜﻞ ﻋلاﻣﺖﻫﺎﯼ ?‪ $ ،@ ،! ،‬ﻭ … ﺗﻨﻬﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻋلاﻣﺖ ﺯﻳﺮﺧﻂ ‪ (_) ۲‬ﻣﺠﺎﺯ‬
‫ﺍﺳﺖ‪.‬‬

‫‪ .۴‬ﺍﻭﻟﻴﻦ ﻛﺎﺭﺍﻛﺘﺮ ﻧﺎﻡ ﻳﮏ ﻣﺘﻐﻴﺮ ﻧﻤیﺗﻮﺍﻧﺪ ﺍﺯ ﺍﺭﻗﺎﻡ ‪ 0‬ﺗﺎ ‪ 9‬ﺑﺎﺷﺪ‪.‬‬

‫‪ .۵‬ﺍﺯ ﺍﺳﺎﻣی ﺭﺯﺭﻭ ﺷﺪﻩ ﺩﺭ ﭘﺎﻳﺘﻮﻥ )‪ (print, type, int, float, str,...‬ﺑﺮﺍﯼ ﻧﺎﻡ ﻣﺘﻐﻴﺮﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻜﻨﻴﺪ‪.‬‬
‫‪1.‬‬
‫‪2. underscore‬‬
‫‪۵‬‬ ‫ﻓﺼﻞ ‪ .۱‬ﻛﻠﻴﺎﺕ ﺯﺑﺎﻥ‬
‫ﭼﻨﺪ ﻣﺜﺎﻝ ﺩﺭﺳﺖ ﺍﺯ ﻧﺎﻡ ﻣﺘﻐﻴﺮ‪str_ ،_List ،var_1 ،var1 :‬‬
‫ﭼﻨﺪ ﻣﺜﺎﻝ ﻏﻠﻂ ﺍﺯ ﻧﺎﻡ ﻣﺘﻐﻴﺮ‪X3(y) ،y X2 ،2X :‬‬
‫ﺗﻮﺟﻪ‪ :‬ﭘﺎﻳﺘﻮﻥ ﻧﺴﺒﺖ ﺑﻪ ﺣﺮﻭﻑ ﻛﻮﭼﮏ ﻭ ﺑﺰﺭﮒ ﺣﺴﺎﺱ ﺍﺳﺖ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻣﺘﻐﻴﺮ ‪ Tex‬ﺑﺎ ﻣﺘﻐﻴﺮ ‪ tex‬ﻳﻜﺴﺎﻥ‬
‫ﻧﻴﺴﺖ‪.‬‬
‫ﻣﺸﺨﺼﻪ ﺩﻭﻡ ﻣﺘﻐﻴﺮ ﻣﻘﺪﺍﺭﯼ ﻳﺎ ﻣﻘﺎﺩﻳﺮﯼ ﺍﺳﺖ ﻛﻪ ﺩﺭﻭﻥ ﺁﻥ ﺫﺧﻴﺮﻩ ﻣیﺷﻮﺩ‪ .‬ﺑﺮﺍﯼ ﻧﺴﺒﺖ ﺩﺍﺩﻥ ‪ ۱‬ﻳﮏ ﻳﺎ ﭼﻨﺪ ﻣﻘﺪﺍﺭ‬
‫ﺑﻪ ﻳﮏ ﻣﺘﻐﻴﺮ ﺍﺯ ﻋلاﻣﺖ )=( ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﻭ ﺑﺎلاﺧﺮﻩ ﻧﻮع ﻣﺘﻐﻴﺮ ﺑﺴﺘﮕی ﺑﻪ ﻣﻘﺪﺍﺭﯼ ﺩﺍﺭﺩ ﻛﻪ ﺩﺭ ﺁﻥ ﺟﺎﯼ‬
‫ﻣیﮔﻴﺮﺩ‪ .‬ﻳﻌﻨی ﺍﮔﺮ ﻣﻘﺪﺍﺭ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﻋﺪﺩ ﺻﺤﻴح ﺑﺎﺷﺪ‪ ،‬ﻣﺘﻐﻴﺮ ﻫﻢ ﺻﺤﻴح ﺍﺳﺖ ﻭ ﺍﮔﺮ ﻣﻘﺪﺍﺭ ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺭﺷﺘﻪ‬
‫ﺑﺎﺷﺪ‪ ،‬ﺁﻧﮕﺎﻩ ﻣﺘﻐﻴﺮ ﺍﺯ ﻧﻮع ﺭﺷﺘﻪﺍﯼ ﺍﺳﺖ‪ .‬ﺑﻪ ﭼﻨﺪ ﻣﺜﺎﻝ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫‪In [1]:‬‬ ‫‪x=4‬‬
‫)‪print (x‬‬
‫))‪print ( type (x‬‬

‫‪Out[1]:‬‬ ‫‪4‬‬
‫>' ‪<class 'int‬‬

‫‪ int‬ﻛﻮﺗﺎ ﺷﺪﻩ ﻛﻠﻤﻪ ‪ integer‬ﺑﻪ ﻣﻌﻨﺎﯼ ﺻﺤﻴح ﺍﺳﺖ‪.‬‬


‫‪In [2]:‬‬ ‫' ‪z= 'zahra‬‬
‫)‪print (z‬‬
‫))‪print ( type (z‬‬

‫‪Out[2]:‬‬ ‫‪zahra‬‬
‫>' ‪<class 'str‬‬

‫‪ str‬ﻛﻮﺗﺎ ﺷﺪﻩ ﻛﻠﻤﻪ ‪ string‬ﺑﻪ ﻣﻌﻨﺎﯼ ﺭﺷﺘﻪ ﺍﺳﺖ‪.‬‬


‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ ﻋلاﻣﺖ ﺗﺴﺎﻭﯼ )=( ﺩﺭ ﺍﻳﻨﺠﺎ ﻣﻔﻬﻮﻡ ﺭﻳﺎﺿﻴﺎﺕ ﺭﺍ ﻧﺪﺍﺭﺩ‪ .‬ﺑﺮﺍﯼ ﺭﻭﺷﻦ ﺷﺪﻥ ﺑﻪ ﻣﺜﺎﻝ‬
‫ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫‪In [3]:‬‬ ‫‪y =4.5‬‬
‫‪y=y +1‬‬
‫)‪print (y‬‬

‫‪Out[3]:‬‬ ‫‪5.5‬‬

‫ﺍﻣﺎ ﺩﺭ ﺭﻳﺎﺿﻴﺎﺕ ﻧﻤیﺗﻮﺍﻥ ﺗﺴﺎﻭﯼ ‪ y = y+1‬ﺭﺍ ﺩﺍﺷﺖ‪ ،‬ﭼﺮﺍ ﻛﻪ ‪ y‬ﺍﺯ ﻃﺮﻓﻴﻦ ﺗﺴﺎﻭﯼ ﺣﺬﻑ ﻣیﺷﻮﺩ ﻭ ﻣﻘﺪﺍﺭ ﻳﮏ‬
‫ﺑﺮﺍﺑﺮ ﺻﻔﺮ ﻣیﺷﻮﺩ ﻛﻪ ﻧﺎﺩﺭﺳﺖ ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﺩﺭ ﻛﺪ‪ ،‬ﺑﺪﻳﻦ ﻣﻌﻨی ﺍﺳﺖ ﻳﮏ ﻭﺍﺣﺪ ﺑﻪ ‪ y‬ﻗﺒﻠی ﺍﺿﺎﻓﻪ ﻛﻦ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣﻘﺪﺍﺭ‬
‫ﻣﺘﻐﻴﺮ ‪ y‬ﺗﻐﻴﻴﺮ ﻣیﻛﻨﺪ‪ .‬ﻫﻤﭽﻨﻴﻦ ﺩﺭ ﺭﻳﺎﺿﻴﺎﺕ ﻣیﺗﻮﺍﻥ ﺭﺍﺑﻄﻪﺍﯼ ﺑﻪ ﺻﻮﺭﺕ ‪ x+1=6-x‬ﺩﺍﺷﺖ‪ .‬ﺩﺭ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴی‬
‫ﺍﻳﻦ ﺭﺍﺑﻄﻪ ﻧﺎﺩﺭﺳﺖ ﺍﺳﺖ‪ ،‬ﭼﺮﺍ ﻛﻪ ﻃﺮﻑ ﭼﭗ ﺗﺴﺎﻭﯼ ﺑﺎﻳﺪ ﻣﺘﻐﻴﺮ ﺑﺎﺷﺪ‪ .‬ﻭ ‪ x+1‬ﻣﺘﻐﻴﺮ ﻧﻴﺴﺖ ﭼﻮﻥ ﻋلاﻣﺖ )‪(+‬‬
‫ﺟﺰﺀ ﻋلاﺋﻢ ﻣﺠﺎﺯ ﻧﺎﻡ ﻣﺘﻐﻴﺮ ﻧﻴﺴﺖ‪.‬‬
‫‪1. assign‬‬
‫‪ .۱-۱‬ﻣﻘﺪﻣﻪ‬ ‫‪۶‬‬
‫ﺩﺭ ﻃﻮﻝ ﻳﮏ ﺑﺮﻧﺎﻣﻪ ﻣﻤﻜﻦ ﺍﺳﺖ ﭼﻨﺪﻳﻦ ﻭ ﭼﻨﺪ ﺑﺎﺭ ﻣﻘﺪﺍﺭ ﻳﮏ ﻣﺘﻐﻴﺮ ﺗﻐﻴﻴﺮ ﻛﻨﺪ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫‪r=5‬‬
‫‪pi =3.14‬‬
‫‪area =pi*r*r‬‬
‫) ‪print ( area‬‬
‫‪pi =3.14159‬‬
‫‪area =pi*r*r‬‬
‫) ‪print ( area‬‬

‫‪Out[1]:‬‬ ‫‪78.5‬‬
‫‪78.53975‬‬

‫ﻋﺒﺎﺭﺕ ‪ ۱‬ﺗﺮﻛﻴﺒﯽ ﺍﺯ ﻣﺘﻐﻴﺮ‪ ،‬ﻋﺪﺩ ﻭ ﻋﻤﻠﮕﺮ ﺍﺳﺖ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ‪ y+z ،2∗x‬ﻭ ‪ s/t‬ﻋﺒﺎﺭﺕ ﻫﺴﺘﻨﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫‪x=4‬‬
‫‪y=5‬‬
‫‪z=x+y‬‬
‫)‪print (z,x/y‬‬

‫‪Out[2]:‬‬ ‫‪9 0.8‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﺩﺭ ﻣﺜﺎﻝ ﺑﺎلا ﻣلاﺣﻈﻪ ﻣیﻛﻨﻴﺪ‪ ،‬ﺍﻭﻝ ﺍﻳﻦ ﻛﻪ ﺗﺎﺑع )(‪ print‬ﻣیﺗﻮﺍﻧﺪ ﺑﻴﺶ ﺍﺯ ﻳﮏ ﭘﺎﺭﺍﻣﺘﺮ ﺑﮕﻴﺮﺩ ﻛﻪ‬
‫ﺑﺎﻳﺪ ﺁﻧﻬﺎ ﺭﺍ ﺑﺎ ﻛﺎﻣﺎ ﺍﺯ ﻫﻢ ﺟﺪﺍ ﻧﻤﻮﺩ‪ .‬ﺩﻳﮕﺮ ﺁﻥ ﻛﻪ ﻋلاﻭﻩ ﺑﺮ ﻣﺘﻐﻴﺮ ﻣیﺗﻮﺍﻧﺪ ﭘﺬﻳﺮﺍﯼ ﻋﺒﺎﺭﺕ ﻫﻢ ﺑﺎﺷﺪ‪ .‬ﺍﻣﺎ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﺍﺯ ﻧﺴﺒﺖ ﺩﺍﺩﻥ ﺩﺭ ﺁﻥ‪ ،‬ﺑﺎﻋﺚ ﺧﻄﺎ ﻣیﺷﻮﺩ‪.‬‬

‫‪ ۴-۱-۱‬ﻋﻤﻠﮕﺮﻫﺎ‬
‫ﺩﺭ ﺭﻳﺎﺿﻴﺎﺕ ﻭ ﻫﻤﭽﻨﻴﻦ ﺩﺭ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴی ﻛﺎﻣﭙﻴﻮﺗﺮﯼ‪ ،‬ﻋﻤﻠﮕﺮ ﻧﻮﻋی ﻛﺎﺭﺍﻛﺘﺮ ﺑﻪ ﺣﺴﺎﺏ ﻣیﺁﻳﺪ ﻛﻪ ﻧﺸﺎﻥ ﺩﻫﻨﺪﻩ‬
‫ﻳﮏ ﻋﻤﻞ ﺍﺳﺖ‪ .‬ﻋﻤﻠﮕﺮ ‪۲‬ﻫﺎ ﺑﻪ ﺩﺳﺘﻪ ﺭﺍﻳج ﺗﻘﺴﻴﻢ ﻣیﺷﻮﺩ‪.‬‬

‫‪ .۱‬ﺣﺴﺎﺑﯽ ﻳﺎ ﺭﻳﺎﺿی‬

‫‪ .۲‬ﻧﺴﺒﯽ ﻳﺎ ﻣﻘﺎﻳﺴﻪﺍﯼ‬

‫‪ .۳‬ﺑﻮﻟی‬

‫‪ ۱-۴-۱-۱‬ﻋﻤﻠﮕﺮﻫﺎﯼ ﺣﺴﺎﺑﯽ‬

‫ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫﺎ )ﺟﻤﻊ‪ ،‬ﺗﻔﺮﻳﻖ‪ ،‬ﺿﺮﺏ‪ ،‬ﺗﻘﻴﺴﻢ ﻭ ﺗﻮﺍﻥ( ﻣﺤﺎﺳﺒﺎﺕ ﻣﻌﻤﻮﻝ ﺭﻳﺎﺿی ﺭﺍ ﻧﺸﺎﻥ ﻣیﺩﻫﻨﺪ‪ .‬ﻣﺜﻞ‪∗∗, /, ∗, −, + :‬‬
‫ﻛﻪ ﻗﺒل ًا ﺷﺮح ﺁﻧﻬﺎ ﺁﻣﺪ‪.‬‬
‫‪1. experssion‬‬
‫‪2. operator‬‬
‫‪۷‬‬ ‫ﻓﺼﻞ ‪ .۱‬ﻛﻠﻴﺎﺕ ﺯﺑﺎﻥ‬
‫‪ ۲-۴-۱-۱‬ﻋﻤﻠﮕﺮﻫﺎﯼ ﻣﻘﺎﻳﺴﻪﺍﯼ‬

‫ﺷﺮح ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫﺎ ﺩﺭ ﺟﺪﻭﻝ ﺯﻳﺮ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬

‫ﺟﺪﻭﻝ ‪ :۱-۱‬ﻋﻤﻠﮕﺮﻫﺎﯼ ﻣﻘﺎﻳﺴﻪﺍﯼ‬


‫ﻋلاﻣﺖ ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﻋلاﻣﺖ ﺩﺭ ﺭﻳﺎﺿﻴﺎﺕ‬
‫>‬ ‫>‬
‫≥‬ ‫=>‬
‫<‬ ‫<‬
‫≤‬ ‫=<‬
‫=‬ ‫==‬
‫≠‬ ‫=!‬

‫‪In [1]:‬‬ ‫‪x= -3‬‬


‫‪y=1‬‬
‫‪z=x>y‬‬
‫)‪print (x ==7‬‬
‫)‪print (y>x‬‬
‫)‪print (z‬‬
‫)‪print (y !=x‬‬

‫‪Out[1]:‬‬ ‫‪False‬‬
‫‪True‬‬
‫‪False‬‬
‫‪True‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣلاﺣﻈﻪ ﻣیﺷﻮﺩ‪ .‬ﭘﺎﺳﺦ ﻋﻤﻠﮕﺮﻫﺎﯼ ﻣﻘﺎﻳﺴﻪﺍﯼ ﻋﺪﺩ ﻧﻴﺴﺖ‪ ،‬ﺑﻠﻜﻪ ﻣﻘﺎﺩﻳﺮ ﺑﻮﻟی ﻳﻌﻨی ‪ True‬ﻭ ﻳﺎ‬
‫‪ False‬ﺍﺳﺖ‪.‬‬

‫‪ ۳-۴-۱-۱‬ﻋﻤﻠﮕﺮﻫﺎﯼ ﺑﻮﻟی‬

‫ﺍﻳﻦ ﻋﻤﻠﮕﺮﻫﺎ ﺩﺭ ﻣﻮﺭﺩ ﻣﻘﺎﺩﻳﺮ ﻳﺎ ﻣﺘﻐﻴﺮﻫﺎﯼ ﺑﻮﻟی ﺑﻪ ﻛﺎﺭ ﮔﺮﻓﺘﻪ ﻣیﺷﻮﺩ‪ .‬ﻭ ﺁﻧﻬﺎ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ‪ and, or, not :‬ﻫﺴﺘﻨﺪ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫)‪print (z or y!=x‬‬
‫)‪print (z and y!=x‬‬
‫)‪print ( not z and y!=x‬‬

‫‪Out[2]:‬‬ ‫‪True‬‬
‫‪False‬‬
‫‪True‬‬
‫ ﻣﻘﺪﻣﻪ‬.۱-۱ ۸
.‫ ﻋﻤﻠﮕﺮ ﺟﻤﻊ ﺩﻭ ﺭﺷﺘﻪ ﺭﺍ ﺑﻪ ﺍﺗﺼﺎﻝ ﻣیﺩﻫﺪ‬.‫ﺩﺭ ﻣﻮﺭﺩ ﺭﺷﺘﻪﻫﺎ ﺩﻭ ﻋﻤﻠﮕﺮ ﺟﻤﻊ ﻭ ﺿﺮﺏ ﺭﺍ ﻣیﺗﻮﺍﻥ ﺩﺭ ﻧﻈﺮ ﮔﺮﻗﺖ‬
.‫ﺩﺭ ﻣﻮﺭﺩ ﺿﺮﺏ ﺭﺷﺘﻪ ﺭﺍ ﺑﻪ ﺍﻧﺪﺍﺯﻩ ﻣﻀﺮﺏ ﺗﻜﺮﺍﺭ ﻣیﻛﻨﺪ‬
:۱ ‫ﻣﺜﺎﻝ‬
In [1]: print ('Hello '+'World !')
print ('='*12)

Out[1]: Hello World !


============

:۲ ‫ﻣﺜﺎﻝ‬
In [2]: a= 'TeX '
b= ' typesetting '
print (a+b)
c= '._'
print (c *10)

Out[2]: TeX typesetting


._._._._._._._._._._

.‫ ﺭﺍ ﺑﻪ ﺭﺷﺘﻪ ﺗﺒﺪﻳﻞ ﻧﻤﻮﺩ‬True, False ‫ ﻣیﺗﻮﺍﻥ ﺍﻋﺪﺍﺩ )ﺻﺤﻴح ﻭ ﺍﻋﺸﺎﺭﯼ( ﻭ ﻳﺎ‬str() ‫ ﺑﺎ ﺗﺎﺑع‬:۳ ‫ﻣﺜﺎﻝ‬
In [3]: a= True
b= ' typesetting '
print ( str (a)+ ' '+b+ str (1234))
print ( str ( False )+ ' '+ str (3.14))
c= '._'
print (c *10)

Out[3]: True typesetting1234


False 3.14
._._._._._._._._._._

:‫ ﻣﺜﺎﻝ‬.‫ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﻃﻮﻝ ﺭﺷﺘﻪ ﺭﺍ ﺑﺮﻣیﮔﺮﺩﺍﻧﺪ‬len() ‫ﺩﺭ ﺭﺷﺘﻪﻫﺎ ﺗﺎﺑﻌی ﺑﻪ ﻧﺎﻡ‬

In [4]: print ( len (a))


print ( len (b))
print ( len (c))
print ( len ('test str '))

Out[4]: 4
11
2
8
‫‪۹‬‬ ‫ﻓﺼﻞ ‪ .۱‬ﻛﻠﻴﺎﺕ ﺯﺑﺎﻥ‬
‫ﺗﺎﺑع )(‪input‬‬ ‫‪۵-۱-۱‬‬
‫ﺗﺎﻛﻨﻮﻥ ﻣﻘﺎﺩﻳﺮ ﻣﺘﻐﻴﺮ ﻗﺒﻞ ﺍﺯ ﺍﺟﺮﺍﯼ ﺁﻥ ﺩﺭ ﺩﺍﺧﻞ ﺑﺮﻧﺎﻣﻪ ﺁﻣﺪﻩ ﺑﻮﺩ‪ .‬ﻣﺜﻞ ﺑﺮﻧﺎﻣﻪ ﺯﻳﺮ‪:‬‬
‫‪In [1]:‬‬ ‫' ‪Name ='ava‬‬
‫' ‪City ='yazd‬‬
‫) ‪print ('Hello , My name is ',Name‬‬
‫) ‪print ('I am from ',City‬‬

‫‪Out[1]:‬‬ ‫‪Hello , My name is ava‬‬


‫‪I am from yazd‬‬

‫ﻫﺮ ﮔﺎﻩ ﻛﻪ ﺑﺨﻮﺍﻫﻴﻢ ﻧﺎﻡ ﺷﺨﺺ ﻭ ﻳﺎ ﺍﺳﻢ ﺷﻬﺮ ﺭﺍ ﻋﻮﺽ ﻛﻨﻴﻢ‪ ،‬ﺑﺎﻳﺪ ﺩﺍﺧﻞ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﻭﻳﺮﺍﻳﺶ ﻧﻤﻮﺩ ﻭ ﻣﺠﺪﺩ ًﺍ ﺑﺮﻧﺎﻣﻪ‬
‫ﺭﺍ ﺍﺟﺮﺍ ﻛﺮﺩ‪ .‬ﺍﻛﻨﻮﻥ ﻫﻤﻴﻦ ﺑﺮﻧﺎﻣﻪ ﻣیﺗﻮﺍﻥ ﺑﺎ ﺗﺎﺑع )(‪ input‬ﺑﺎﺯﻧﻮﻳﺴی ﻛﺮﺩ‪.‬‬
‫‪In [2]:‬‬ ‫)'‪print ('Enter your name :‬‬
‫)( ‪Name = input‬‬
‫)'‪print ('Enter your city :‬‬
‫)( ‪City = input‬‬
‫) ‪print ('Hello , My name is ',Name‬‬
‫) ‪print ('I am from ',City‬‬

‫‪Out[2]:‬‬ ‫‪Enter your name : ava‬‬


‫‪Enter your city : yazd‬‬
‫‪Hello , My name is ava‬‬
‫‪I am from yazd‬‬

‫ﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﻫﻨﮕﺎﻣی ﻛﻪ ﺑﻪ ﺗﺎﺑع )(‪ input‬ﻣیﺭﺳﺪ ﻣﻮﻗﺘ ًﺎ ﻣﻨﺘﻈﺮ ﻣیﻣﺎﻧﺪ ﺗﺎ ﺷﻤﺎ ﻣﻘﺪﺍﺭ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﻭﺍﺭﺩ ﻧﻤﻮﺩﻩ ﻭ‬
‫ﻛﻠﻴﺪ ‪ Enter‬ﺑﺰﻧﻴﺪ ﺗﺎ ﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﺩﻧﺒﺎﻝ ﺷﻮﺩ‪ .‬ﻭ ﻫﻤﻴﻦ ﺭﻭﺵ ﻳﺮﺍﯼ ﺩﻭﻣﻴﻦ ﺗﺎﺑع )(‪ input‬ﻧﻴﺰ ﺗﻜﺮﺍﺭ ﻣیﺷﻮﺩ‪ .‬ﺿﻤﻨ ًﺎ‬
‫ﺍﻳﻦ ﺑﺮﻧﺎﻣﻪ ﺑﺪﻭﻥ ﻓﺮﻣﺎﻥ ‪ print‬ﻗﺒﻞ ﺍﺯ )(‪ input‬ﻫﻢ ﺍﺟﺮﺍ ﻣیﺷﻮﺩ ﻭ ﻓﺮﻣﺎﻥﻫﺎﯼ ﭼﺎﭖ ﺻﺮﻓ ًﺎ ﺑﺮﺍﯼ ﺭﺍﻫﻨﻤﺎﻳﯽ ﺑﻴﺸﺘﺮ‬
‫ﻛﺎﺭﺑﺮ ﺑﻪ ﻛﺎﺭ ﻣیﺭﻭﺩ‪.‬‬
‫ﻣیﺗﻮﺍﻥ ﺩﺳﺘﻮﺭﺍﺕ ﭼﺎﭖ ﺭﺍ ﺑﻪ ﻃﻮﺭ ﺿﻤﻨی ﺩﺭ ﺩﺍﺧﻞ ﺗﺎﺑع )(‪ input‬ﻧﻴﺰ ﮔﻨﺠﺎﻧﺪ ﻭ ﺑﺮﻧﺎﻣﮥ ﺑﺎلا ﺭﺍ ﺧلاﺻﻪﺗﺮ ﻧﻤﻮﺩ‪ .‬ﺑﻪ‬
‫ﻛﺪ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫‪In [3]:‬‬ ‫)'‪Name = input ('Enter your name :‬‬
‫)'‪City = input ('Enter your city :‬‬
‫) ‪print ('Hello , My name is ',Name‬‬
‫) ‪print ('I am from ',City‬‬

‫‪Out[3]:‬‬ ‫‪Enter your name : ava‬‬


‫‪Enter your city : yazd‬‬
‫‪Hello , My name is ava‬‬
‫‪I am from yazd‬‬

‫ﺗﻮﺟﻪ‪ :‬ﻭﺭﻭﺩﯼ ﺗﺎﺑع )(‪ input‬ﻫﺮ ﻧﻮع ﻛﻪ ﺑﺎﺷﺪ ﺧﺮﻭﺟی ﻳﻪ ﺻﻮﺭﺕ ﺭﺷﺘﻪ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪ .‬ﺑﻪ ﻣﺜﺎﻝ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫‪ .۱-۱‬ﻣﻘﺪﻣﻪ‬ ‫‪۱۰‬‬
‫‪In [1]:‬‬ ‫)'‪age = input ('enter your age :‬‬
‫)'‪tall = input ('enter your tall :‬‬
‫)) ‪print ( type ( age‬‬
‫)) ‪print ( type ( tall‬‬

‫‪Out[1]:‬‬ ‫‪enter your age : 30‬‬


‫‪enter your tall : 171.5‬‬
‫>' ‪<class 'str‬‬
‫>' ‪<class 'str‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﻛﻨﻴﺪ ﻣﻘﺪﺍﺭ ‪ 30‬ﻋﺪﺩ ﺻﺤﻴح ﻭ ﻋﺪﺩ ‪ 171.5‬ﺍﻋﺸﺎﺭﯼ ﺍﺳﺖ‪ .‬ﺩﺭ ﺻﻮﺭﺗی ﻛﻪ ﻣﺘﻐﻴﺮﻫﺎﯼ‬
‫‪ age‬ﻭ ‪ tall‬ﺍﺯ ﻧﻮع ﺭﺷﺘﻪ ﻫﺴﺘﻨﺪ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻧﻤیﺗﻮﺍﻥ ﺑﺎ ﺁﻧﻬﺎ ﻋﻤﻠﻴﺎﺕ ﺭﻳﺎﺿی ﺍﻧﺠﺎﻡ ﺩﺍﺩ‪.‬‬
‫ﺑﺮﺍﯼ ﺗﺒﺪﻳﻞ ﺭﺷﺘﮥ ﻋﺪﺩﯼ ﺑﻪ ﻋﺪﺩ ﺭﻳﺎﺿی‪ ،‬ﺍﺯ ﺗﺎﺑع )(‪ int‬ﺑﺮﺍﯼ ﻋﺪﺩ ﺻﺤﻴح ﻭ ﺑﺮﺍﯼ ﻋﺪﺩ ﺍﻋﺸﺎﺭﯼ ﺍﺯ ﺗﺎﺑع )(‪float‬‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﻣﺜﺎﻝ ﺑﺎلا ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻭ ﺗﺎﺑع ﺍﺧﻴﺮ ﺗﻜﺮﺍﺭ ﻣیﺷﻮﺩ‪.‬‬

‫‪In [2]:‬‬ ‫)'‪age = input ('enter your age :‬‬


‫) ‪age = int ( age‬‬
‫)'‪tall = input ('enter your tall :‬‬
‫) ‪tall = float ( tall‬‬
‫)) ‪print ( type ( age‬‬
‫)) ‪print ( type ( tall‬‬

‫‪Out[2]:‬‬ ‫‪enter your age : 30‬‬


‫‪enter your tall : 171.5‬‬
‫>' ‪<class 'int‬‬
‫>' ‪<class 'float‬‬

‫ﺗﻮﺟﻪ‪ :‬ﺍﮔﺮ ﺩﺭ ﺭﺷﺘﮥ ﻋﺪﺩﯼ‪ ،‬ﻛﺎﺭﺍﻛﺘﺮﯼ ﻏﻴﺮ ﺍﺯ ﻋﺪﺩ ﺑﺎﺷﺪ‪ .‬ﺗﺒﺪﻳلاﺕ ﺍﺧﻴﺮ ﻋﻤﻞ ﻧﻤیﻛﻨﻨﺪ‪.‬‬

‫‪ ۶-۱-۱‬ﻧﻮﺷﺘﻦ ﻳﺎﺩﺩﺍﺷﺖ ﺑﺮﺍﯼ ﺗﻮﺿﻴح‬

‫ﻣﻌﻤﻮل ًا ﺑﺮﺍﯼ ﺗﻮﺿﻴح ‪ ۱‬ﻗﺴﻤﺖﻫﺎﯼ ﻣﺨﺘﻠﻒ ﻳﮏ ُﻛﺪ ﺍﺯ ﻳﺎﺩﺩﺍﺷﺖﻫﺎﻳﯽ ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ ،‬ﻛﻪ ﺑﻪ ﺯﺑﺎﻥ ﺍﻧﮕﻠﻴﺴی‬
‫ﺍﺳﺖ‪.‬‬
‫ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﻪ ﭘﺎﻳﺘﻮﻥ ﻳﺎﺩﺩﺍﺷﺖﻫﺎ ﺭﺍ ﺗﺸﺨﻴﺺ ﺩﻫﺪ‪ ،‬لاﺯﻡ ﺍﺳﺖ ﻛﻪ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺁﻧﻬﺎ ﺍﺯ ﻋلاﻣﺖ )‪ (#‬ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‪ .‬ﺑﻪ‬
‫ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﭘﺎﻳﺘﻮﻥ ﺟﻤلاﺕ ﭘﺲ ﺍﺯ ﺍﻳﻦ ﻋلاﻣﺖ ﺭﺍ ﻧﺎﺩﻳﺪﻩ ﻣیﮔﻴﺮﺩ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬

‫‪1. Comment‬‬
۱۱ ‫ ﻛﻠﻴﺎﺕ ﺯﺑﺎﻥ‬.۱ ‫ﻓﺼﻞ‬
In [1]: # Prints 7.
print (3 + 4)

# Prints “Hello World”! in two lines.


print (" Hello ")
print (" World !")
# Prints multiple values with a single print function call.
print ("My favorite numbers are ", 3 + 4, " and ", 3 + 10)
14
# Prints three lines of text with a blank line.
print (" Goodbye ")
print ()
print (" Hope to see you again ")

Out[1]: 7
Hello
World !
My favorite numbers are 7 and 13
Goodbye

Hope to see you again


‫���‬

‫‪۲‬‬
‫ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬

‫ﻣﻘﺪﻣﻪ‬ ‫‪۱-۲‬‬
‫ﺩﺭ ﻳﮏ ﻣﺠﻤﻮﻋﻪ ُﻛﺪ ﺍﺯ ﭘﺎﻳﺘﻮﻥ‪ ،‬ﻗﻮﺍﻋﺪ ﺍﺟﺮﺍﯼ ﺁﻥ ﺑﻪ ﺷﺮح ﺯﻳﺮ ﺍﺳﺖ‪.‬‬

‫‪ .۱‬ﺩﺳﺘﻮﺭﺍﺕ ﺍﺯ ﺑﺎلا ﺑﻪ ﭘﺎﻳﻴﻦ ﺍﺟﺮﺍ ﻣیﺷﻮﺩ‪ ،‬ﺗﺎ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﭘﺎﻳﺎﻥ ﺑﺮﺳﺪ‪.‬‬

‫‪ .۲‬ﻫﺮ ﺩﺳﺘﻮﺭ ﻓﻘﻂ ﻳﻜﺒﺎﺭ ﺍﺟﺮﺍ ﻣیﺷﻮﺩ‪.‬‬

‫‪ .۳‬ﺍﺟﺮﺍ ﺑﻪ ﺩﺳﺘﻮﺭﺍﺕ ﻗﺒﻞ ﺍﺯ ﺧﻮﺩ ﺑﺎﺯ ﻧﻤیﮔﺮﺩﺩ‪.‬‬

‫ﺩﺭ ﭘﺎﺭﻩﺍﯼ ﺍﻭﻗﺎﺕ لاﺯﻡ ﺍﺳﺖ ﻛﻪ ﺑﺮ ﺍﺳﺎﺱ ﺗﺼﻤﻴﻤی ﻳﮏ ﻭ ﻳﺎ ﭼﻨﺪ ﺩﺳﺘﻮﺭ ﺍﺟﺮﺍ ﻧﮕﺮﺩﺩ ﻭ ﺍﺯ ﺭﻭﯼ ﺁﻧﻬﺎ ﻋﺒﻮﺭ ﻛﻨﻴﻢ‪.‬‬
‫ﺩﺭ ﺑﺮﺧی ﺍﺯ ﺯﻣﺎﻥﻫﺎ لاﺯﻡ ﺍﺳﺖ ﻛﻪ ﻳﮏ ﻭ ﻳﺎ ﭼﻨﺪ ﺩﺳﺘﻮﺭ ﺑﻴﺶ ﺍﺯ ﻳﻜﺒﺎﺭ ﺍﺟﺮﺍ ﺷﻮﺩ‪ .‬ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ لاﺯﻡ ﺍﺳﺖ ﻛﻪ‬
‫ﺑﻪ ﺩﺳﺘﻮﺭﺍﺕ ﻗﺒﻠی ﻣﺮﺍﺟﻌﻪ ﮔﺮﺩﺩ‪.‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﺳﺎﺯ ﻭ ﻛﺎﺭﻫﺎﻳﯽ لاﺯﻡ ﺍﺳﺖ ﻛﻪ ﭘﻴﺶﻓﺮﺽﻫﺎﯼ ﺑﺎلا ﺭﺍ ﺗﻐﻴﻴﺮ ﺩﻫﺪ‪ .‬ﺩﺭ ﺯﺑﺎﻥﻫﺎﯼ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴی ﺩﻭ ﻣﻜﺎﻧﻴﺰﻡ‬
‫ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺧﻮﺍﺳﺘﻪ ﻣﺎ ﺭﺍ ﺗﺎﻣﻴﻦ ﻣیﻛﻨﻨﺪ‪.‬‬
‫ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﺗﺤﺖ ﺷﺮﺍﻳﻄی ﻳﮏ ﻳﺎ ﭼﻨﺪ ﺳﻄﺮ ﺍﺟﺮﺍ ﻧﺸﻮﺩ ﺍﺯ ﻣﺤﻴﻂ ﺷﺮﻁ ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ ﻭ ﺍﮔﺮ ﻗﺮﺍﺭ ﺑﺎﺷﺪ ﻛﻪ‬
‫ﻳﮏ ﻳﺎ ﭼﻨﺪ ﺳﻄﺮ ﺑﻴﺶ ﺍﺯ ﻳﮏ ﺑﺎﺭ ﺍﺟﺮﺍ ﺷﻮﺩ ﺍﺯ ﻣﺤﻴﻂ ﺣﻠﻘﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻣیﻛﻨﻴﻢ‪.‬‬

‫‪ ۲-۲‬ﺷﺮﻁ‬
‫ﺑﻪ ﺭﻭﻧﺪﻧﻤﺎﯼ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ ﮔﺮﺍﻣﺮ ﻭ ﻳﺎ ‪ syntax‬ﺷﺮﻁ ﺑﻪﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪ .‬ﺑﻪﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪:‬‬

‫‪۱۲‬‬
‫‪۱۳‬‬ ‫ﻓﺼﻞ ‪ .۲‬ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬
‫‪In [1]:‬‬ ‫‪# python program to illustrate If statement‬‬
‫‪i = 10‬‬
‫‪if (i >15):‬‬
‫)"‪print ("10 is less than 15‬‬
‫)"‪print ("I am Not in if‬‬

‫‪Out[1]:‬‬ ‫‪I am Not in if‬‬

‫ﺳﺎﺧﺘﺎﺭ ﺷﺮﻁ ﺑﻪ ﺷﺮح ﺯﻳﺮ ﺍﺳﺖ‪.‬‬

‫‪ .۱‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪if‬‬

‫‪ .۲‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﮏ ﻋﺒﺎﺭﺕ ‪ boolean‬ﻣﺜﻞ ‪ x > y‬ﻛﻪ ﻧﺘﻴﺠﻪ ﺁﻥ ﺩﺭﺳﺖ ﻳﺎ ﻏﻠﻂ ﺍﺳﺖ ﻭ ﺑﺮ ﺍﺳﺎﺱ ﺁﻥ ﺗﺼﻤﻴﻢﮔﻴﺮﯼ‬
‫ﺻﻮﺭﺕ ﻣیﮔﻴﺮﺩ‪.‬‬

‫‪ .۳‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﻤﺎﺩ »‪ ۱ «:‬ﺿﺮﻭﺭﯼ ﺍﺳﺖ ﻭﮔﺮﻧﻪ ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﻣیﺩﻫﺪ‪.‬‬

‫‪ .۴‬ﺑﺪﻧﻪ ﺷﺮﻁ‪ :‬ﻳﻌﻨی ﺩﺳﺘﻮﺭﺍﺗی ﻛﻪ ﺩﺍﺧﻞ ﺷﺮﻁ ﻗﺮﺍﺭ ﻣیﮔﻴﺮﻧﺪ ﻭ ﻛﻨﺘﺮﻝ ﺭﻭﯼ ﺁﻧﻬﺎ ﺍﻋﻤﺎﻝ ﻣیﺷﻮﺩ‪ .‬ﺩﺳﺘﻮﺭﺍﺗی‬
‫ﻛﻪ ﺩﺭ ﺑﺪﻧﻪ ﺷﺮﻁ ﻗﺮﺍﺭ ﺩﺍﺭﻧﺪ‪ ،‬ﺩﺍﺭﺍﯼ ﺗﻮﺭﻓﺘﮕی ‪ ۲‬ﻫﺴﺘﻨﺪ‪.‬‬

‫ﺗﻮﺟﻪ‪ :‬ﻋلاﻣﺖ )‪ (#‬ﺑﺮﺍﯼ ﺍﺭﺍﻳﻪ ﺗﻮﺿﻴﺤﺎﺕ ﺑﻪ ﻛﺎﺭ ﻣیﺭﻭﺩ ﻛﻪ ﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﺁﻥ ﺭﺍ ﻧﺎﺩﻳﺪﻩ ﻣیﮔﻴﺮﺩ‪.‬‬
‫ﻣیﺗﻮﺍﻥ ﺷﺮﻁ ﺭﺍ ﺑﺴﻂ ﺑﻴﺸﺘﺮﯼ ﺩﺍﺩ‪ .‬ﺑﺪﻳﻦ ﻣﻌﻨی ﻛﻪ ﺍﮔﺮ ﻋﺒﺎﺭﺕ ﺷﺮﻃی ﺩﺭﺳﺖ ﻧﺒﻮﺩ‪ ،‬ﻛﻨﺘﺮﻝ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﻛﺠﺎ ﻣﻨﺘﻘﻞ‬
‫ﻣیﺷﻮﺩ؟ ﺑﺮﺍﯼ ﻣﺪﻳﺮﻳﺖ ﺍﻳﻦ ﻛﺎﺭ ﺍﺯ ‪ else‬ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﺭﻭﻧﺪﻧﻤﺎﯼ ﺁﻥ ﺩﺭ ﻧﻤﻮﺩﺍﺭ ‪ ۳-۲‬ﺁﻣﺪﻩ ﺍﺳﺖ‪.‬‬

‫ﻋﺒﺎﺭﺕ‬ ‫ﺧﻴﺮ‬
‫ﺷﺮﻁ‬

‫ﺑﻠﻪ‬
‫ﺑﺪﻧﻪ ‪if‬‬ ‫ﺑﺪﻧﻪ ‪else‬‬

‫ﺩﺳﺘﻮﺭ ﺧﺎﺭج ﺍﺯ ‪if‬‬

‫ﺷﻜﻞ ‪ :۱-۲‬ﺭﻭﻧﺪﻧﻤﺎﯼ ﺑﻠﻮﮎ ‪if-else‬‬


‫‪1. colon‬‬
‫‪2. indentation‬‬
‫‪ .۲-۲‬ﺷﺮﻁ‬ ‫‪۱۴‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫‪number =9‬‬
‫‪if number %2==0:‬‬
‫)"‪print (" The number is even .‬‬
‫‪else :‬‬
‫)"‪print (" The number is odd .‬‬

‫‪Out[1]:‬‬ ‫‪The number is odd .‬‬

‫‪ ۱-۲-۲‬ﺷﺮﻁﻫﺎﯼ ﺗﻮ ﺩﺭ ﺗﻮ‬
‫ﻣیﺗﻮﺍﻥ ﺩﺭ ﺩﺍﺧﻞ ﺑﺪﻧﻪ ﻳﮏ ﺷﺮﻁ ﺩﺳﺘﻮﺭﺍﺕ ﻣﺨﺘﻠﻔی ﺭﺍ ﺩﺍﺷﺖ‪ .‬ﺍﺯ ﺟﻤﻠﻪ ﻳﮏ ﺷﺮﻁ ﻣیﺗﻮﺍﻧﺪ ﺩﺭﻭﻥ ﺑﺪﻧﻪ ﻳﮏ‬
‫ﺷﺮﻁ ﺩﻳﮕﺮ ﻭﺍﻗﻊ ﺷﻮﺩ‪ .‬ﺑﻪ ﺍﻳﻦ ﺷﺮﻁﻫﺎ ﺍﺻﻄلاﺣﺎ ﺷﺮﻁﻫﺎﯼ ﺗﻮ ﺩﺭ ﺗﻮ ‪ ۱‬ﮔﻮﻳﻨﺪ‪.‬‬

‫ﻋﺒﺎﺭﺕ‬ ‫ﺧﻴﺮ‬ ‫ﻋﺒﺎﺭﺕ‬ ‫ﺧﻴﺮ‬


‫ﺷﺮﻁ‬ ‫ﺷﺮﻁ‬

‫ﺑﻠﻪ‬ ‫ﺑﻠﻪ‬
‫ﺑﺪﻧﻪ ‪if‬‬ ‫ﺑﺪﻧﻪ ‪ if‬ﺩﺍﺧﻠی‬ ‫ﺑﺪﻧﻪ ‪ else‬ﺩﺍﺧﻠی‬

‫ﺩﺳﺘﻮﺭ ﺧﺎﺭج ﺍﺯ ‪if‬‬

‫ﺷﻜﻞ ‪ :۲-۲‬ﺭﻭﻧﺪﻧﻤﺎﯼ ﺷﺮﻁ ﺗﻮ ﺩﺭ ﺗﻮ ‪if-else‬‬

‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫‪i, j, k = 7, 5, 3‬‬
‫‪if i > k:‬‬
‫‪if j > k:‬‬
‫)'‪print ('i and j are greater than k‬‬
‫‪else :‬‬
‫)'‪print ('i is less than or equal to k‬‬

‫‪Out[2]:‬‬ ‫‪i and j are greater than k‬‬

‫ﻣﺜﺎﻝ ﺩﻳﮕﺮ‪:‬‬
‫‪1. nested conditions‬‬
‫‪۱۵‬‬ ‫ﻓﺼﻞ ‪ .۲‬ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬
‫‪In [1]:‬‬ ‫‪# if .. else chain statement‬‬
‫"‪letter = "A‬‬
‫‪if letter == "B":‬‬
‫)"‪print (" letter is B‬‬
‫‪else :‬‬
‫‪if letter == "C":‬‬
‫)"‪print (" letter is C‬‬
‫‪else :‬‬
‫‪if letter == "A":‬‬
‫)"‪print (" letter is A‬‬
‫‪else :‬‬
‫)"‪print (" letter isn 't A, B and C‬‬

‫‪Out[1]:‬‬ ‫‪letter is A‬‬

‫ﺩﺳﺘﻮﺭ ﺷﺮﻁﻫﺎﯼ ﻣﻔﺼﻞ‬ ‫‪۲-۲-۲‬‬


‫ﺩﺭ ﺷﺮﻁﻫﺎﻳﯽ ﻛﻪ ﺗﻌﺪﺍﺩ ﺗﺼﻤﻴﻢﻫﺎ ﻧﺴﺒﺘﺎ ﺯﻳﺎﺩ ﺍﺳﺖ ﻣیﺗﻮﺍﻥ ﺍﺯ ﺩﺳﺘﻮﺭ ‪ elif‬ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ‪.‬‬

‫ﻋﺒﺎﺭﺕ‬ ‫ﺑﻠﻪ‬
‫ﺷﺮﻁ‬ ‫ﺑﻠﻮﮎ ‪۱‬‬

‫ﺧﻴﺮ‬

‫ﻋﺒﺎﺭﺕ‬ ‫ﺑﻠﻪ‬
‫ﺷﺮﻁ‬ ‫ﺑﻠﻮﮎ ‪۲‬‬

‫ﺧﻴﺮ‬

‫ﻋﺒﺎﺭﺕ‬ ‫ﺑﻠﻪ‬
‫ﺷﺮﻁ‬ ‫ﺑﻠﻮﮎ ‪۳‬‬

‫ﺧﻴﺮ‬ ‫ﺑﺪﻧﻪ ‪else‬‬

‫ﺩﺳﺘﻮﺭ ﺧﺎﺭج ﺍﺯ ‪if‬‬

‫ﺷﻜﻞ ‪ :۳-۲‬ﺭﻭﻧﺪﻧﻤﺎﯼ ﺷﺮﻁ ‪elif‬‬


‫‪ .۳-۲‬ﺣﻠﻘﻪ‬ ‫‪۱۶‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫‪a = 7‬‬
‫‪b = 9‬‬
‫‪c = 3‬‬
‫‪if ((a>b and a>c) and (a != b and a != c )):‬‬
‫)" ‪print (a , " is the largest‬‬
‫‪elif ((b>a and b>c) and (b != a and b != c )):‬‬
‫)" ‪print (b , " is the largest‬‬
‫‪elif ((c>a and c>b) and (c != a and c != b )):‬‬
‫)" ‪print (c , " is the largest‬‬
‫‪else :‬‬
‫)" ‪print (" entered numbers are equal‬‬

‫‪Out[1]:‬‬ ‫‪9‬‬ ‫‪is the largest‬‬

‫‪ ۳-۲‬ﺣﻠﻘﻪ‬
‫ﻓﺮﺽ ﻛﻨﻴﺪ ﻣیﺧﻮﺍﻫﻴﻢ ‪ ۲۰‬ﺑﺎﺭ ﺟﻤﻠﻪ ‪ programming is fun‬ﺭﺍ ﺑﻨﻮﻳﺴﻴﻢ‪ .‬ﻳﮏ ﺭﺍﻩ ﺣﻞ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ‪ ۲۰‬ﺑﺎﺭ‬
‫ﺩﺳﺘﻮﺭ ﭼﺎﭖ ﺁﻥ ﺭﺍ ﺑﻨﻮﻳﺴﻴﻢ ﻛﻪ ﺭﻭﺷی ﺧﺴﺘﻪ ﻛﻨﻨﺪﻩ ﻭ ﻏﻴﺮ ﺍﺻﻮﻟی ﺍﺳﺖ‪ .‬ﺍﮔﺮ ﺗﻌﺪﺍﺩ ﺗﻜﺮﺍﺭ ﺯﻳﺎﺩ ﺑﺎﺷﺪ ﺍﻋﻤﺎﻝ ﺍﻳﻦ‬
‫ﺭﻭﺵ ﻋﻤلا ﻧﺎﻣﻤﻜﻦ ﺑﻪ ﻧﻈﺮ ﻣیﺭﺳﺪ‪ .‬ﺭﺍﻩ ﺣﻞ ﺑﻌﺪﯼ ﺁﻥ ﺍﺳﺖ ﻛﻪ ﺍﺯ ﺣﻠﻘﻪ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ‪ .‬ﺑﻪ ﻓﻠﻮﭼﺎﺭﺕ ﺯﻳﺮ ﺗﻮﺟﻪ‬
‫ﻛﻨﻴﺪ‪.‬‬

‫ﻋﺒﺎﺭﺕ‬ ‫ﺧﻴﺮ‬
‫ﺷﺮﻁ‬

‫ﺑﻠﻪ‬

‫ﺑﺪﻧﻪ ﺣﻠﻘﻪ‬ ‫ﺩﺳﺘﻮﺭ ﺧﺎﺭج ﺍﺯ ﺣﻠﻘﻪ‬

‫ﺷﻜﻞ ‪ :۴-۲‬ﺭﻭﻧﺪﻧﻤﺎﯼ ﺣﻠﻘﻪ‬

‫ﺣﻠﻘﻪ ﺑﺎ ﺩﺳﺘﻮﺭ ‪while‬‬ ‫‪۱-۳-۲‬‬


‫ﺩﺭ ﺍﻳﻦ ﻧﻮع ﺣﻠﻘﻪ‪ ،‬ﻋﻤﻠﻴﺎﺕ ﺁﻧﻘﺪﺭ ﺗﻜﺮﺍﺭ ﻣیﺷﻮﺩ ﺗﺎ ﺑﻪ ﻫﺪﻑ ﺗﻌﻴﻴﻦ ﺷﺪﻩ ﺑﺮﺳﻴﻢ‪.‬‬
‫‪۱۷‬‬ ‫ﻓﺼﻞ ‪ .۲‬ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬
‫‪In [1]:‬‬ ‫‪i=1‬‬
‫‪while i <=3:‬‬
‫)' ‪print (' programming is fun‬‬
‫)' ‪print ('End of loop‬‬

‫‪Out[1]:‬‬ ‫' ‪' programming is fun‬‬


‫' ‪' programming is fun‬‬
‫' ‪' programming is fun‬‬
‫‪.‬‬
‫‪.‬‬
‫‪.‬‬

‫ﺳﺎﺧﺘﺎﺭ ﺣﻠﻘﻪ ﺑﺎلا ﺑﻪ ﺷﺮح ﺯﻳﺮ ﺍﺳﺖ‪.‬‬

‫‪ .۱‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪while‬‬

‫‪ .۲‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﮏ ﻋﺒﺎﺭﺕ ‪ boolean‬ﻣﺜﻞ ‪ i<=2‬ﻛﻪ ﻧﺘﻴﺠﻪ ﺁﻥ ﺩﺭﺳﺖ ﻳﺎ ﻏﻠﻂ ﺍﺳﺖ ﻭ ﺑﺮ ﺍﺳﺎﺱ ﺁﻥ ﺗﺼﻤﻴﻢﮔﻴﺮﯼ‬
‫ﺻﻮﺭﺕ ﻣیﮔﻴﺮﺩ‪.‬‬

‫‪ .۳‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﻤﺎﺩ »‪ «:‬ﺿﺮﻭﺭﯼ ﺍﺳﺖ ﻭﮔﺮﻧﻪ ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﻣیﺩﻫﺪ‪.‬‬

‫‪ .۴‬ﺑﺪﻧﻪ ﺣﻠﻘﻪ‪ :‬ﻳﻌﻨی ﺩﺳﺘﻮﺭﺍﺗی ﻛﻪ ﺩﺍﺧﻞ ﺣﻠﻘﻪ ﻗﺮﺍﺭ ﻣیﮔﻴﺮﻧﺪ ﻭ ﻛﻨﺘﺮﻝ ﺭﻭﯼ ﺁﻧﻬﺎ ﺍﻋﻤﺎﻝ ﻣیﺷﻮﺩ‪ .‬ﺩﺳﺘﻮﺭﺍﺗی‬
‫ﻛﻪ ﺩﺭ ﺑﺪﻧﻪ ﺣﻠﻘﻪ ﻗﺮﺍﺭ ﺩﺍﺭﻧﺪ‪ ،‬ﺩﺍﺭﺍﯼ ﺗﻮﺭﻓﺘﮕی ﻫﺴﺘﻨﺪ‪ .‬ﺩﺭ ُﻛﺪ ﺑﺎلا ﺩﺳﺘﻮﺭ ﺳﻄﺮ ‪ ۳‬ﺩﺍﺭﺍﯼ ﺍﻳﻦ ﻭﻳﮋﮔی ﺍﺳﺖ‪.‬‬

‫ﻛﻨﺘﺮﻝ ﺑﺮﻧﺎﻣﻪ ﻫﻴچ ﮔﺎﻩ ﺍﺯ ﺩﺍﺧﻞ ﺣﻠﻘﻪ ﺧﺎﺭج ﻧﻤیﺷﻮﺩ‪ ،‬ﻳﻌﻨی ﻣﺎ ﺧﺮﻭﺟی ‪ End of loop‬ﺭﺍ ﻧﺨﻮﺍﻫﻴﻢ ﺩﺍﺷﺖ‪ ،‬ﭼﺮﺍ‬
‫ﻛﻪ ﻣﻜﺎﻧﻴﺰﻣی ﺑﺮﺍﯼ ﺑﺮﻭﻥﺭﻓﺖ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ‪ .‬ﭼﻮﻥ ﻋﺒﺎﺭﺕ ﻣﻨﻄﻘی ‪ i<=2‬ﻫﻤﻴﺸﻪ ﺩﺭﺳﺖ ﺍﺳﺖ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎﻳﺪ ﺳﺎﺯ‬
‫ﻭ ﻛﺎﺭﯼ ﺑﺮﺍﯼ ﺑﺮﻭﻥﺭﻓﺖ ﺍﺯ ﺣﻠﻘﻪ ﺗﻌﺒﻴﻪ ﻧﻤﻮﺩ‪ُ .‬ﻛﺪ ﺍﺳلاﻳﺪ ﻗﺒﻞ ﺭﺍ ﺑﻪﺻﻮﺭﺕ ﺯﻳﺮ ﺗﻐﻴﻴﺮ ﻣیﺩﻫﻴﻢ‪.‬‬
‫‪In [2]:‬‬ ‫‪i=1‬‬
‫‪while i <=2:‬‬
‫)' ‪print (' programming is fun‬‬
‫‪i=i+1‬‬
‫)' ‪print ('End of loop‬‬

‫‪Out[2]:‬‬ ‫‪programming is fun‬‬


‫‪programming is fun‬‬
‫‪programming is fun‬‬
‫‪End of loop‬‬

‫ﺩﺭ ﺍﻳﻨﺠﺎ ﻫﺮ ﺑﺎﺭ ﻛﻪ ﺣﻠﻘﻪ ﺍﺟﺮﺍ ﻣیﺷﻮﺩ‪ ،‬ﻳﮏ ﻭﺍﺣﺪ ﺑﻪ ﻣﻘﺪﺍﺭ ‪ i‬ﺍﻓﺰﻭﺩﻩ ﻣیﺷﻮﺩ‪ ،‬ﻟﺬﺍ ﭘﺲ ﺑﺎﺭ ﺩﻭﻡ ﮔﺮﺩﺵ ﺣﻠﻘﻪ‪،‬‬
‫ﻋﺒﺎﺭﺕ ﺑﻮﻟی ‪ i <= 2‬ﻏﻠﻂ ﻣیﺷﻮﺩ ﻭ ﺣﻠﻘﻪ ﺍﺯ ﮔﺮﺩﺵ ﺑﺎﺯ ﻣیﻣﺎﻧﺪ ﻭ ﻛﻨﺘﺮﻝ ﺑﺮﻧﺎﻣﻪ ﺑﻪ ﺳﺮ ﻭﻗﺖ ﺭﺷﺘﻪﯼ ‪End of‬‬
‫‪ loop‬ﺭﻓﺘﻪ ﻭ ﺁﻥ ﺭﺍ ﭼﺎﭖ ﻣیﻛﻨﺪ‪ .‬ﺑﻪ ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﺑﻪ ﻓﺮﺟﺎﻡ ﻛﺎﺭ ﻣیﺭﺳﻴﻢ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫ ﺣﻠﻘﻪ‬.۳-۲ ۱۸
In [1]: n = 5
while n > 0:
n=n -1
print (n)

Out[1]: 4
3
2
1
0

‫ ﭼﻨﺪ ﺳﺎﻝ‬.‫ ﺩﺭﺻﺪ ﺍﺳﺖ‬۲۰ ‫ ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻳﮏ ﻣﻴﻠﻴﻮﻥ ﺗﻮﻣﺎﻥ ﺩﺭ ﺑﺎﻧﮏ ﻣی ﮔﺬﺍﺭﻳﺪ ﻭ ﻣﻘﺪﺍﺭ ﺑﻬﺮﻩ ﺳﺎلاﻧﻪ‬:‫ﻣﺜﺎﻝ‬
.‫ﻃﻮﻝ ﻣیﻛﺸﺪ ﻛﻪ ﻣﻘﺪﺍﺭ ﺳﺮﻣﺎﻳﻪ ﺷﻤﺎ ﺩﻭ ﺑﺮﺍﺑﺮ ﻣﻘﺪﺍﺭ ﺍﻭﻟﻴﻪ ﻣیﺷﻮﺩ‬

In [2]: # Create constant variables .


RATE = 0.20
INITIAL_BALANCE = 10000000
TARGET = 2 * INITIAL_BALANCE
# Initialize variables used with the loop.
balance = INITIAL_BALANCE
year = 0

# Count the years required for the investment to double .


while balance < TARGET :
year = year + 1
interest = balance * RATE
balance = balance + interest

# Print the results .


print (" The investment doubled after ", year , " years .")

Out[2]: The investment doubled after 4 years .

.‫ ﺑﺮﻧﺎﻣﻪ ﺯﻳﺮ ﻋﺪﺩﯼ ﺭﺍ ﺩﺭﻳﺎﻓﺖ ﻧﻤﻮﺩﻩ ﻭ ﻣﺠﻤﻮع ﺍﺭﻗﺎﻡ ﺁﻥ ﺭﺍ ﺑﺪﺳﺖ ﺁﻭﺭﺩﻩ ﻭ ﭼﺎﭖ ﻣیﻛﻨﺪ‬:‫ﻣﺜﺎﻝ‬

In [3]: n = 1729
total = 0
while n > 0 :
digit = n % 10
total = total + digit
n = n // 10
print ( total )

Out[3]: 19
‫‪۱۹‬‬ ‫ﻓﺼﻞ ‪ .۲‬ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬
‫ﺩﻭ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪ break‬ﻭ ‪continue‬‬ ‫‪۲-۳-۲‬‬

‫ﺍﻭﻟی )‪ (break‬ﻣیﺗﻮﺍﻧﺪ ﺗﺤﺖ ﺷﺮﺍﻳﻄی ﮔﺮﺩﺵ ﺣﻠﻘﻪ ﺭﺍ ﻗﺒﻞ ﺍﺯ ﺧﺎﺗﻤﻪ ﮔﺮﺩﺵﻫﺎﯼ ﺁﻥ ﻣﺘﻮﻗﻒ ﻧﻤﻮﺩﻩ ﻭ ﻛﻨﺘﺮﻝ ﺑﺮﻧﺎﻣﻪ‬
‫ﺭﺍ ﺍﺯ ﺣﻠﻘﻪ ﺧﺎﺭج ﻛﺮﺩﻩ ﻭ ﺑﻘﻴﻪ ﺑﺮﻧﺎﻣﻪ ﺭﺍ ﺍﺩﺍﻣﻪ ﺩﻫﺪ‪.‬‬
‫ﺩﻭﻣی )‪ (continue‬ﻣیﺗﻮﺍﻧﺪ ﺗﺤﺖ ﺷﺮﺍﻳﻄی ﮔﺮﺩﺵ ﺣﻠﻘﻪ ﺭﺍ ﺩﺭ ﺑﻴﻦ ﺭﺍﻩ ﻣﺘﻮﻗﻒ ﻧﻤﻮﺩﻩ ﻭ ﻛﻨﺘﺮﻝ ﺭﺍ ﺑﻪ ﺍﺑﺘﺪﺍﯼ ﺣﻠﻘﻪ‬
‫ﻣﻨﺘﻘﻞ ﻛﻨﺪ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬

‫‪In [1]:‬‬ ‫‪n = 5‬‬


‫‪while n > 0:‬‬
‫‪n -=1‬‬ ‫‪# n=n-1‬‬
‫‪if n == 2:‬‬
‫‪break‬‬
‫)‪print (n‬‬
‫)'‪print ('Loop ended .‬‬

‫‪Out[1]:‬‬ ‫‪4‬‬
‫‪3‬‬
‫‪Loop ended .‬‬

‫ﻣﺜﺎﻝ ﺩﻳﮕﺮ‪:‬‬

‫‪In [2]:‬‬ ‫‪n = 5‬‬


‫‪while n > 0:‬‬
‫‪n -= 1‬‬ ‫‪# n=n-1‬‬
‫‪if n == 2:‬‬
‫‪continue‬‬
‫)‪print (n‬‬
‫)'‪print ('Loop ended .‬‬

‫‪Out[2]:‬‬ ‫‪4‬‬
‫‪3‬‬
‫‪1‬‬
‫‪0‬‬
‫‪Loop ended .‬‬

‫ﻣﺜﺎﻝ ﺯﻳﺮ ﺍﻋﺪﺍﺩ ﻣﻀﺮﺏ ‪ ۳‬ﺭﺍ ﭼﺎﭖ ﻣیﻛﻨﺪ ﻭ ﻣﺠﻤﻮع ﺁﻧﻬﺎ ﺭﺍ ﻧﻴﺰ ﺑﺪﺳﺖ ﻣیﺩﻫﺪ‪.‬‬
‫ ﺣﻠﻘﻪ‬.۳-۲ ۲۰
In [1]: total = 0
number = 0
while number <15:
number +=1 # number = number +1
if number %3!=0:
continue
print ( number )
total += number #total=total+ number
print (" The total is:",total )

Out[1]: 3
6
9
12
15
The total is: 45

‫ ﻭﻗﺘی ﺍﻋﺪﺍﺩ ﻭﺭﻭﺩﯼ ﺧﺎﺗﻤﻪ ﻳﺎﻓﺖ ﻛﻠﻴﺪ‬.‫ ﺑﺮﻧﺎﻣﻪﺍﯼ ﺑﻨﻮﻳﺴﻴﺪ ﻛﻪ ﻣﻴﺎﻧﮕﻴﻦ ﺗﻌﺪﺍﺩﯼ ﺍﻋﺪﺍﺩ ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻛﻨﺪ‬:‫ﻣﺜﺎﻝ‬
.‫ ﺭﺍ ﻓﺸﺎﺭ ﺩﻫﻴﺪ‬Enter

In [2]: # compute an average several numbers .


total = 0
count =0
inputStr = input (" Enter value : ")
while inputStr != '' :
value = float ( inputStr )
total = total + value
count = count + 1
inputStr = input (" Enter value : ")
if count > 0 :
average = total / count
else :
average = 0.0
print (' average is:', average )

Out[2]: Enter value : 1


Enter value : 2
Enter value : 3
Enter value :
average is: 2.0

‫ ﺩﺭ ﺣﻠﻘﻪ‬else ‫ ﺑﻠﻮﮎ‬۳-۳-۲

:‫ ﻣﺜﺎﻝ‬.‫ ﺍﺟﺮﺍ ﻣیﺷﻮﺩ‬else ‫ ﺁﻧﮕﺎﻩ ﺑﻠﻮﮎ‬،‫ﻫﻨﮕﺎﻣی ﻛﻪ ﺷﺮﻁ ﺣﻠﻘﻪ ﺩﺭﺳﺖ ﻧﺒﺎﺷﺪ‬


‫‪۲۱‬‬ ‫ﻓﺼﻞ ‪ .۲‬ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬
‫‪In [1]:‬‬ ‫‪i=0‬‬
‫‪while i <5:‬‬
‫‪i +=1‬‬
‫)‪print ("i =",i‬‬
‫‪else :‬‬
‫)" ‪print (" else block is executed‬‬

‫‪Out[1]:‬‬ ‫‪i = 1‬‬


‫‪i = 2‬‬
‫‪i = 3‬‬
‫‪i = 4‬‬
‫‪i = 5‬‬
‫‪else block is executed‬‬

‫‪ ۴-۳-۲‬ﻣﻔﻬﻮﻡ ‪ flag‬ﺩﺭ ﺣﻠﻘﻪ ‪while‬‬


‫ﺩﺭ ﺑﺮﻧﺎﻣﻪﻫﺎﻳﯽ ﻛﻪ ﺩﺭ ﺑﺴﻴﺎﺭﯼ ﺍﺯ ﺷﺮﺍﻳﻂ ﺩﺭﺳﺖ ﻫﺴﺘﻨﺪ‪ ،‬ﺷﻤﺎ ﻣیﺗﻮﺍﻧﻴﺪ ﻳﮏ ﻣﺘﻐﻴﺮ ﻓﻌﺎﻝ ﻭ ﻳﺎ ﻏﻴﺮ ﻓﻌﺎﻝ ﺑﺮﺍﯼ ﻛﻨﺘﺮﻝ‬
‫ﺣﻠﻘﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ‪ ،‬ﻛﻪ ﺍﺻﻄلاﺣ ًﺎ ﺑﻪ ﺁﻥ ‪ flag‬ﮔﻮﻳﻨﺪ‪ .‬ﺩﺭ ﺻﻮﺭﺗی ﻛﻪ ﺷﺮﺍﻳﻂ ﺑﺮﻗﺮﺍﺭ ﺑﺎﺷﺪ‪ flag ،‬ﻓﺮﻣﺎﻥ ﺍﺟﺮﺍ ﺭﺍ‬
‫ﺻﺎﺩﺭ ﻣیﻛﻨﺪ ﻭ ﺩﺭ ﺣﺎﻟﺘی ﻛﻪ ﺷﺮﺍﻳﻂ ﺑﺮﻗﺮﺍﺭ ﻧﻴﺴﺖ‪ ،‬ﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﻣﺘﻮﻗﻒ ﺭﺍ ﻣیﺳﺎﺯﺩ‪.‬‬
‫‪In [2]:‬‬ ‫‪active = True‬‬
‫‪active = True‬‬
‫‪while active :‬‬
‫)'‪message = input ('Tell me yout message :‬‬
‫‪if message == 'quit ':‬‬
‫‪active = False‬‬
‫‪else :‬‬
‫) ‪print ( message‬‬

‫‪Out[2]:‬‬ ‫‪Tell me‬‬ ‫‪yout message : hi‬‬


‫‪hi‬‬
‫‪Tell me‬‬ ‫‪yout message : hello‬‬
‫‪hello‬‬
‫‪Tell me‬‬ ‫‪yout message : hey‬‬
‫‪hey‬‬
‫‪Tell me‬‬ ‫‪yout message : quit‬‬

‫ﺣﻠﻘﻪ ﺑﺎ ﺩﺳﺘﻮﺭ ‪for‬‬ ‫‪۵-۳-۲‬‬


‫ﺩﺭ ﺣﺎﻟﺘی ﻛﻪ ﺍﺯ ﻗﺒﻞ ﻣیﺩﺍﻧﻴﻢ ﭼﻨﺪ ﺑﺎﺭ ﺍﺟﺮﺍﯼ ﺣﻠﻘﻪ ﻣﻮﺭﺩ ﻧﻴﺎﺯ ﺍﺳﺖ‪ ،‬ﻣیﺗﻮﺍﻥ ﺍﺯ ﺣﻠﻘﻪ ﺑﺎ ﺩﺳﺘﻮﺭ ‪ for‬ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ‪.‬‬
‫ﺍﻟﺒﺘﻪ ﭘﺎﺭﻩﺍﯼ ﺍﺯ ﻣﺴﺎﻳﻞ ﺭﺍ ﻣیﺗﻮﺍﻥ ﺑﻪ ﻫﺮ ﺩﻭ ﺻﻮﺭﺕ ‪ while‬ﻭ ‪ُ for‬ﻛﺪﻧﻮﻳﺴی ﻧﻤﻮﺩ‪.‬‬
‫‪for i t e r a t o r _ v a r in sequence :‬‬
‫) ‪statements ( s‬‬
‫ﺳﺎﺧﺘﺎﺭ ﺣﻠﻘﻪ ﺑﺎلا ﺑﻪ ﺷﺮح ﺯﻳﺮ ﺍﺳﺖ‪.‬‬
‫‪ .۳-۲‬ﺣﻠﻘﻪ‬ ‫‪۲۲‬‬
‫‪ .۱‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎﯼ ‪ for‬ﻭ ‪in‬‬

‫‪ .۲‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﮏ ﻣﺘﻐﻴﺮ ﭘﻴﻤﺎﻳﺶ ‪iterator_vari‬‬

‫‪ .۳‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﮏ ﺩﻧﺒﺎﻟﻪ )‪ (sequence‬ﻛﻪ ﺗﻮﺳﻂ ﻣﺘﻐﻴﺮ ﭘﻴﻤﺎﻳﺶ ﭘﻴﻤﻮﺩﻩ ﻣیﺷﻮﺩ‪.‬‬

‫‪ .۴‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﻤﺎﺩ »‪ «:‬ﺿﺮﻭﺭﯼ ﺍﺳﺖ ﻭﮔﺮﻧﻪ ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﻣیﺩﻫﺪ‪.‬‬

‫‪ .۵‬ﺑﺪﻧﻪ ﺣﻠﻘﻪ‪ :‬ﻳﻌﻨی ﺩﺳﺘﻮﺭﺍﺗی ))‪ (statements(s‬ﻛﻪ ﺩﺍﺧﻞ ﺣﻠﻘﻪ ﻗﺮﺍﺭ ﻣیﮔﻴﺮﻧﺪ ﻭ ﻛﻨﺘﺮﻝ ﺭﻭﯼ ﺁﻧﻬﺎ ﺍﻋﻤﺎﻝ‬
‫ﻣیﺷﻮﺩ‪ .‬ﺩﺳﺘﻮﺭﺍﺗی ﻛﻪ ﺩﺭ ﺑﺪﻧﻪ ﺣﻠﻘﻪ ﻗﺮﺍﺭ ﺩﺍﺭﻧﺪ‪ ،‬ﺩﺍﺭﺍﯼ ﺗﻮﺭﻓﺘﮕی ﻫﺴﺘﻨﺪ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫'! ‪language = 'Hello‬‬
‫‪# iterate over each character in language‬‬
‫‪for x in language :‬‬
‫)'*'‪print (x+‬‬

‫‪Out[1]:‬‬ ‫*‪H‬‬
‫*‪e‬‬
‫*‪l‬‬
‫*‪l‬‬
‫*‪o‬‬
‫*!‬

‫ﺩﺭ ﻣﺜﺎﻝ ﺑﺎلا ﻣﺘﻐﻴﺮ ‪ language‬ﺩﻧﺒﺎﻟﻪﺍﯼ ﺍﺯ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﺍﺳﺖ ﻭ ﻣﺘﻐﻴﺮ ‪ x‬ﺩﻧﺒﺎﻟﻪ ﺭﺍ ﻣیﭘﻴﻤﺎﻳﺪ ﻭ ﺩﺭ ﻫﺮ ﺑﺎﺭ ﭘﻴﻤﺎﻳﺶ‬
‫ﻳﮏ ﻛﺎﺭﺍﻛﺘﺮ ﺭﺍ ﺑﻪ ﺧﻮﺩ ﻧﺴﺒﺖ ﻣیﺩﻫﺪ ﻭ ﺑﺎ ﺩﺳﺘﻮﺭ ﺩﺍﺧﻞ ﺑﺪﻧﻪ ﺣﻠﻘﻪ‪ ،‬ﻋﻤﻞ ﭼﺎﭖ ﺍﻧﺠﺎﻡ ﻣیﺷﻮﺩ‪.‬‬

‫ﻣﻘﺪﺍﺭ ‪ x‬ﭼﺎﭖ ﺁﺧﺮﻳﻦ ﻣﻘﺪﺍﺭ ﺩﻧﺒﺎﻟﻪ ﺭخ ﺩﺍﺩﻩ؟‬ ‫ﭘﻴﻤﺎﻳﺶ‬


‫ﺧﻴﺮ‬ ‫∗‪H‬‬ ‫‪H‬‬ ‫ﺍﻭﻟﻴﻦ‬
‫ﺧﻴﺮ‬ ‫∗‪e‬‬ ‫‪e‬‬ ‫ﺩﻭﻣﻴﻦ‬
‫ﺧﻴﺮ‬ ‫∗‪l‬‬ ‫‪l‬‬ ‫ﺳﻮﻣﻴﻦ‬
‫ﺧﻴﺮ‬ ‫∗‪l‬‬ ‫‪l‬‬ ‫ﭼﻬﺎﺭﻣﻴﻦ‬
‫ﺧﻴﺮ‬ ‫∗‪o‬‬ ‫‪o‬‬ ‫ﭘﻨﺠﻤﻴﻦ‬
‫ﺑﻠﻪ‬ ‫∗!‬ ‫!‬ ‫ﺷﺸﻤﻴﻦ‬
‫ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﺗﺎﺑﻌی ﺑﻪ ﻧﺎﻡ )(‪ range‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﻳﮏ ﺩﻧﺒﺎﻟﻪ ﻋﺪﺩﯼ ﺗﻮﻟﻴﺪ ﻣیﻛﻨﺪ‪.‬‬

‫‪ ۱-۵-۳-۲‬ﺗﺎﺑع )(‪range‬‬

‫ﺗﺎﺑع )‪ ،range(n‬ﺩﻧﺒﺎﻟﻪﺍﯼ ﺍﺯ ﺍﻋﺪﺍﺩ ﺻﺤﻴح ﺍﺯ ﺻﻔﺮ ﺗﺎ ‪ n-1‬ﺗﻮﻟﻴﺪ ﻣیﻛﻨﺪ‪ .‬ﮔﺎﻡﻫﺎﯼ ﺑﻴﻦ ﻣﻘﺎﺩﻳﺮ ﺷﺮﻭع ﻭ ﺧﺎﺗﻤﻪ‬
‫ﻭﺍﺣﺪ ﺍﺳﺖ‪ .‬ﻳﻌﻨی ‪0,1,2,3,...,n-1‬‬
‫ﺩﺳﺘﻮﺭ ﻛﻠی ﺁﻥ ﺑﻪﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪.‬‬
‫‪۲۳‬‬ ‫ﻓﺼﻞ ‪ .۲‬ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬
‫)‪range(FirstValue, EndValue, Step‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪range(5) ⇒ 0,1,2,3,4‬‬
‫‪range(1, 5) ⇒ 1,2,3,4‬‬
‫‪range(1, 5, 2) ⇒ 1,3‬‬
‫‪range(5, 1) ⇒ no output‬‬
‫‪range(5, 1, -1) ⇒ 5,4,3,2‬‬
‫‪range(k, k) ⇒ k‬‬
‫ﻣلاﺣﻈﺎﺕ‪:‬‬

‫‪ .۱‬ﭘﻴﺶﻓﺮﺽ ‪ FirstValue = 0‬ﺍﺳﺖ‪ ،‬ﻛﻪ ﻣیﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺗﻐﻴﻴﺮ ﺩﺍﺩ‪.‬‬

‫‪ .۲‬ﻣﻘﺪﺍﺭ ﻧﻬﺎﻳﯽ ﻫﻤﻴﺸﻪ ‪ EndValue - 1‬ﺍﺳﺖ‪.‬‬

‫‪ .۳‬ﭘﻴﺶﻓﺮﺽ ‪ step = 1‬ﺍﺳﺖ‪ ،‬ﻛﻪ ﻣیﺗﻮﺍﻥ ﺁﻥ ﺭﺍ ﺗﻐﻴﻴﺮ ﺩﺍﺩ‪.‬‬

‫‪ .۴‬ﻫﻤﻴﺸﻪ ‪ FirstValue ≤ EndValue‬ﺍﺳﺖ‪ ،‬ﻣﮕﺮ ﺍﻳﻦ ﻛﻪ ﻣﻘﺪﺍﺭ ﮔﺎﻡ ﻣﻨﻔی ﺑﺎﺷﺪ‪.‬‬

‫‪ .۵‬ﻣﻘﺎﺩﻳﺮ ‪ FirstValue, EndValue, Step‬ﻫﻤﻴﺸﻪ ﺍﻋﺪﺍﺩ ﺻﺤﻴح ﻫﺴﺘﻨﺪ‪ ،.‬ﭼﺮﺍ ﻛﻪ ﺗﻌﺪﺍﺩ ﺩﻓﻌﺎﺕ ﺗﻜﺮﺍﺭ‬
‫ﻧﻤیﺗﻮﺍﻧﺪ ﻏﻴﺮ ﺻﺤﻴح ﺑﺎﺷﺪ‪.‬‬

‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫‪# iterate from k= 0 to k=4‬‬
‫‪for k in range (5):‬‬
‫)‪print (k*k‬‬

‫‪Out[1]:‬‬ ‫‪0‬‬
‫‪1‬‬
‫‪4‬‬
‫‪9‬‬
‫‪16‬‬

‫ﺷﺮخ ﻋﻤﻠﻴﺎﺕ ﻛﺪ ﺑﺎلا ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪.‬‬

‫ﻣﻘﺪﺍﺭ ‪ k‬ﭼﺎﭖ ﺁﺧﺮﻳﻦ ﻣﻘﺪﺍﺭ ﺩﻧﺒﺎﻟﻪ ﺭخ ﺩﺍﺩﻩ؟‬ ‫ﭘﻴﻤﺎﻳﺶ‬


‫ﺧﻴﺮ‬ ‫‪۰‬‬ ‫‪۰‬‬ ‫ﺍﻭﻟﻴﻦ‬
‫ﺧﻴﺮ‬ ‫‪۱‬‬ ‫‪۱‬‬ ‫ﺩﻭﻣﻴﻦ‬
‫ﺧﻴﺮ‬ ‫‪۴‬‬ ‫‪۲‬‬ ‫ﺳﻮﻣﻴﻦ‬
‫ﺧﻴﺮ‬ ‫‪۹‬‬ ‫‪۳‬‬ ‫ﭼﻬﺎﺭﻣﻴﻦ‬
‫ﺑﻠﻪ‬ ‫‪۱۶‬‬ ‫‪۴‬‬ ‫ﭘﻨﺠﻤﻴﻦ‬
‫ ﺣﻠﻘﻪ‬.۳-۲ ۲۴
.‫ ﻣﻘﺪﺍﺭ ﻓﺎﻛﺘﻮﺭﻳﻞ ﻳﮏ ﻋﺪﺩ ﺻﺤﻴح ﻣﺤﺎﺳﺒﻪ ﻣیﮔﺮﺩﺩ‬for ‫ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺣﻠﻘﻪ‬:‫ﻣﺜﺎﻝ‬

In [1]: n= int ( input ('Enter number :'))


factorial =1
if n ==0 or n ==1:
print (' factorial =', factorial )
else :
for i in range (2 ,n +1):
factorial *=i
print (' factorial =', factorial )

Out[1]: Enter number : 4


factorial = 24

:‫ﻣلاﺣﻈﺎﺕ‬

‫ ﭼﺮﺍ ﻛﻪ ﻓﺎﻛﺘﻮﺭﻳﻞ ﺍﻋﺪﺍﺩ ﺻﻔﺮ ﻭ ﻳﮏ ﺑﻪ ﻣﺤﺎﺳﺒﻪ ﻧﻴﺎﺯ ﻧﺪﺍﺭﺩ ﻭ ﻣﻘﺎﺩﺭ ﺁﻥ ﻳﮏ‬،‫ ﺍﺳﺖ‬۲ ‫ ﺍﺯ‬range ‫ ﺷﺮﻭع ﺗﺎﺑع‬.۱
.‫ﺍﺳﺖ‬

.‫ ﺧﺘﻢ ﺷﻮﺩ‬n ‫ ﺧﻨﺜی ﺷﻮﺩ ﻭ ﺍﻧﺘﻬﺎﯼ ﺣﻠﻘﻪ ﺑﻪ‬n-1 ‫ ﻳﻜی ﺍﺿﺎﻓﻪ ﻣیﮔﺮﺩﺩ ﺗﺎ ﺍﺛﺮ‬range ‫ ﺩﺭ ﺗﺎﺑع‬n ‫ ﺑﻪ ﻣﺘﻐﻴﺮ‬.۲

‫ ﺣﻠﻘﻪﻫﺎﯼ ﺗﻮ ﺩﺭ ﺗﻮ‬۶-۳-۲

.‫ ﻳﻌﻨی ﻳﮏ ﺣﻠﻘﻪ ﺩﺭ ﺣﻠﻘﻪﺍﯼ ﺩﻳﮕﺮ‬.‫ﺑﻌﻀی ﺍﺯ ﺗﻜﺮﺍﺭﻫﺎﯼ ﭘﻴﭽﻴﺪﻩ ﻧﻴﺎﺯ ﺑﻪ ﺣﻠﻘﻪﻫﺎﯼ ﺗﻮ ﺩﺭ ﺗﻮ ﺩﺍﺭﻧﺪ‬

In [2]: # Initialize constant variables for the max ranges .


NMAX = 4
XMAX = 10

# Print table header .


for n in range (1 , NMAX + 1) :
print (" %10 s" % "x^", n, end ="")

print ("\n", " ", "-" * 45)

# Print table body.


for x in range (1 , XMAX + 1) :
# Print the x row in the table.
for n in range (1 , NMAX + 1) :
print (" %10.0 f" % x ** n, end ="")
print ()
‫‪۲۵‬‬ ‫ﻓﺼﻞ ‪ .۲‬ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬
‫‪Out[2]:‬‬ ‫‪x^ 1‬‬ ‫‪x^ 2‬‬ ‫‪x^ 3‬‬ ‫‪x^ 4‬‬
‫‪-----------------------------------------‬‬
‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬ ‫‪1‬‬
‫‪2‬‬ ‫‪4‬‬ ‫‪8‬‬ ‫‪16‬‬
‫‪3‬‬ ‫‪9‬‬ ‫‪27‬‬ ‫‪81‬‬
‫‪4‬‬ ‫‪16‬‬ ‫‪64‬‬ ‫‪256‬‬
‫‪5‬‬ ‫‪25‬‬ ‫‪125‬‬ ‫‪625‬‬
‫‪6‬‬ ‫‪36‬‬ ‫‪216‬‬ ‫‪1296‬‬
‫‪7‬‬ ‫‪49‬‬ ‫‪343‬‬ ‫‪2401‬‬
‫‪8‬‬ ‫‪64‬‬ ‫‪512‬‬ ‫‪4096‬‬
‫‪9‬‬ ‫‪81‬‬ ‫‪729‬‬ ‫‪6561‬‬
‫‪10‬‬ ‫‪100‬‬ ‫‪1000‬‬ ‫‪10000‬‬

‫‪ ۱-۶-۳-۲‬ﻓﺮﻣﺖﻫﺎ‬

‫ﺑﻪ ﻃﻮﺭ ﻋﺎﺩﯼ ﻣﺎ ﻛﻨﺘﺮﻟی ﺭﻭﯼ ﻧﺤﻮﻩ ﺧﺮﻭﺟی ﺑﺮﻧﺎﻣﻪ ﻧﺪﺍﺭﻳﻢ ﻳﺎ ﺍﮔﺮ ﻫﺴﺖ ﺍﻧﺪﮎ ﺍﺳﺖ‪ .‬ﻣﺜل ًا ﻛﻨﺘﺮﻝ ﺭﻭﯼ ﺗﻌﺪﺍﺩ‬
‫ﺍﻋﺸﺎﺭ ﻳﮏ ﻋﺪﺩ ﺍﻋﺸﺎﺭﯼ‪ ،‬ﻳﺎ ﻛﻨﺘﺮﻝ ﺟﺎﯼ ﺧﺎﻟی ﻗﺒﻞ ﻳﺎ ﺑﻌﺪ ﺍﺯ ﺍﻋﺪﺍﺩ ﻭ ﺭﺷﺘﻪﻫﺎ‪ ،‬ﻳﺎ ﻧﻮع ﭼﻴﺪﻣﺎﻥ )ﺭﺍﺳﺖﭼﻴﻦ‪،‬‬
‫ﻭﺳﻂﭼﻴﻦ ﻭ ﭼﭗﭼﻴﻦ( ﺁﻧﻬﺎ ﺩﺭ ﺍﺧﺘﻴﺎﺭ ﻣﺎ ﻧﻴﺴﺖ‪ .‬ﺩﺭ ﺍﻳﻨﺠﺎ ﻣیﺧﻮﺍﻫﻴﻢ ﺑﺎ ﺍﺑﺰﺍﺭﯼﻫﺎﻳﯽ ﺁﺷﻨﺎ ﺷﻮﻳﻢ ﻛﻪ ﺍﻣﻜﺎﻧﺎﺕ‬
‫ﺑﻴﺸﺘﺮﯼ ﺑﺮﺍﯼ ﻛﻨﺘﺮﻝ ﺁﻧﻬﺎ ﺩﺭ ﺍﺧﺘﻴﺎﺭ ﻣﺎ ﺑﮕﺬﺍﺭﺩ‪ ،‬ﻛﻪ ﺑﻪ ﺁﻧﻬﺎ ﺍﺻﻄلاﺣ ًﺎ ﻓﺮﻣﺖ ﮔﻮﻳﻨﺪ‪ .‬ﺍﻧﻮﺍﻉ ﺁﻧﻬﺎ ﺭﺍ ﺩﺭ ﻣﺜﺎﻝﻫﺎﯼ ﺯﻳﺮ‬
‫ﻣلاﺣﻈﻪ ﻣیﻛﻨﻴﺪ‪.‬‬
‫ﻣﺜﺎﻝ ‪ :۱‬ﺧﺮﻭﺟی ﺩﺭ ﺣﺎﻟﺖ ﻋﺎﺩﯼ ﺍﺳﺖ‪ ،‬ﺯﻳﺮﺍ ﺩﺭ ﺁﻛﻮلاﺩ ﭼﺎﭖ‪ ،‬ﭼﻴﺰﯼ ﺩﺭج ﻧﺸﺪﻩ ﺍﺳﺖ‪.‬‬
‫‪In [1]:‬‬ ‫‪for i in range (15):‬‬
‫) )‪print ("{}". format (i‬‬

‫‪Out[1]:‬‬ ‫‪0‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫‪9‬‬
‫‪10‬‬
‫‪11‬‬
‫‪12‬‬
‫‪13‬‬
‫‪14‬‬

‫ﻣﺜﺎﻝ ‪:۲‬‬
‫‪In [2]:‬‬ ‫‪for i in range (15):‬‬
‫))‪print (" {:2} ". format (i‬‬
‫‪ .۳-۲‬ﺣﻠﻘﻪ‬ ‫‪۲۶‬‬
‫‪Out[2]:‬‬ ‫‪0‬‬
‫‪1‬‬
‫‪2‬‬
‫‪3‬‬
‫‪4‬‬
‫‪5‬‬
‫‪6‬‬
‫‪7‬‬
‫‪8‬‬
‫‪9‬‬
‫‪10‬‬
‫‪11‬‬
‫‪12‬‬
‫‪13‬‬
‫‪14‬‬

‫ﻳﻌﻨی ﺑﺮﺍﯼ ﺍﻋﺪﺍﺩ ﺧﺮﻭﺟی ﻓﺮﻣﺖ }‪ {:2‬ﻣﺸﺨﺺ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﭘﺲ ﺩﻭ ﻣﺤﻞ ﺑﺮﺍﯼ ﺁﻧﻬﺎ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣیﺷﻮﺩ ﻭ‬
‫ﺍﻋﺪﺍﺩ ﻫﻢ ﺭﺍﺳﺖﭼﻴﻦ ﻣیﺷﻮﻧﺪ‪ .‬ﺑﻪ ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﺭﻗﻢ ﻳﻜﺎﻥ ﺍﻋﺪﺍﺩ ﺩﺭ ﻳﮏ ﺳﺘﻮﻥ ﻗﺮﺍﺭ ﻣیﮔﻴﺮﻧﺪ‪.‬‬

‫‪In [1]:‬‬ ‫‪x,y,z =1234 ,1367 ,3345‬‬


‫) )‪print (" {:4 ,} ". format (x‬‬
‫) )‪print (" {:4 ,} ". format (y‬‬
‫) )‪print (" {:4 ,} ". format (z‬‬

‫‪Out[1]:‬‬ ‫‪1 ,234‬‬


‫‪1 ,367‬‬
‫‪3 ,345‬‬

‫ﻣﺜﺎﻝ ‪ :۳‬ﻣﺜﺎﻝ ‪ ۲‬ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﻣیﺗﻮﺍﻥ ﻧﻮﺷﺖ‪:‬‬

‫‪In [2]:‬‬ ‫‪x,y,z =1234 ,1367 ,3345‬‬


‫) )‪print (" {:4 ,}\ n {:4 ,}\ n {:4 ,} ". format (x,y,z‬‬

‫‪Out[2]:‬‬ ‫‪1 ,234‬‬


‫‪1 ,367‬‬
‫‪3 ,345‬‬

‫ﻣﺜﺎﻝ ‪ :۴‬ﺣﻠﻘﻪﻫﺎﯼ ﺗﻮ ﺩﺭ ﺗﻮ ﺑﺎ ﺧﺮﻭﺟی ﻓﺮﻣﺖﺩﺍﺭ‬

‫‪In [3]:‬‬ ‫‪for hours in range (1 ,2):‬‬


‫‪for minutes in range (0 ,11):‬‬
‫)) ‪print (" Time {:02}:{:02} ". format ( hours , minutes‬‬
۲۷ ‫ ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬.۲ ‫ﻓﺼﻞ‬
Out[3]: Time 01:00
Time 01:01
Time 01:02
Time 01:03
Time 01:04
Time 01:05
Time 01:06
Time 01:07
Time 01:08
Time 01:09
Time 01:10

‫ ﻓﺮﻣﺖ ﺍﻋﺪﺍﺩ ﺍﻋﺸﺎﺭﯼ‬:۵ ‫ﻣﺜﺎﻝ‬


In [1]: x = 0.1
y = 123.456789
print (" {:.1 f} {:.1 f}". format (x,y) )
print (" {:.2 f} {:.2 f}". format (x,y) )
print (" {:.3 f} {:.3 f}". format (x,y) )
print (" {:.4 f} {:.4 f}". format (x,y) )
print (" {:.5 f} {:.5 f}". format (x,y) )
print (" {:.6 f} {:.6 f}". format (x,y) )

Out[1]: 0.1 123.5


0.10 123.46
0.100 123.457
0.1000 123.4568
0.10000 123.45679
0.100000 123.456789

:۶ ‫ﻣﺜﺎﻝ‬
In [2]: x = 0.1
y = 123.456789
print (" |{:10.1 f}| |{:10.1 f}|". format (x,y) )
print (" |{:10.2 f}| |{:10.2 f}|". format (x,y) )
print (" |{:10.3 f}| |{:10.3 f}|". format (x,y) )
print (" |{:10.4 f}| |{:10.4 f}|". format (x,y) )
print (" |{:10.5 f}| |{:10.5 f}|". format (x,y) )
print (" |{:10.6 f}| |{:10.6 f}|". format (x,y) )

Out[2]: | 0.1| | 123.5|


| 0.10| | 123.46|
| 0.100| | 123.457|
| 0.1000| | 123.4568|
| 0.10000| | 123.45679|
| 0.100000| |123.456789|
‫‪ .۳-۲‬ﺣﻠﻘﻪ‬ ‫‪۲۸‬‬
‫ﻣﺜﺎﻝ ‪:۷‬‬

‫‪In [1]:‬‬ ‫‪cost = 3.07‬‬


‫‪tax‬‬ ‫‪= cost * 0.06‬‬
‫‪total = cost + tax‬‬
‫)) ‪print (" Cost : $ {:5.2 f}". format ( cost‬‬
‫‪print (" Tax :‬‬ ‫)) ‪{:5.2 f}". format ( tax‬‬
‫)"‪print (" ------------‬‬
‫)) ‪print (" Total : $ {:5.2 f}". format ( total‬‬

‫‪Out[1]:‬‬ ‫‪Cost : $ 3.07‬‬


‫‪Tax :‬‬ ‫‪0.18‬‬
‫‪------------‬‬
‫‪Total : $ 3.25‬‬

‫‪ ۲-۶-۳-۲‬ﻭﺍﺭﺩ ﻛﺮﺩﻥ ﻣﺎﮊﻭﻝ ﺩﺭ ﭘﺎﻳﺘﻮﻥ‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻗﺒل ًا ﺩﻳﺪﻳﻢ ﻳﮏ ﺗﻌﺪﺍﺩ ﺗﻮﺍﺑع ﭘﻴﺶﺳﺎﺧﺘﻪ ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺍﺯ ﺁﻧﻬﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺷﺪ‪ .‬ﻣﺜﻞ‪،print() :‬‬
‫)(‪ input‬ﻭ )(‪ .len‬ﭘﺎﻳﺘﻮﻥ ﺑﻪ ﺗﻌﺪﺍﺩﯼ ﻛﺘﺎﺑﺨﺎﻧﻪ ﺍﺳﺘﺎﻧﺪﺍﺭﺩ ﻣﺘﺼﺪﻝ ﻣیﺷﻮﺩ ﻛﻪ ﻣﺎﮊﻭﻝ ‪ ۱‬ﻧﺎﻣﻴﺪﻩ ﻣیﺷﻮﺩ‪.‬‬
‫ﻫﺮ ﻣﺎﮊﻭﻝ ﻳﮏ ﮔﺮﻭﻩ ﺍﺯ ﺗﻮﺍﺑع ﺭﺍ ﺩﺭ ﺑﺮﻣی ﮔﻴﺮﺩ ﻛﻪ ﻣیﺗﻮﺍﻥ ﺍﺯ ﺁﻧﻬﺎ ﺩﺭ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ‪ .‬ﺑﺮﺍﯼ ﻣﺜﺎﻝ ﻣﺎﮊﻭﻝ‬
‫‪ math‬ﻛﻪ ﺷﺎﻣﻞ ﺗﻮﺍﺑع ﺭﻳﺎﺿی ﺍﺳﺖ‪ .‬ﻣﺎﮊﻭﻝ ﺩﻳﮕﺮﯼ ﺗﺤﺖ ﻋﻨﻮﺍﻥ ‪ random‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺷﺎﻣﻞ ﺗﻮﺍﺑع ﻣﺮﺗﺒﻂ ﺑﻪ‬
‫ﺍﻋﺪﺍﺩ ﺗﺼﺎﺩﻓی ﺍﺳﺖ‪.‬‬
‫ﻗﺒﻞ ﺍﺯ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﻮﺍﺑع ﺩﺭﻭﻥ ﻣﺎﮊﻭﻝ ﺑﺎﻳﺪ ﺍﺗﺼﺎﻝ ﺁﻥ ﺭﺍ ﺑﺎ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺮﻗﺮﺍﺭ ﻧﻤﻮﺩ‪ .‬ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﺎﺭ ﺍﺯ ﻓﺮﻣﺎﻥ ‪import‬‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﻣﺜل ًا ﺩﺭ ﻣﻮﺭﺩ ﻣﺎﮊﻭﻝ ‪ random‬ﻣیﻧﻮﻳﺴﻴﻢ ‪ import random‬ﻛﻪ ﺍﺯ ﻃﺮﻳﻖ ﺁﻥ ﻣیﺗﻮﺍﻥ ﺑﻪ ﺗﺎﺑع‬
‫)(‪ random.ranint‬ﺩﺳﺖ ﻳﺎﻓﺖ‪.‬‬

‫‪In [2]:‬‬ ‫‪import random‬‬


‫‪for i in range (5):‬‬
‫))‪print ( random . randint (1 , 10‬‬

‫‪Out[2]:‬‬ ‫‪9‬‬
‫‪2‬‬
‫‪9‬‬
‫‪1‬‬
‫‪8‬‬

‫ﺗﻮﺟﻪ ﺩﺍﺷﺖ ﺑﺎﺷﻴﺪ ﻛﻪ ﺑﺎ ﺍﺟﺮﺍﯼ ﻫﺮ ﺑﺎﺭ ﺍﻳﻦ ﺑﺮﻧﺎﻣﻪ‪ ،‬ﭘﻨﺞ ﻋﺪﺩ ﺗﻮﻟﻴﺪ ﺷﺪﻩ ﺗﻐﻴﻴﺮ ﻣیﻛﻨﺪ‪ .‬ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﭘﻨﺞ ﻋﺪﺩ ﺗﻮﻟﻴﺪ‬
‫ﺩﺭ ﻫﺮ ﺑﺎﺭ ﺍﺟﺮﺍ ﻣﻘﺎﺩﻳﺮ ﺛﺎﺑﺘی ﺑﻤﺎﻧﻨﺪ‪ ،‬ﺑﺎﻳﺪ ﺍﺯ ﺗﺎﺑع )(‪ seed‬ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬

‫‪1. module‬‬
‫‪۲۹‬‬ ‫ﻓﺼﻞ ‪ .۲‬ﻣﺤﻴﻂﻫﺎﯼ ﻛﻨﺘﺮﻟی‬
‫‪In [1]:‬‬ ‫‪# random module is imported‬‬
‫‪import random‬‬
‫‪# Any number can be used in place of zero.‬‬
‫)‪random . seed (0‬‬
‫‪for i in range (5):‬‬
‫‪# Generated random number will be between 1 to 5.‬‬
‫))‪print ( random . randint (1 ,5‬‬

‫‪Out[1]:‬‬ ‫‪4‬‬
‫‪4‬‬
‫‪1‬‬
‫‪3‬‬
‫‪5‬‬

‫ﺍﮔﺮ ﺩﺭ ﻳﮏ ﺑﺮﻧﺎﻣﻪ ﺍﺯ ﭼﻨﺪﻳﻦ ﻣﺎﮊﻭﻝ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‪ ،‬ﺑﺎﻳﺪ ﻧﺎﻡ ﻣﺎﮊﻭﻝﻫﺎ ﺑﺎ ﻋلاﻣﺖ ﻛﺎﻣﻨﺖ ﺍﺯ ﻫﻢ ﺟﺪﺍ ﺷﻮﻧﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪import random , math , s y s , o s‬‬
‫ﺍﻟﺒﺘﻪ ﺑﺮﺍﯼ ﺧﻮﺍﻧﺶ ﺑﻬﺘﺮ ُﻛﺪﻫﺎ‪ ،‬ﺭﺳﻢ ﺑﺮ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﻫﺮ ﻣﺎﮊﻭﻝ ﺭﺍ ﺩﺭ ﺳﻄﺮ ﺟﺪﺍﮔﺎﻧﻪ ﺑﻨﻮﻳﺴﻨﺪ‪.‬‬
‫‪import‬‬ ‫‪random‬‬
‫‪import‬‬ ‫‪math‬‬
‫‪import‬‬ ‫‪sys‬‬
‫‪import‬‬ ‫‪os‬‬
‫ﻓﺮﻡ ﺩﻳﮕﺮﯼ ﺍﺯ ﺍﺗﺼﺎﻝ ﻣﺎﮊﻭﻝ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺩﺭ ﺁﻥ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﮤ ‪ from‬ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﻧﺎﻡ‬
‫ﻣﺎﮊﻭﻝ ﺩﺭ ﺍﺩﺍﻣﻪ ‪ from‬ﻣیﺁﻳﺪ‪ .‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ‪ import‬ﻭ ﻋلاﻣﺖ ﺳﺘﺎﺭﻩ‪ ،‬ﻣیﺗﻮﺍﻥ ﺍﺗﺼﺎﻝ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﻧﻮﺷﺖ‪:‬‬
‫∗ ‪from random import‬‬
‫ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﺑﺮﺍﯼ ﺗﻮﺍﺑع ﺩﺭﻭﻥ ﻣﺎﮊﻭﻝ ‪ random‬ﺩﻳﮕﺮ ﻧﻴﺎﺯﯼ ﺑﻪ ﭘﻴﺸﻮﻧﺪ ‪ random ۱‬ﻧﻴﺴﺖ‪ .‬ﺍﻣﺎ ﺑﺮﺍﯼ ﺧﻮﺍﻧﺶ‬
‫ﺑﻬﺘﺮ‪ ،‬ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺲﻫﺎ ﺗﺮﺟﻴح ﻣیﺩﻫﻨﺪ ﻛﻪ ﻧﺎﻡ ﻣﺎﮊﻭﻝ ﺑﻪ ﮔﻮﻧﻪﺍﯼ ﺑﻪ ﺑﺮﻧﺎﻣﻪ ﺍﺗﺼﺎﻝ ﭘﻴﺪﺍ ﻛﻨﺪ ﻛﻪ ﺍﺯ ﭘﻴﺸﻮﻧﺪ ﻧﺎﻡ‬
‫ﻣﺎﮊﻭﻝ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‪.‬‬
‫ﮔﺎﻫی ﺍﻭﻗﺎﺕ ﻣﺎﮊﻭﻝﻫﺎﻳﯽ ﻛﻪ ﻧﺎﻡ ﻃﻮلاﻧی ﺩﺍﺭﻧﺪ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﻣﺨﺘﺼﺮ ﻣیﻧﻮﻳﺴﻨﺪ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪ ،‬ﻧﺎﻡ ﻣﺨﺘﺼﺮ‬
‫ﺷﺪﻩ ﭼﻨﺪ ﻣﺎﮊﻭﻝ ﺭﺍ ﺫﻳل ًا ﻣلاﺣﻈﻪ ﻣیﻛﻨﻴﺪ‪.‬‬
‫‪import numpy a s np‬‬
‫‪import m a t p l o t l i b . p y p l o t a s p l t‬‬
‫‪import P a n d a s a s pd‬‬
‫ﻣﻮﺭﺩ ﺩﻭﻡ ﺍﺯ ﻣﺜﺎﻝ ﺍﺧﻴﺮ ﺭﺍ ﻣیﺗﻮﺍﻥ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﻧﻴﺰ ﻣیﺗﻮﺍﻥ ﻧﻮﺷﺖ‪:‬‬
‫‪from m a t p l o t l i b import p y p l o t‬‬
‫ﺩﺭ ﺍﻳﻦ ﺻﻮﺭﺕ ﺑﺠﺎﯼ ﭘﺴﻮﻧﺪ ‪ plt‬ﺍﺯ ﭘﺴﻮﻧﺪ ‪ pyplot‬ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪.‬‬

‫‪1. prefix‬‬
‫���‬

‫‪۳‬‬
‫ﺗﻮﺍﺑع ﺩﺭ ﭘﺎﻳﺘﻮﻥ‬

‫ﻣﻘﺪﻣﻪ‬ ‫‪۱-۳‬‬
‫ﺩﺭ ﺯﺑﺎﻥﻫﺎﯼ ﺑﺮﻧﺎﻣﻪﻧﻮﻳﺴی ﻣیﺗﻮﺍﻥ ﺗﺎﺑع ﺍﻳﺠﺎﺩ ﻧﻤﻮﺩ‪ .‬ﺍﻣﺎ ﭼﺮﺍ ﺍﻳﻦ ﺷی ﻣﻔﻴﺪ ﺍﺳﺖ؟‬

‫• ﺟﻠﻮﮔﻴﺮﯼ ﺍﺯ ﺗﻜﺮﺍﺭ ُﻛﺪﻫﺎﯼ ﻏﻴﺮ ﺿﺮﻭﺭﯼ ﻭ ﻛﻮﭼﻜﺘﺮ ﺷﺪﻥ ﺑﺮﻧﺎﻣﻪﻫﺎ‪ .‬ﺑﻪﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻣﺤﺎﺳﺒﻪ ﺗﺮﻛﻴﺐ ‪ m‬ﺍﺯ‬
‫) (‬ ‫‪ n‬ﺭﺍ ﺩﺭ ﻧﻈﺮ ﺑﮕﻴﺮﻳﺪ‪.‬‬
‫‪n‬‬ ‫!‪n‬‬
‫=‬
‫‪m‬‬ ‫!)‪m!(n − m‬‬
‫ﻣﺎ ﺑﺮﺍﯼ ﻣﺤﺎﺳﺒﻪ ﺟﻤلاﺕ ﺍﻳﻦ ﺭﺍﺑﻄﻪ ﻧﻴﺎﺯ ﺑﻪ ﻣﺤﺎﺳﺒﻪ ﻓﺎﻛﺘﻮﺭﻳﻞ ﺩﺍﺭﻳﻢ‪ .‬ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﺑﺮﺍﯼ ﻣﺤﺎﺳﺒﻪ ﺁﻥ‬
‫ﻫﺮ ﺑﺎﺭ ُﻛﺪ ﺑﻨﻮﻳﺴﻴﻢ ﺍﻳﻦ ﻛﺎﺭ ﺑﺴﻴﺎﺭ ﻃﻮلاﻧی ﻭ ﺧﺴﺘﻪﻛﻨﻨﺪﻩ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪ .‬ﺩﺭ ﺻﻮﺭﺗی ﻛﻪ ﻣیﺗﻮﺍﻥ ﺍﺯ ﻳﮏ ﺗﺎﺑع‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ ﻛﻪ ﻭﻇﻴﻔﻪ ﺁﻥ ﻣﺤﺎﺳﺒﻪ ﻓﺎﻛﺘﻮﺭﻳﻞ ﻳﮏ ﻋﺪﺩ ﺍﺳﺖ‪ .‬ﺑﻪ ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﻳﮏ ﺑﺎﺭ ﺍﻳﻦ ﺗﺎﺑع ﻧﻮﺷﺘﻪ‬
‫ﻣیﺷﻮﺩ ﻭ ﺳﭙﺲ ﺑﻪ ﺩﻓﻌﺎﺕ ﺍﺯ ﺁﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻣیﮔﺮﺩﺩ‪.‬‬

‫• ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﺎﺑع‪ ،‬ﻣﻮﺟﺐ ﺳﺎﺧﺘﺎﺭﻳﺎﻓﺘﮕی ﺑﺮﻧﺎﻣﻪﻫﺎ ﻣیﮔﺮﺩﺩ‪ .‬ﻳﻌﻨی ﻣیﺗﻮﺍﻥ ﻳﮏ ﺑﺮﻧﺎﻣﻪ ﺑﺰﺭﮒ ﺭﺍ ﺑﻪ ﺍﺟﺰﺍ‬
‫ﻛﻮﭼﻜﺘﺮ ﺗﻘﺴﻴﻢ ﻧﻤﻮﺩ ﺑﻪ ﻧﺤﻮﯼ ﻛﻪ ﻫﺮ ُﺟﺰ ﻳﮏ ﻭﻇﻴﻔﻪ ﺭﺍ ﺑﻪ ﻋﻬﺪﻩ ﻣیﮔﻴﺮﺩ‪ .‬ﺑﻪ ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﻧﮕﻪﺩﺍﺭﯼ‬
‫ﻭ ﺗﻮﺳﻌﻪ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﺴﻴﺎﺭ ﺳﺎﺩﻩﺗﺮ ﻭ ﻋﻤﻠیﺗﺮ ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪ .‬ﺩﺭ ﻣﺜﺎﻝ ﺑﺎلا ﻳﮏ ُﺟﺰ ﺍﺯ ﺍﺟﺰﺍ ﺑﺮﻧﺎﻣﻪ‪ ،‬ﻣﺤﺎﺳﺒﻪ‬
‫ﻓﺎﻛﺘﻮﺭﻳﻞ ﻳﮏ ﻋﺪﺩ ﺍﺳﺖ ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﺍﺻﻠی ﺍﺯ ﺁﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻣیﻛﻨﺪ‪.‬‬
‫ﻛﺎﺭﺑﺮ ‪۲‬‬ ‫ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﺩﻭ ﻧﻮع ﺗﺎﺑع ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ .‬ﺗﻮﺍﺑع ﭘﻴﺶﺳﺎﺧﺘﻪ ‪ ۱‬ﻭ ﺗﻮﺍﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ‬
‫ﺗﻮﺍﺑع ﭘﻴﺶﺳﺎﺧﺘﻪ‪ ،‬ﺁﻥ ﺩﺳﺘﻪ ﺗﻮﺍﺑﻌی ﻫﺴﺘﻨﺪ ﻛﻪ ﺍﺯ ﻗﺒﻞ ﺳﺎﺧﺘﻪ ﺷﺪﻩ ﻭ ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﻗﺮﺍﺭ ﺩﺍﺭﻧﺪ‪ .‬ﻣﺜﻞ‪،len() ،print() :‬‬
‫)(‪ type‬ﻭ … ﻛﻪ ﺑﺮﺍﯼ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺭ ﺁﻧﻬﺎ ﻛﺎﻓی ﺍﺳﺖ ﻛﻪ ﻓﺮﺍﺧﻮﺍﺩﻩ ﺷﻮﻧﺪ‪ .‬ﺻﺪﺍ ﺯﺩﻥ ﻭ ﻳﺎ ﻓﺮﺍﺧﻮﺍﻧی ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﺎﻡ‬
‫‪1. Built_in functions‬‬
‫‪2. user defined functions‬‬

‫‪۳۰‬‬
‫‪۳۱‬‬ ‫ﻓﺼﻞ ‪ .۳‬ﺗﻮﺍﺑع ﺩﺭ ﭘﺎﻳﺘﻮﻥ‬
‫ﺁﻧﻬﺎ ﺻﻮﺭﺕ ﻣیﮔﻴﺮﺩ‪ .‬ﺍﻣﺎ ﺩﺭ ﺗﻮﺍﺑع ﻧﻮع ﺩﻭﻡ‪ ،‬ﺍﺑﺘﺪﺍ ﺑﺎﻳﺪ ﺗﺎﺑع ﺗﻌﺮﻳﻒ ﺷﻮﺩ ﻭ ﺳﭙﺲ ﺑﺮﺍﯼ ﺍﻋﻤﺎﻝ ﺗﺎﺑع‪ ،‬ﻧﺎﻡ ﺁﻥ ﺭﺍ ﺻﺪﺍ‬
‫ﻣیﺯﻧﻴﻢ‪ .‬ﺗﻮﺿﻴح ﺑﻴﺸﺘﺮ ﺭﺍ ﺩﺭ ﺍﺩﺍﻣﻪ ﻣلاﺣﻈﻪ ﺧﻮﺍﻫﻴﺪ ﻧﻤﻮﺩ‪.‬‬

‫‪ ۲-۳‬ﺗﻮﺍﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻛﺎﺭﺑﺮ‬


‫ﺗﺎﺑع ﮔﺮﻭﻫی ﺍﺯ ﺩﺳﺘﻮﺭﺍﺕ ﺍﺳﺖ ﻛﻪ ﺑﺎ ﻫﻢ ﻋﻤﻠی ﺭﺍ ﺳﺎﻣﺎﻥ ﻣیﺩﻫﻨﺪ‪ .‬ﺻﻮﺭﺕ ﻛﻠی ﺗﺎﺑع ﺑﻪ ﺷﺮح ﺯﻳﺮ ﺍﺳﺖ‪.‬‬
‫‪d e f f u n c t i o n _ n a m e ( a r g 1 , a r g 2 , . . . , argN ) :‬‬
‫‪body o f f u n c t i o n‬‬
‫ﺳﺎﺧﺘﺎﺭ ﺗﺎﺑع ﺑﻪ ﺷﺮح ﺯﻳﺮ ﺍﺳﺖ‪.‬‬

‫‪ .۱‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪ ،def‬ﺍﻳﻦ ﻣﺨﻔﻒ ﺑﻪ ﻣﻌﻨﺎﯼ ﺗﻌﺮﻳﻒ ‪) ۱‬ﺗﺎﺑع( ﻣیﺑﺎﺷﺪ‪.‬‬

‫‪ .۲‬ﺗﺎﺑع ﻧﻴﺎﺯﻣﻨﺪ ﻳﮏ ﻧﺎﻡ )‪ (function_name‬ﺍﺳﺖ‪.‬‬

‫‪ .۳‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﭘﺮﺍﻧﺘﺰ ﺑﺎﺯ ﻭ ﺑﺴﺘﻪ ﺿﺮﻭﺭﯼ ﺍﺳﺖ ﻭﮔﺮﻧﻪ ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﻣیﺩﻫﺪ‪ .‬ﺩﺍﺧﻞ ﭘﺮﺍﻧﺘﺰ ﻋﻨﺎﺻﺮﯼ ﺑﻪ ﻧﺎﻡ‬
‫ﺁﺭﮔﻮﻣﺎﻥ ‪ ۲‬ﻗﺮﺍﺭ ﺩﺍﺭﺩ ﻛﻪ ﺍﺧﺘﻴﺎﺭﯼ ﺍﺳﺖ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣیﺗﻮﺍﻥ ﺗﺎﺑﻌی ﺩﺍﺷﺖ ﻛﻪ ﺁﺭﮔﻮﻣﺎﻥ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ‪.‬‬

‫‪ .۴‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻧﻤﺎﺩ »‪ ۳ «:‬ﺿﺮﻭﺭﯼ ﺍﺳﺖ ﻭﮔﺮﻧﻪ ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﻣیﺩﻫﺪ‪.‬‬

‫‪ .۵‬ﺑﺪﻧﻪ ﺗﺎﺑع‪ :‬ﻳﻌﻨی ﺩﺳﺘﻮﺭﺍﺗی ﻛﻪ ﺩﺍﺧﻞ ﺗﺎﺑع ﻗﺮﺍﺭ ﻣیﮔﻴﺮﻧﺪ ﻭ ﻛﻨﺘﺮﻝ ﺭﻭﯼ ﺁﻧﻬﺎ ﺍﻋﻤﺎﻝ ﻣیﺷﻮﺩ‪ .‬ﺩﺳﺘﻮﺭﺍﺗی ﻛﻪ‬
‫ﺩﺭ ﺑﺪﻧﻪ ﺗﺎﺑع ﻗﺮﺍﺭ ﺩﺍﺭﻧﺪ‪ ،‬ﺩﺍﺭﺍﯼ ﺗﻮﺭﻓﺘﮕی ‪ ۴‬ﻫﺴﺘﻨﺪ‪.‬‬

‫ﻣﺜﺎﻝ ‪:۱‬‬
‫‪In [1]:‬‬ ‫‪def foo ():‬‬
‫)' ‪print ('Hello ','Reza‬‬
‫)( ‪foo‬‬

‫‪Out[1]:‬‬ ‫‪Hello Reza‬‬

‫ﻣﺜﺎﻝ ‪:۲‬‬
‫‪In [2]:‬‬ ‫‪def foo ():‬‬
‫)' ‪print ('Hello ','Reza‬‬
‫)( ‪foo‬‬
‫)( ‪foo‬‬

‫‪Out[2]:‬‬ ‫‪Hello Reza‬‬


‫‪Hello Reza‬‬

‫‪1. definition‬‬
‫‪2. Argument‬‬
‫‪3. colon‬‬
‫‪4. indentation‬‬
‫‪ .۲-۳‬ﺗﻮﺍﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻛﺎﺭﺑﺮ‬ ‫‪۳۲‬‬
‫ﻣیﺗﻮﺍﻧﻴﻢ ﻛﻪ ﺑﺮﺍﯼ ﺗﺎﺑع ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﺳﺘﻮﺭ )(‪ input‬ﻫﺮ ﺍﺳﻤی ﺭﺍ ﻭﺍﺭﺩ ﻧﻤﻮﺩﻩ ﻭ ﺳﭙﺲ ﺁﻧﺮﺍ ﭼﺎﭖ ﻛﻨﻴﻢ‪ .‬ﻣﺜﺎﻝ ‪:۳‬‬
‫‪In [1]:‬‬ ‫‪def foo ():‬‬
‫)'‪name = input ('Enter your name :‬‬
‫) ‪print ('Hello ',name‬‬
‫)( ‪foo‬‬

‫‪Out[1]:‬‬ ‫‪Enter your name : Reza‬‬


‫‪Hello Reza‬‬

‫ﺩﺭ ﺳﻪ ﻣﺜﺎﻝ ﺍﺧﻴﺮ ﺗﺎﺑع )(‪ foo‬ﺑﺪﻭﻥ ﺁﺭﮔﻮﻣﺎﻥ ﺑﻮﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻳﺎ ﻳﮏ ﻧﺎﻡ ﻣﺸﺨﺺ ﺗﻜﺮﺍﺭ ﻣیﺷﺪ ﻭ ﻳﺎ ﺍﺳﻢ ﺭﺍ ﺍﺯ ﻃﺮﻳﻖ‬
‫‪ input‬ﻭﺍﺭﺩ ﻣیﻛﺮﺩﻳﻢ‪ .‬ﺍﻣﺎ ﺭﻭﺵ ﻣﻨﺎﺳﺐﺗﺮ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺑﺠﺎﯼ ﺗﻜﺮﺍﺭ ﻭ ﻭﺍﺭﺩ ﻧﻤﻮﺩﻥ ﺍﺳﺎﻣی ﺩﺭ ﺑﺪﻧﻪ ﺗﺎﺑع ﺍﺯ ﺍﻣﻜﺎﻥ‬
‫ﺁﺭﮔﻮﻣﺎﻥ ﺗﺎﺑع ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﻢ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫‪def foo ( name ):‬‬
‫) ‪print ('Hello ',name‬‬
‫)' ‪foo ('ava‬‬
‫)' ‪foo ('ali‬‬
‫)' ‪foo ('hamed‬‬

‫‪Out[2]:‬‬ ‫‪Hello ava‬‬


‫‪Hello ali‬‬
‫‪Hello hamed‬‬

‫ﺩﺭ ﺗﺎﺑع ﺑﺎلا ﺩﻭ ﻣﺮﺣﻠﻪ ﺭﺍ ﻣیﺗﻮﺍﻥ ﺍﺯ ﻫﻢ ﺟﺪﺍ ﻧﻤﻮﺩ‪ .‬ﺳﻄﺮﻫﺎﯼ ‪ ۱‬ﻭ ‪ ۲‬ﺑﺮﻧﺎﻣﻪ‪ ،‬ﺗﻌﺮﻳﻒ ﺗﺎﺑع ﻫﺴﺘﻨﺪ ﻭ ﺳﻄﺮﻫﺎﯼ ‪،۳‬‬
‫‪ ۴‬ﻭ ‪ ۵‬ﺗﺎﺑع ﺭﺍ ﺍﺣﻀﺎﺭ ‪ ۱‬ﻣیﻛﻨﺪ‪ .‬ﺑﻪ ﻣﺤﺾ ﺍﺣﻀﺎﺭ ﻳﺎ ﻓﺮﺍﺧﻮﺍﻧی ﺗﺎﺑع‪ ،‬ﻧﺘﻴﺠﻪ ﺁﻥ ﻇﺎﻫﺮ ﻣیﮔﺮﺩﺩ‪.‬‬

‫ﻣﻘﺪﺍﺭ ‪None‬‬ ‫‪۱-۲-۳‬‬


‫ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﻣﻘﺪﺍﺭﯼ ﺑﻪ ﻧﺎﻡ ‪ None‬ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﻫﻴچ ﻣﻘﺪﺍﺭﯼ ﻧﺪﺍﺭﺩ ﻭ ﺣﺮﻑ ﺍﻭﻝ ﺁﻥ ﻧﻴﺰ ﺑﻪ ﺻﻮﺭﺕ ﺑﺰﺭﮒ ﻧﻮﺷﺘﻪ‬
‫ﻣیﺷﻮﺩ‪ .‬ﻳﻜی ﺍﺯ ﺟﺎﻫﺎﻳﯽ ﻛﻪ ﺍﺯ ﺁﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ ﺩﺭ ﻣﻮﺭﺩ ﺗﺎﺑع )(‪ print‬ﺍﺳﺖ‪ .‬ﻋﻤﻞ ﺍﻳﻦ ﺗﺎﺑع ﻧﻤﺎﻳﺶ ﻣﺘﻦ ﺭﻭﯼ‬
‫ﺻﻔﺤﻪ ﻧﻤﺎﻳﺶ ﺍﺳﺖ‪ .‬ﻭ ﭼﻴﺰﯼ ﺑﻪ ﻋﻨﻮﺍﻥ ﭘﺎﺳﺦ‪ ،‬ﻣﺜﻞ ﺗﻮﺍﺑع )(‪ len‬ﻭ )(‪ input‬ﺑﺪﺳﺖ ﻧﻤیﺩﻫﺪ ﻭ ﺧﺮﻭﺟی ﻧﺪﺍﺭﺩ‪.‬‬
‫ﻳﺎ ﺍﺻﻄلاﺣ ًﺎ ﭼﻴﺰﯼ ﺑﺮﻧﻤیﮔﺮﺩﺍﻧﺪ‪ .‬ﺩﺭ ﻭﺍﻗﻊ ﺗﺎﺑع )(‪ print‬ﻳﮏ ﻣﻘﺪﺍﺭ ﺑﯽﻣﻘﺪﺍﺭ ‪ None‬ﺭﺍ ﺑﺮﻣیﮔﺮﺩﺍﻧﺪ ‪ .‬ﺑﻪ ﻣﺜﺎﻝ ﺯﻳﺮ‬
‫ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫‪In [3]:‬‬ ‫)'! ‪spam = print ('Hello‬‬
‫)) ‪print ( type ( spam‬‬
‫‪None == spam‬‬

‫‪Out[3]:‬‬ ‫! ‪Hello‬‬
‫>' ‪<class ' NoneType‬‬
‫‪True‬‬

‫‪1. invoke‬‬
۳۳ ‫ ﺗﻮﺍﺑع ﺩﺭ ﭘﺎﻳﺘﻮﻥ‬.۳ ‫ﻓﺼﻞ‬
return ‫ ﻛﻠﻴﺪ ﻭﺍﮊﻩ‬۱-۱-۲-۳

print() ‫ ﻛﺎﺭﯼ ﻛﻪ ﺗﺎﺑع‬.‫ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‬retuen ‫ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﻪ ﺗﺎﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺧﺮﻭﺟی ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﺑﺎﻳﺪ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩ‬
.‫ ﻣیﺗﻮﺍﻧﺪ ﻣﻘﺪﺍﺭ ﻳﮏ ﻣﺘﻐﻴﺮ ﻭ ﻳﺎ ﻋﺒﺎﺭﺕ ﺭﺍ ﺑﻪ ﻋﻨﻮﺍﻥ ﺧﺮﻭﺟی ﺑﺮﮔﺮﺩﺍﻧﺪ‬return ‫ ﻓﺮﻣﺎﻥ‬.‫ﻗﺎﺩﺭ ﺑﻪ ﺍﻧﺠﺎﻡ ﺁﻥ ﻧﻴﺴﺖ‬
:۱ ‫ﻣﺜﺎﻝ‬
In [1]: def divNum (a, b):
if b !=0:
return a//b
else :
return 0

print ( divNum (4 ,2))


print ( divNum (2 ,0))

Out[1]: 2
0

.‫ ﻛﻨﺘﺮﻝ ﺍﺯ ﺗﺎﺑع ﺧﺎﺭج ﻣیﺷﻮﺩ‬return ‫ ﺑﺎ ﻫﺮ ﺑﺎﺭ ﺍﺟﺮﺍﯼ ﻓﺮﻣﺎﻥ‬،‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﺩﺭ ﻣﺜﺎﻝ ﺑﺎلا ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‬
:۲ ‫ﻣﺜﺎﻝ‬
In [2]: def statFun (a , b):
difference =a-b
percent_diff =( difference /a )*100
return difference , percent_diff
difference , percent_diff = statFun (20 ,8)
print ( difference )
print ( percent_diff )

Out[2]: 12
60.0

‫ ﺑﺮﮔﺮﺩﺍﻧﺪﻩ ﺷﺪﻩ‬return ‫( ﺍﺯ ﺗﺎﺑع ﻧﺘﻴﺠﻪ ﺷﺪﻩ ﻛﻪ ﺗﻮﺳﻂ‬difference, percent_diff) ‫ﺩﺭ ﻣﺜﺎﻝ ﺑﺎلا ﺩﻭ ﻣﻘﺪﺍﺭ‬
.‫ﺍﺳﺖ‬
:۳ ‫ﻣﺜﺎﻝ‬
In [3]: def function ( inter ):
inter +=100
print (" Inside function call ",inter )

inter =100
print (" Before function call ",inter )
function ( inter )
print (" After function call ",inter )
‫‪ .۲-۳‬ﺗﻮﺍﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻛﺎﺭﺑﺮ‬ ‫‪۳۴‬‬
‫‪Out[3]:‬‬ ‫‪Before function call 100‬‬
‫‪Inside function call 200‬‬
‫‪After function call 100‬‬

‫ﻓﺮﺍﺧﻮﺍﻧی ﻳﮏ ﺗﺎﺑع ﺩﺍﺧﻞ ﺗﺎﺑع ﺩﻳﮕﺮ‬ ‫‪۲-۱-۲-۳‬‬

‫ﻣﺎ ﻣیﺗﻮﺍﻧﻴﻢ ﻛﻪ ﺩﺭ ﺩﺍﺧﻞ ﺗﻌﺮﻳﻒ ﻳﮏ ﺗﺎﺑع‪ ،‬ﺗﺎﺑع ﻭ ﺗﻮﺍﺑع ﺩﻳﮕﺮﯼ ﺭﺍ ﻓﺮﺍﺧﻮﺍﻧی ﻛﻨﻴﻢ‪.‬‬
‫ﻣﺜﺎﻝ‪:۱‬‬
‫‪In [1]:‬‬ ‫‪def main () :‬‬
‫)‪result = cubeVolume (2‬‬
‫) ‪print ("A cube with side length 2 has volume ", result‬‬
‫‪def cubeVolume ( sideLength ) :‬‬
‫‪volume = sideLength ** 3‬‬
‫‪return volume‬‬
‫)( ‪main‬‬

‫‪Out[1]:‬‬ ‫‪A cube with side length 2 has volume 8‬‬

‫ﺩﺭ ﻣﺜﺎﻝ ﺑﺎلا ﺩﻭ ﺗﺎﺑع )(‪ main‬ﻭ )(‪ cubeVolume‬ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﺩﺭ ﺳﻄﺮ ﺁﺧﺮ ﺑﺮﻧﺎﻣﻪ‪ ،‬ﺗﺎﺑع ﺍﻭﻟی ﻓﺮﺧﻮﺍﻧﺪﻩ‬
‫ﻣیﺷﻮﺩ‪ .‬ﺑﺮﺍﯼ ﺍﺟﺮﺍﯼ ﺁﻥ ﺑﻪ ﺗﻌﺮﻳﻔﺶ ﻣﺮﺍﺟﻌﻪ ﻣیﻛﻨﺪ‪ .‬ﺍﻣﺎ ﺩﺭ ﺩﺍﺧﻞ ﺗﺎﺑع ‪ ،main‬ﺗﺎﺑع ‪ cubeVolume‬ﻓﺮﺍﺧﻮﺍﻧﺪﻩ‬
‫ﺷﺪﻩ ﻭ ﻣﻘﺪﺍﺭ ﺁﺭﮔﻮﻣﺎﻥ ﺁﻥ ﺑﺮﺍﺑﺮ ‪ ۲‬ﺍﺳﺖ‪ .‬ﭘﺲ ﺣﺠﻢ ﺑﻪ ﺍﺯﺍﯼ ﻋﺪﺩ ‪ ۲‬ﻣﺤﺎﺳﺒﻪ ﻣیﺷﻮﺩ‪ .‬ﻭ ﺳﭙﺲ ﻋﻤﻞ ﭼﺎﭖ ﺍﻧﺠﺎﻡ‬
‫ﻣیﮔﺮﺩﺩ‪.‬‬
‫ﻣﺜﺎﻝ ‪:۲‬‬
‫‪In [2]:‬‬ ‫‪def large (num1 , num2 ):‬‬
‫‪if num1 > num2 :‬‬
‫‪result = num1‬‬
‫‪else :‬‬
‫‪result = num2‬‬
‫‪return result‬‬

‫‪def main ():‬‬


‫))' ‪x= float ( input (' number1 :‬‬
‫))' ‪y= float ( input (' number2 :‬‬
‫))‪print (' Bigger is:',large (x,y‬‬
‫)( ‪main‬‬

‫‪Out[2]:‬‬ ‫‪number1 : 4.5‬‬


‫‪number2 : 7.3‬‬
‫‪Bigger is: 7.3‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﺩﺭ ﺗﺎﺑع )(‪ main‬ﺗﺎﺑع )‪ large(x,y‬ﻓﺮﺍﺧﻮﺍﻧی ﺷﺪﻩ ﺍﺳﺖ‪ ،‬ﻛﻨﺘﺮﻝ ﺑﻪ ﺩﻧﺒﺎﻝ ﺗﺎﺑﻌی‬
‫ﺑﻪ ﻧﺎﻡ ‪ large‬ﻣیﮔﺮﺩﺩ ﻭ ﺁﻥ ﺭﺍ ﺗﻮﺳﻂ ﻧﺎﻣﺶ ﭘﻴﺪﺍ ﻣیﻛﻨﺪ ﻭ ﺍﺟﺮﺍ ﻣیﻧﻤﺎﻳﺪ‪ .‬ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﻣﺤﻞ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻦ‬
‫‪۳۵‬‬ ‫ﻓﺼﻞ ‪ .۳‬ﺗﻮﺍﺑع ﺩﺭ ﭘﺎﻳﺘﻮﻥ‬
‫ﺗﻌﺮﻳﻒ ﺗﺎﺑع ‪ large‬ﻣﻬﻢ ﻧﻴﺴﺖ‪ ،‬ﺑﺪﻳﻦ ﻣﻌﻨی ﻛﻪ ﺍﻳﻦ ﺗﺎﺑع ﻣیﺗﻮﺍﻧﺪ ﻗﺒﻞ ﻳﺎ ﺑﻌﺪ ﺍﺯ ﺗﺎﺑع ‪ main‬ﺗﻌﺮﻳﻒ ﺷﻮﺩ‪.‬‬

‫‪ ۲-۲-۳‬ﻧﺤﻮﻩ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻦ ﻭ ﺗﺮﺗﻴﺐ ﺁﺭﮔﻮﻣﺎﻥﻫﺎ‬


‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻗﺒل ًا ﻣﺸﺎﻫﺪﻩ ﺷﺪ‪ ،‬ﻣﻘﺎﺩﻳﺮ ﺁﺭﮔﻮﻣﺎﻥﻫﺎﯼ ﺗﻮﺍﺑع ﺩﺭ ﺣﻴﻦ ﺍﺟﺮﺍ ﺑﻪ ﺁﺭﮔﻮﻣﺎﻥﻫﺎﯼ ﺗﻮﺍﺑع ﺩﺭ ﺗﻌﺮﻳﻒ ﺁﻧﻬﺎ‬
‫ﻣﻨﺘﻘﻞ ﻣیﺷﻮﺩ‪ .‬ﻭ ﺑﻪ ﺗﺮﺗﻴﺐ ﻣﻘﺪﺍﺭ ﺍﻭﻝ ﺑﻪ ﺟﺎﯼ ﺁﺭﮔﻮﻣﺎﻥ ﺍﻭﻟی ﻭ ﻣﻘﺪﺍﺭ ﺩﻭﻡ ﺑﻪ ﺟﺎﯼ ﺁﺭﮔﻮﻣﺎﻥ ﺩﻭﻡ ﻭ ﺍﻟی ﺁﺧﺮ‪ .‬ﺍﮔﺮ ﺍﻳﻦ‬
‫ﺗﺮﺗﻴﺐ ﺭﻋﺎﻳﺖ ﻧﺸﻮﺩ‪ ،‬ﺁﻧﮕﺎﻩ ﻣﺤﺎﺳﺒﺎﺕ ﺍﻧﺠﺎﻡ ﺷﺪﻩ ﺩﺭﺳﺖ ﻧﻴﺴﺖ ﻭ ﺣﺘی ﻣﻤﻜﻦ ﺍﺳﺖ ﺑﺮﻧﺎﻣﻪ ﺷﻤﺎ ﺑﺎ ﺧﻄﺎ ﻣﻮﺍﺟﻪ‬
‫ﺷﻮﺩ‪.‬‬
‫)‪mass (kg‬‬
‫ﻣﺜﺎﻝ‪ :‬ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺯﻳﺮ ﺍﻧﺪﻳﺲ ﺗﻮﺩﻩ ﺑﺪﻥ ‪ ۱‬ﺑﺎ ﻓﺮﻣﻮﻝ )‪ BMI = height۲ (meter‬ﻣﺤﺎﺳﺒﻪ ﻣیﺷﻮﺩ‪ .‬ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻭﺯﻥ‬
‫ﺷﺨﺼی ‪ ۷۲‬ﻛﻴﻠﻮﮔﺮﻡ ﻭ ﻗﺪﺵ ‪ ۱٫۷۰‬ﻣﺘﺮ ﺍﺳﺖ‪.‬‬
‫‪In [1]:‬‬ ‫‪def BMI (mass , height ):‬‬
‫‪return mass / height **2‬‬

‫)‪ans = BMI (72 ,1.70‬‬


‫)) ‪print ('{:.2 f}'. format ( ans‬‬

‫‪Out[1]:‬‬ ‫‪24.91‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﭼﻮﻥ ﺍﻭﻟﻴﻦ ﺁﺭﮔﻮﻣﺎﻥ ﺩﺭ ﺗﻌﺮﻳﻒ ﺗﺎﺑع‪ mass ،‬ﻭ ﺩﻭﻣی ‪ height‬ﺍﺳﺖ‪ ،‬ﻫﻤﻴﻦ ﺗﺮﺗﻴﺐ‬
‫ﻧﻴﺰ ﺑﺎﻳﺪ ﺩﺭ ﻓﺮﺍﺧﻮﺍﻧی ﺗﺎﺑع ﻣﺮﺍﻋﺎﺕ ﮔﺮﺩﺩ‪ .‬ﺍﻭﻝ ﻣﻘﺪﺍﺭ ﻭﺯﻥ ﻳﻌﻨی ‪ ۷۲‬ﻛﻴﻠﻮ ﻭ ﺩﻭﻡ ﺍﻧﺪﺍﺯﻩ ﻗﺪ ﻳﻌﻨی ‪ ۱٫۷۰‬ﻣﻨﻈﻮﺭ ﮔﺮﺩﺩ‪.‬‬
‫ﺍﻣﺎ ﺍﮔﺮ ﺩﺭ ﻓﺮﺍﺧﻮﺍﻧی ﺗﺎﺑع ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎ ‪ ،۲‬ﻳﺎ ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﺍﺯ ﺍﺳﺎﻣی ﺁﺭﮔﻮﻣﺎﻥﻫﺎ ﺍﺳﺘﻔﺎﺩﻩ ﻛﻨﻴﺪ‪ ،‬ﻣیﺗﻮﺍﻧﻴﺪ ﺗﺮﺗﻴﺐ‬
‫ﺁﺭﮔﻮﻣﺎﻥﻫﺎ ﺭﺍ ﺭﻋﺎﻳﺖ ﻧﻜﻨﻴﺪ‪ .‬ﺑﻪ ﻣﺜﺎﻝ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫‪In [2]:‬‬ ‫‪def BMI (mass , height ):‬‬
‫‪return mass / height **2‬‬

‫)‪ans = BMI ( height =1.70 , mass =72‬‬


‫)) ‪print ('{:.2 f}'. format ( ans‬‬

‫‪Out[2]:‬‬ ‫‪24.91‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎ‪ ،‬ﺍﻭﻝ ﺍﻧﺪﺍﺯﻩ ﻗﺪ ﻣﻨﻈﻮﺭ ﺷﺪﻩ ﻭ ﺩﻭﻡ ﻣﻘﺪﺍﺭ ﻭﺯﻥ ﺁﻣﺪﻩ ﺍﺳﺖ‬
‫ﻛﻪ ﺍﻳﻦ ﺧلاﻑ ﺗﺮﺗﻴﺐ ﺁﺭﮔﻮﻣﺎﻥﻫﺎ ﺩﺭ ﺗﻌﺮﻳﻒ ﺗﺎﺑع ﺍﺳﺖ‪.‬‬

‫‪ ۳-۲-۳‬ﻧﺤﻮﻩ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻣﻘﺎﺩﻳﺮ ﭘﻴﺶﻓﺮﺽ ﺩﺭ ﺁﺭﮔﻮﻣﺎﻥ ﺗﻮﺍﺑع‬


‫ﺩﺭ ﭘﺎﻳﺘﻮﻥ‪ ،‬ﻣیﺗﻮﺍﻥ ﺗﻮﺍﺑﻌی ﺑﺎ ﻣﻘﺪﺍﺭ ﻳﺎ ﻣﻘﺎﺩﻳﺮ ﭘﻴﺶﻓﺮﺽ ﺑﺮﺍﯼ ﺑﺮﺧی ﺍﺯ ﺁﺭﮔﻮﻣﺎﻥ ﻳﺎ ﺁﺭﮔﻮﻣﺎﻥﻫﺎﯼ ﺁﻧﻬﺎ ﺗﻌﺮﻳﻒ ﻧﻤﻮﺩ‪،‬‬
‫ﻛﻪ ﺗﻮﺳﻂ ﻛﺎﺭﺑﺮ ﺗﻨﻈﻴﻢ ﻣیﺷﻮﻧﺪ‪ .‬ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﺎﺭ ﺩﻭ ﺭﻭﺵ ﭘﻴﺶ ﺭﻭﯼ ﺩﺍﺭﻳﻢ‪.‬‬
‫‪1. Body Mass Index‬‬
‫‪2. keywords‬‬
‫‪ .۲-۳‬ﺗﻮﺍﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻛﺎﺭﺑﺮ‬ ‫‪۳۶‬‬
‫• ﺑﺪﻭﻥ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎ ﺩﺭ ﺁﺭﮔﻮﻣﺎﻥﻫﺎ‬

‫• ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎ ﺑﺮﺍﯼ ﺁﺭﮔﻮﻣﺎﻥﻫﺎ‬

‫ﻣﺜﺎﻝ ‪ :۱‬ﺑﺪﻭﻥ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎ‬


‫‪In [1]:‬‬ ‫‪def fun1 (a,b =199):‬‬
‫‪return a+b‬‬

‫))‪print ( fun1 (2 ,2‬‬

‫‪Out[1]:‬‬ ‫‪4‬‬

‫ﺯﻣﺎﻧی ﻛﻪ ﺑﺮﺍﯼ ﺁﺭﮔﻮﻣﺎﻥ ‪ b‬ﺩﺭ ﻓﺮﺍﺧﻮﺍﻧی ﺗﺎﺑع ﻣﻘﺪﺍﺭ ﺗﻌﻴﻴﻦ ﺷﺪﻩ ﺍﺳﺖ‪ ،‬ﻣﻘﺪﺍﺭ ﭘﻴﺶﻓﺮﺽ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻧﻤیﺷﻮﺩ‪.‬‬
‫ﺑﻨﺎﺑﺮﺍﻳﻦ ‪ a + b = ۲ + ۲ = ۴‬ﺍﺳﺖ‪.‬‬
‫ﻣﺜﺎﻝ ‪ :۲‬ﺑﺪﻭﻥ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎ‬
‫‪In [2]:‬‬ ‫‪def fun1 (a,b =199):‬‬
‫‪return a+b‬‬

‫))‪print ( fun1 (1‬‬

‫‪Out[2]:‬‬ ‫‪200‬‬

‫ﺩﺭ ﺍﻳﻦ ﻣﺜﺎﻝ ﻣﻘﺪﺍﺭ ﺑﺮﺍﯼ ﺁﺭﮔﻮﻣﺎﻥ ‪ b‬ﺩﺭ ﻓﺮﺧﻮﺍﻧی ﺗﺎﺑع ﻣﻨﻈﻮﺭ ﻧﺸﺪﻩ ﺍﺳﺖ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺁﺭﮔﻮﻣﺎﻥ ‪ b‬ﺍﺯ ﻣﻘﺪﺍﺭ ﭘﻴﺶﻓﺮﺽ‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﻣیﻛﻨﺪ‪ .‬ﻳﻌﻨی ‪ a + b = ۱ + ۱۹۹ = ۲۰۰‬ﺍﺳﺖ‪.‬‬
‫ﻣﺜﺎﻝ ‪ :۳‬ﺑﺪﻭﻥ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎ ﺑﺮﺍﯼ ﺭﺷﺘﻪ‬
‫‪In [3]:‬‬ ‫‪def fun2 ( string1 , string2 =' shirazi '):‬‬
‫) ‪print ( string1 + string2‬‬

‫)' ‪fun2 ('ava ', ' karimi‬‬


‫)' ‪fun2 ('ava‬‬

‫‪Out[3]:‬‬ ‫‪ava karimi‬‬


‫‪ava shirazi‬‬

‫ﺩﺭ ﺍﻳﻦ ﻣﺜﺎﻝ ﺑﺮﺍﯼ ﺁﺭﮔﻮﻣﺎﻥ ‪ string2‬ﺩﺭ ﻓﺮﺍﺧﻮﺍﻧی ﺍﻭﻝ ﺗﺎﺑع‪ ،‬ﻣﻘﺪﺍﺭ ﺗﻌﻴﻴﻦ ﺷﺪﻩ ﺍﺳﺖ‪ ،‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣﻘﺪﺍﺭ ﭘﻴﺶﻓﺮﺽ‬
‫ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻧﻤیﺷﻮﺩ‪ .‬ﻭ ﻋﺒﺎﺭﺕ »ﺁﻭﺍ ﻛﺮﻳﻤی« ﭼﺎﭖ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﺩﺭ ﻓﺮﺍﺧﻮﺍﻥ ﺩﻭﻡ ﺗﺎﺑع‪ ،‬ﺑﺮﺍﯼ ﺁﺭﮔﻮﻣﺎﻥ ‪string2‬‬
‫ﻣﻘﺪﺍﺭ ﺗﻌﻴﻴﻦ ﻧﺸﺪﻩ ﺍﺳﺖ‪ ،‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻣﻘﺪﺍﺭ ﭘﻴﺶﻓﺮﺽ ﺩﺭ ﻧﻈﺮ ﮔﺮﻓﺘﻪ ﻣیﺷﻮﺩ‪ .‬ﻭ ﻋﺒﺎﺭﺕ »ﺁﻭﺍ ﺷﻴﺮﺍﺯﯼ« ﭼﺎﭖ ﺷﺪﻩ‬
‫ﺍﺳﺖ‪.‬‬
‫ﻣﺜﺎﻝ ‪ :۱‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎ‬
۳۷ ‫ ﺗﻮﺍﺑع ﺩﺭ ﭘﺎﻳﺘﻮﻥ‬.۳ ‫ﻓﺼﻞ‬
In [1]: def student ( firstname , lastname ='Amini ', grade = 'Fifth '):
print ( firstname , lastname ,' studies in ',grade , 'Grade ')

# 1 keyword argument
student ( firstname ='Javad ')

# 2 keyword arguments
student ( firstname ='Javad ', grade =' Seventh ')

# 2 keyword arguments
student ( lastname =' Naseri ', firstname = 'Javad ')

Out[1]: Javad Amini studies in Fifth Grade


Javad Amini studies in Seventh Grade
Javad Naseri studies in Fifth Grade

.‫ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩﻫﺎ ﺑﻪ ﻧﺤﻮﻩ ﺍﺷﺘﺒﺎﻩ‬:۲ ‫ﻣﺜﺎﻝ‬

In [2]: def student ( firstname , lastname ='Amini ', grade = 'Fifth '):
print ( firstname , lastname ,' studies in ',grade , 'Grade ')

# required argument missing


student ()

# 2 keyword arguments
student ( firstname ='Javad ', grade =' Seventh ')

# 2 keyword arguments
student ( lastname =' Naseri ', firstname = 'Javad ')

Out[2]: --------------------------------------------------------------------
TypeError
Traceback ( most recent call last )
Cell In [5] , line 5
2 print ( firstname , lastname , ' studies in ', grade , 'Grade ')
4 # 1 keyword argument
----> 5 student ()
7 # 2 keyword arguments
8 student ( firstname ='Javad ', grade =' Seventh ')

TypeError : student () missing 1 requiredpositionalargument :' firstname '


‫‪ .۲-۳‬ﺗﻮﺍﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻛﺎﺭﺑﺮ‬ ‫‪۳۸‬‬
‫‪In [1]:‬‬ ‫‪def student ( firstname , lastname ='Amini ', grade = 'Fifth '):‬‬
‫)' ‪print ( firstname , lastname ,' studies in ',grade , 'Grade‬‬

‫‪# 1 keyword argument‬‬


‫)' ‪student ( firstname ='Javad‬‬

‫‪# non keyword argument after a keyword argument‬‬


‫)' ‪student ( firstname ='Javad ', ' Seventh‬‬

‫‪# 2 keyword arguments‬‬


‫)' ‪student ( lastname =' Naseri ', firstname = 'Javad‬‬

‫‪Out[1]:‬‬ ‫‪Cell In [7] , line 8‬‬


‫)' ‪student ( firstname ='Javad ', ' Seventh‬‬
‫^‬
‫‪SyntaxError : positional argument follows keyword argument‬‬

‫ﺧﻄﺎﯼ ﻣﻮﺭﺩ ﺍﻭﻝ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺗﺎﺑع ﺩﺭ ﺣﻴﻦ ﻓﺮﺍﺧﻮﺍﻧی‪ ،‬ﻫﻴچ ﺁﺭﮔﻮﻣﺎﻧی ﻧﺪﺍﺭﺩ‪ .‬ﻭ ﺑﺮﺍﯼ ﺁﺭﮔﻮﻣﺎﻥ ‪ firstname‬ﻧﻴﺰ ﺩﺭ‬
‫ﺗﻌﺮﻳﻒ ﺗﺎﺑع ﻣﻘﺪﺍﺭ ﭘﻴﺶﻓﺮﺽ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎﻳﺪ ﺩﺭ ﻓﺮﺧﻮﺍﻧی ﺗﺎﺑع‪ ،‬ﺑﺮﺍﯼ ﺁﻥ ﻣﻘﺪﺍﺭ ﻣﻌﻴﻦ ﻣیﺷﺪ‪.‬‬
‫ﺧﻄﺎﯼ ﻣﻮﺭﺩ ﺩﻭﻡ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺗﺎﺑع ﺩﺭ ﺣﻴﻦ ﻓﺮﺍﺧﻮﺍﻧی‪ ،‬ﺑﺎﻳﺪ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪ grade‬ﺫﻛﺮ ﻣیﺷﺪ‪ ،‬ﭼﺮﺍ ﻛﻪ ﺩﺭ ﺗﻌﺮﻳﻒ‬
‫ﺗﺎﺑع‪ ،‬ﺁﺭﮔﻮﻣﺎﻥ ﺳﻮﻡ ﺩﺍﺭﺍﯼ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ﺍﺳﺖ‪ .‬ﻭ ﻧﻤیﺗﻮﺍﻥ ﺻﺮﻓ ًﺎ ﺑﻪ ﻣﻘﺪﺍﺭ‪ ،‬ﺑﺴﻨﺪﻩ ﻧﻤﻮﺩ‪.‬‬

‫‪ ۱-۳-۲-۳‬ﺁﺭﮔﻮﻣﺎﻥﻫﺎﯼ ﺍﺧﺘﻴﺎﺭﯼ ﺗﺎﺑع ‪print‬‬

‫ﺗﺎﺑع ‪ print‬ﺩﺍﺭﺍﯼ ﺩﻭ ﺁﺭﮔﻮﻣﺎﻥ ﺍﺧﺘﻴﺎﺭﯼ ' '=‪ sep‬ﻭ '‪ end='\n‬ﺍﺳﺖ‪ .‬ﺁﺭﮔﻮﻣﺎﻥ ﺍﻭﻟی ﻋلاﻣﺘی ﺑﻴﻦ ﻋﻨﺎﺻﺮﯼ ﻛﻪ ﭼﺎﭖ‬
‫ﻣیﻛﻨﺪ‪ ،‬ﻧﻤیﮔﺬﺍﺭﺩ‪ .‬ﻳﻌﻨی ﭘﻴﺶﻓﺮﺽ ﺁﻥ ﺗﻬی ﺍﺳﺖ‪ .‬ﺁﺭﮔﻮﻣﺎﻥ ﺩﻭﻣی ﻫﺮ ﺑﺎﺭ ﻛﻪ ﺗﺎﺑع ‪ print‬ﻓﺮﺍﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ ﻳﮏ‬
‫ﺳﻄﺮ ﺗﻌﻮﻳﺾ ﻣیﮔﺮﺩﺩ‪ .‬ﻳﻌﻨی ﭘﻴﺶﻓﺮﺽ ﺁﻥ ‪ '\n' =new line‬ﺍﺳﺖ‪.‬‬
‫ﻣﺜﺎﻝ ‪:۱‬‬
‫‪In [2]:‬‬ ‫)' ‪print (' notebook ', ' pencil‬‬
‫)' ‪print (' eraser‬‬
‫)‪print ('-'*25‬‬
‫)'' = ‪print (' notebook ', ' pencil ',end‬‬
‫)' ‪print (' eraser‬‬

‫‪Out[2]:‬‬ ‫‪notebook pencil‬‬


‫‪eraser‬‬
‫‪-------------------------‬‬
‫‪notebook pencil eraser‬‬

‫ﺩﺭ ﻗﺴﻤﺖ ﺩﻭﻡ ﻣﺜﺎﻝ ﺑﺎلا ﻫﺮ ﺳﻪ ﻭﺍﮊﻩ ﺩﺭ ﻳﮏ ﺳﻄﺮ ﻧﻮﺷﺘﻪ ﻣیﺷﻮﺩ‪ ،‬ﺯﻳﺮﺍ ﻛﻨﺘﺮﻝ ﺑﻪ ﺳﻄﺮ ﺑﻌﺪﯼ ﻧﻤیﺭﻭﺩ‪ .‬ﭼﺮﺍ ﻛﻪ‬
‫ﭘﻴﺶﻓﺮﺽ ﺁﺭﮔﻮﻣﺎﻥ ‪ end‬ﺗﻐﻴﻴﺮ ﻛﺮﺩﻩ ﺍﺳﺖ‪.‬‬
‫ﻣﺜﺎﻝ ‪ :۲‬ﻋلاﻣﺖ )‪ ،(-‬ﺭﺷﺘﻪﻫﺎ ﺭﺍ ﺍﺯ ﻫﻢ ﻣﺠﺰﺍ ﻣیﻛﻨﺪ‪.‬‬
‫‪۳۹‬‬ ‫ﻓﺼﻞ ‪ .۳‬ﺗﻮﺍﺑع ﺩﺭ ﭘﺎﻳﺘﻮﻥ‬
‫‪In [1]:‬‬ ‫)'‪print ('09 ','12 ','2021 ',sep = '-‬‬

‫‪Out[1]:‬‬ ‫‪09 -12 -2021‬‬

‫ﻣﺜﺎﻝ ‪:۳‬‬
‫‪In [2]:‬‬ ‫)'@' = ‪print ('ava_ ', ' saremi ', sep = '' ,end‬‬
‫)' ‪print ('gmail . com‬‬

‫‪Out[2]:‬‬ ‫‪ava_saremi@gmail . com‬‬

‫ﺁﺧﺮ ﭼﺎﭖ ﺳﻄﺮ ﺍﻭﻝ ﻋلاﻣﺖ @ ﻗﺮﺍﺭ ﻣیﮔﻴﺮﺩ ﻭ ﺳﭙﺲ ﺑﺪﻭﻥ ﺗﻌﻮﻳﺾ ﺳﻄﺮ‪ ،‬ﺭﺷﺘﻪ ﺧﻂ ﺑﻌﺪﯼ ﻛﻨﺎﺭ ﺳﻄﺮ ﺍﻭﻝ ﭼﺎﭖ‬
‫ﻣیﺷﻮﺩ‪.‬‬

‫‪ ۴-۲-۳‬ﻣﺘﻐﻴﺮﻫﺎﯼ ﻣﺤﻠی ﻭ ﺟﻬﺎﻧی‬

‫ﺩﺭ ﺑﺪﻧﻪ ﺗﺎﺑع ﻣیﺗﻮﺍﻥ ﺳﻪ ﻧﻮع ﻣﺘﻐﻴﺮ ﺩﺍﺷﺖ‪.‬‬

‫‪ .۱‬ﻣﺘﻐﻴﺮﻫﺎﻳﯽ ﻛﻪ ﺍﺯ ﻃﺮﻳﻖ ﺁﺭﮔﻮﻣﺎﻥﻫﺎ ﺑﻪ ﺗﺎﺑع ﻭﺭﻭﺩ ﭘﻴﺪﺍ ﻛﺮﺩﻩﺍﻧﺪ‪.‬‬

‫‪ .۲‬ﻣﺘﻐﻴﺮﻫﺎﻳﯽ ﻛﻪ ﺩﺭﻭﻥ ﺗﺎﺑع ﻭﺟﻮﺩ ﺩﺍﺭﻧﺪ ﻭ ﺑﻴﺮﻭﻥ ﺍﺯ ﺁﻥ ﻣﻮﺟﻮﺩﻳﺘی ﻧﺪﺍﺭﻧﺪ‪ ،‬ﻭ ﺑﻪ ﺁﻧﻬﺎ ﻣﺘﻐﻴﺮﻫﺎﯼ ﻣﺤﻠی ‪ ۱‬ﮔﻮﻳﻨﺪ‪.‬‬

‫‪ .۳‬ﻣﺘﻐﻴﺮﻫﺎﻳﯽ ﻛﻪ ﺩﺭﻭﻥ ﺗﺎﺑع ﻭﺟﻮﺩ ﺩﺍﺭﻧﺪ ﻭ ﺑﻴﺮﻭﻥ ﺍﺯ ﺁﻥ ﻧﻴﺰ ﻣﻮﺟﻮﺩﻳﺖ ﺧﻮﺩ ﺭﺍ ﺣﻔﻆ ﻣی ﻛﻨﻨﺪ‪ .‬ﺑﻪ ﺁﻧﻬﺎ ﻣﺘﻐﻴﺮﻫﺎﯼ‬
‫ﻛﻠی‪ ،‬ﻋﻤﻮﻣی ﻭ ﻳﺎ ﺟﻬﺎﻧی ‪ ۲‬ﮔﻮﻳﻨﺪ‪.‬‬

‫لاﺯﻡ ﺑﻪ ﻳﺎﺩﺍﻭﺭﯼ ﺍﺳﺖ ﻛﻪ ﻫﺮ ﺗﺎﺑع ﻧﺒﺎﻳﺪ ﻟﺰﻭﻣﺎ ﺷﺎﻣﻞ ﻫﺮ ﺳﻪ ﻧﻮع ﻣﺘﻐﻴﺮ ﺑﺎﺷﺪ‪.‬‬
‫ﻣﺜﺎﻝ ‪:۱‬‬
‫‪In [3]:‬‬ ‫‪x = 2‬‬
‫‪def g1(a ):‬‬
‫‪x1 = 3*a‬‬
‫)‪print ('x1:', x1‬‬
‫‪return x1‬‬
‫))‪print (g1 (1‬‬
‫)‪print (x‬‬
‫)‪print ('x1:', x1‬‬

‫‪1. local‬‬
‫‪2. global‬‬
‫‪ .۲-۳‬ﺗﻮﺍﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻛﺎﺭﺑﺮ‬ ‫‪۴۰‬‬
‫‪Out[3]:‬‬ ‫‪x1: 3‬‬
‫‪3‬‬
‫‪2‬‬
‫‪--------------------------------------------------------------------‬‬
‫‪NameError‬‬
‫) ‪Traceback ( most recent call last‬‬
‫‪Cell In [75] , line 8‬‬
‫))‪6 print (g1 (1‬‬
‫)‪7 print (x‬‬
‫)‪----> 8 print ('x1:', x1‬‬

‫‪NameError : name 'x1 ' is not defined‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ ﻣﺘﻐﻴﺮ ‪ ،x1‬ﻳﮏ ﻣﺘﻐﻴﺮ ﻣﺤﻠی ﺍﺳﺖ ﻭ ﻓﻘﻂ ﺩﺭﻭﻥ ﺗﺎﺑع ‪ g1‬ﻣﻘﺪﺍﺭ ﺩﺍﺭﺩ‪ .‬ﺍﻣﺎ ﺑﻴﺮﻭﻥ‬
‫ﺍﺯ ﺁﻥ ﺩﺍﺭﺍﯼ ﻣﻘﺪﺍﺭﯼ ﻧﻴﺴﺖ ﻭ ﺑﻪ ﻫﻤﻴﻦ ﺳﺒﺐ ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﻣیﺩﻫﺪ‪ .‬ﻣﺘﻐﻴﺮ ‪ a‬ﺍﺯ ﻃﺮﻳﻖ ﺁﺭﮔﻮﻣﺎﻥ ﻭﺍﺭﺩ ﺑﺪﻧﻪ ﺗﺎﺑع ﺷﺪﻩ‬
‫ﺍﺳﺖ‪.‬‬

‫ﻣﺜﺎﻝ ‪:۲‬‬

‫‪In [1]:‬‬ ‫‪x = 10‬‬


‫‪def f1 ():‬‬
‫‪x = 2‬‬
‫)‪print ('x in f1 ()= ', x‬‬
‫)( ‪f1‬‬
‫)‪print (x‬‬
‫‪def f2 ():‬‬
‫‪x=3‬‬
‫)‪print ('x in f2 ()= ', x‬‬
‫)( ‪f2‬‬
‫)‪print (x‬‬

‫‪Out[1]:‬‬ ‫‪x in f1 (): 2‬‬


‫‪10‬‬
‫‪x in f2 (): 3‬‬
‫‪10‬‬

‫ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ‪ x‬ﺍﺯ ﺗﺎﺑع )(‪ f1‬ﺑﺮﺍﺑﺮ ‪ ۲‬ﺍﺳﺖ ﻭ ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ‪ x‬ﺍﺯ ﺗﺎﺑع )(‪ f2‬ﺑﺮﺍﺑﺮ ‪ ۳‬ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ﺑﻪ ﺻﻮﺭﺕ‬
‫ﻋﻤﻮﻣی ﺩﺭ ﺳﺮﺍﺳﺮ ﺑﺮﻧﺎﻣﻪ ﺑﺮﺍﺑﺮ ‪ ۱۰‬ﺍﺳﺖ‪.‬‬

‫ﻣﺜﺎﻝ ‪:۳‬‬
‫‪۴۱‬‬ ‫ﻓﺼﻞ ‪ .۳‬ﺗﻮﺍﺑع ﺩﺭ ﭘﺎﻳﺘﻮﻥ‬
‫‪In [1]:‬‬ ‫‪x = 10‬‬
‫‪def f1 ():‬‬
‫‪global x‬‬
‫‪x = 2‬‬
‫)‪print ('x in f1 ()= ', x‬‬
‫)( ‪f1‬‬
‫)‪print (x‬‬
‫‪def f2 ():‬‬
‫‪x=3‬‬
‫)‪print ('x in f2 ()= ', x‬‬
‫)( ‪f2‬‬
‫)‪print (x‬‬

‫‪Out[1]:‬‬ ‫‪x in f1 ()= 2‬‬


‫‪2‬‬
‫‪x in f2 ()= 3‬‬
‫‪2‬‬

‫ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ﻋﻤﻮﻣی ‪ x‬ﺑﺮﺍﺑﺮ ‪ ۱۰‬ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﺩﺭ ﺩﺭﻭﻥ ﺗﺎﺑع )(‪ f1‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪ global‬ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ‬
‫ﻋﻤﻮﻣی ‪ x‬ﺑﺮﺍﺑﺮ ‪ ۲‬ﻣیﺷﻮﺩ‪.‬‬
‫ﻣﺜﺎﻝ ‪:۴‬‬
‫‪In [2]:‬‬ ‫‪x = 10‬‬
‫‪def f1 ():‬‬
‫‪x = 2‬‬
‫)‪print ('x in f1 ()= ', x‬‬
‫)( ‪f1‬‬
‫)‪print (x‬‬
‫‪def f2 ():‬‬
‫‪global x‬‬
‫‪x=3‬‬
‫)‪print ('x in f2 ()= ', x‬‬
‫)( ‪f2‬‬
‫)‪print (x‬‬

‫‪Out[2]:‬‬ ‫‪x in f1 ()= 2‬‬


‫‪10‬‬
‫‪x in f2 ()= 3‬‬
‫‪3‬‬

‫ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ﻋﻤﻮﻣی ‪ x‬ﺑﺮﺍﺑﺮ ‪ ۱۰‬ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﺩﺭ ﺩﺭﻭﻥ ﺗﺎﺑع )(‪ f1‬ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ﻋﻤﻮﻣی ﻋﻮﺽ ﻧﻤیﺷﻮﺩ‪ .‬ﭘﺲ ﺳﻄﺮ‬
‫ﺩﻭﻡ ﺧﺮﻭﺟی ﺑﺮﺍﺑﺮ ‪ ۱۰‬ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﺩﺭ ﺗﺎﺑع )(‪ f2‬ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ﻋﻤﻮﻣی ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪ global‬ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ‬
‫ﻋﻤﻮﻣی ‪ x‬ﺑﺮﺍﺑﺮ ‪ ۳‬ﻣیﺷﻮﺩ‪.‬‬
‫ﻣﺜﺎﻝ ‪:۵‬‬
‫‪ .۲-۳‬ﺗﻮﺍﺑع ﺗﻌﺮﻳﻒ ﺷﺪﻩ ﻛﺎﺭﺑﺮ‬ ‫‪۴۲‬‬
‫‪In [1]:‬‬ ‫‪x = 10‬‬
‫‪def f1 ():‬‬
‫‪global x‬‬
‫‪x = 2‬‬
‫)‪print ('x in f1 ()= ', x‬‬
‫)( ‪f1‬‬
‫)‪print (x‬‬
‫‪def f2 ():‬‬
‫‪global x‬‬
‫‪x=3‬‬
‫)‪print ('x in f2 ()= ', x‬‬
‫)( ‪f2‬‬
‫)‪print (x‬‬

‫‪Out[1]:‬‬ ‫‪x in f1 ()= 2‬‬


‫‪2‬‬
‫‪x in f2 ()= 3‬‬
‫‪3‬‬

‫ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ﻋﻤﻮﻣی ‪ x‬ﺑﺮﺍﺑﺮ ‪ ۱۰‬ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﺩﺭ ﺩﺭﻭﻥ ﺗﺎﺑع )(‪ f1‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪ global‬ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ‬
‫ﻋﻤﻮﻣی ‪ x‬ﺑﺮﺍﺑﺮ ‪ ۲‬ﻣیﺷﻮﺩ‪ .‬ﺳﭙﺲ ﺩﺭ ﺩﺭﻭﻥ ﺗﺎﺑع )(‪ f2‬ﻣﺠﺪﺩ ًﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ‪ global‬ﻣﻘﺪﺍﺭ ﻣﺘﻐﻴﺮ ﻋﻤﻮﻣی‬
‫‪ x‬ﻋﻮﺽ ﺷﺪﻩ ﻭ ﺑﺮﺍﺑﺮ ‪ ۳‬ﻣیﺷﻮﺩ‪.‬‬
‫���‬

‫‪۴‬‬
‫ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬

‫‪ ۱-۴‬ﻣﻘﺪﻣﻪ‬
‫ﺩﺭ ﻓﺼﻞ ﺍﻭﻝ ﺩﻳﺪﻳﻢ ﻛﻪ ﺩﺍﺩﻩﻫﺎ ﺍﻧﻮﺍﻉ ﮔﻮﻧﺎﮔﻮﻥ ﺩﺍﺭﻧﺪ‪ .‬ﻋﺪﺩﯼ ﻭ ﻏﻴﺮ ﻋﺪﺩﯼ‪ .‬ﻫﺮ ﻳﮏ ﺍﺯ ﺁﻧﻬﺎ ﻧﻴﺰ ﺑﻪ ﺍﻧﻮﺍﻉ ﻛﻮﭼﻜﺘﺮﯼ‬
‫ﺗﻘﺴﻴﻢ ﻣیﺷﺪﻧﺪ‪.‬‬
‫ﺩﺍﺩﻩﻫﺎ ﺑﺎ ﻫﻢ ﻭ ﺩﺭ ﻛﻨﺎﺭ ﻫﻢ‪ ،‬ﻣیﺗﻮﺍﻧﻨﺪ ﺳﺎﺧﺘﺎﺭﻫﺎ ﻭ ﻳﺎ ﺳﺎﺧﺘﻤﺎﻥﻫﺎﯼ ﻣﺘﻔﺎﻭﺗی ﺭﺍ ﺗﺸﻜﻴﻞ ﺩﻫﻨﺪ‪ .‬ﺍﻧﻮﺍﻉ ﺁﻧﻬﺎ ﺑﻪ ﺷﺮح‬
‫ﺯﻳﺮ ﺍﺳﺖ‪.‬‬

‫ﻟﻴﺴﺖ ‪۱‬‬ ‫‪.۱‬‬

‫ﺭﺷﺘﻪ ‪۲‬‬ ‫‪.۲‬‬

‫ﺗﺎﭘﻞ ‪۳‬‬ ‫‪.۳‬‬

‫ﺩﻳﻜﺸﻨﺮﯼ ‪۴‬‬ ‫‪.۴‬‬

‫ﻣﺠﻤﻮﻋﻪ ‪۵‬‬ ‫‪.۵‬‬

‫ﺩﺭ ﺍﻳﻦ ﻓﺼﻞ ﺑﻪ ﺗﻔﺼﻴﻞ ﺁﻧﻮﺍﻉ ﺑﺎلا ﭘﺮﺩﺍﺧﺘﻪ ﻣیﺷﻮﺩ‪.‬‬

‫‪1. List‬‬
‫‪2. String‬‬
‫‪3. Tuple‬‬
‫‪4. Dictionary‬‬
‫‪5. Set‬‬

‫‪۴۳‬‬
‫‪ .۲-۴‬ﻟﻴﺴﺖ‬ ‫‪۴۴‬‬
‫‪ ۲-۴‬ﻟﻴﺴﺖ‬
‫ﻟﻴﺴﺖ‪ ،‬ﺩﺍﺩﻩﺍﯼ ﺍﺳﺖ ﻛﻪ ﺷﺎﻣﻞ ﺩﻧﺒﺎﻟﻪﺍﯼ ﺍﺯ ﭼﻨﺪ ﺩﺍﺩﮤ ﻣﺮﺗﺐ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﻟﻴﺴﺖ ﺑﺎ ﺑﺮﺍﻛﺖ ﺑﺎﺯ‪ ،‬ﺷﺮﻭع ﻣیﺷﻮﺩ ﻭ ﺑﺎ‬
‫ﺑﺮﺍﻛﺖ ﺑﺴﺘﻪ‪ ،‬ﺧﺎﺗﻤﻪ ﻣیﻳﺎﺑﺪ‪ .‬ﻣﻘﺎﺩﻳﺮ ﻣﻮﺭﺩ ﻧﻈﺮ ﺩﺭﻭﻥ ﺑﺮﺍﻛﺖﻫﺎ ﻗﺮﺍﺭ ﻣیﮔﻴﺮﻧﺪ ﻭ ﺑﺎ ﻛﺎﻣﺎ ﺍﺯ ﻳﻜﺪﻳﮕﺮ ﺟﺪﺍ ﻣیﺷﻮﻧﺪ‪.‬‬
‫ﺑﺮﺍﯼ ﻣﺜﺎﻝ ﺑﻪ ﻣﻮﺍﺭﺩ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫]‪[1 ,2 ,3‬‬

‫] ' ‪[ ' cat ' , ' bat ' , ' rat ' , ' elephant‬‬

‫] ‪[ ' h e l l o ' , 3 . 1 4 , True , None , 4 2‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﺷﺪ‪ ،‬ﻟﻴﺴﺖ ﺩﺭﺑﺮﮔﻴﺮﻧﺪﻩ ﺍﻧﻮﺍﻉ ﻣﻘﺎﺩﻳﺮ ﺍﺳﺖ ﻭ ﺩﺭ ﺍﻳﻦ ﺧﺼﻮﺹ ﻣﺤﺪﻭﺩﻳﺘی ﻧﺪﺍﺭﺩ‪.‬‬

‫‪ ۱-۲-۴‬ﺩﺳﺘﺮﺳی ﺑﻪ ﻣﻘﺎﺩﻳﺮ ﻟﻴﺴﺖ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻧﺪﻳﺲ‬

‫ﺑﺮﺍﯼ ﺩﺳﺘﺮﺳی ﺑﻪ ﻣﻘﺎﺩﻳﺮ ﻳﮏ ﻟﻴﺴﺖ ﻣیﺗﻮﺍﻥ ﺍﺯ ﺷﻤﺎﺭﻩ ﻳﺎ ﺍﻧﺪﻳﺲ ‪ ۱‬ﺁﻥ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ ﻛﻪ ﻣﻮﻗﻌﻴﺖ ﺁﻧﻬﺎ ﺭﺍ ﺩﺭ ﻟﻴﺴﺖ‬
‫ﻧﺸﺎﻥ ﻣیﺩﻫﺪ‪ .‬ﺑﻪ ﺷﻜﻞ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬

‫‪9‬‬ ‫‪5‬‬ ‫‪'cat' 19‬‬ ‫‪12‬‬ ‫‪8‬‬ ‫‪True‬‬ ‫‪4‬‬ ‫‪21 4.2‬‬
‫]‪[0‬‬ ‫]‪[1‬‬ ‫]‪[2‬‬ ‫]‪[3‬‬ ‫]‪[4‬‬ ‫]‪[5‬‬ ‫]‪[6‬‬ ‫]‪[7‬‬ ‫]‪[8‬‬ ‫]‪[9‬‬

‫ﺍﮔﺮ ﻟﻴﺴﺖ ﺑﺎلا ﺭﺍ ﺑﻪ ﻣﺘﻐﻴﺮﯼ ﺑﻪ ﻧﺎﻡ ‪ X‬ﻧﺴﺒﺖ ﺩﻫﻴﻢ‪ ،‬ﺧﻮﺍﻫﻴﻢ ﺩﺍﺷﺖ‪.‬‬

‫‪In [1]:‬‬ ‫]‪X=[9 ,5 , 'cat ' ,19 ,12 ,8 , True ,4 ,21 ,4.2‬‬
‫)]‪print (X [0] ,X[2] ,X[6] ,X [9‬‬

‫‪Out[1]:‬‬ ‫‪9 cat True 4.2‬‬

‫ﺍﻛﻨﻮﻥ ﻣﻘﺪﺍﺭ ]‪ X[10‬ﺭﺍ ﻣﺤﺎﺳﺒﻪ ﻣیﻛﻨﻴﻢ‪.‬‬

‫‪In [2]:‬‬ ‫]‪X=[9 ,5 , 'cat ' ,19 ,12 ,8 , True ,4 ,21 ,4.2‬‬
‫)]‪print (X [0] ,X[2] ,X[6] ,X [9‬‬
‫)]‪print (X [10‬‬

‫‪1. Index‬‬
۴۵ ‫ ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬.۴ ‫ﻓﺼﻞ‬
Out[2]: 9 cat True 4.2

---------------------------------------------------------
IndexError Traceback ( most recent call last )
Cell In [2] , line 3
1 X=[9 ,5 , 'cat ' ,19 ,12 ,8 , True ,4 ,21 ,4.2]
2 print (X[0] ,X[2] ,X[6] ,X [9])
----> 3 print (X [10])

IndexError : list index out of range

‫ ﭼﻮﻥ ﺍﻧﺪﻳﺲ ﺩﻫﻢ ﺧﺎﺭج ﺍﺯ ﻣﺤﺪﻭﺩﻩ‬،‫ ﺧﻄﺎ ﻣیﺩﻫﺪ‬X[10] ‫ ﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﺯﻭﯼ‬،‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‬
.‫ﺍﻧﺪﻳﺲﻫﺎ ﺍﺳﺖ‬
‫ ﺍﺟﺮﺍﯼ ﺑﺮﻧﺎﻣﻪ ﺑﺎ‬،‫ﺍﻧﺪﻳﺲﻫﺎ ﺑﺎﻳﺪ ﺗﻨﻬﺎ ﻋﺪﺩ ﺻﺤﻴح ﺑﺎﺷﻨﺪ ﻭ ﭼﻨﺎﻧﭽﻪ ﺍﺯ ﺍﻋﺪﺍﺩ ﺍﻋﺸﺎﺭﯼ ﻳﺎ ﻫﺮ ﻧﻮع ﺩﻳﮕﺮ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‬
.‫ﺧﻄﺎ ﺗﻮﺍﻡ ﺍﺳﺖ‬
In [1]: X=[9 ,5 , 'cat ' ,19 ,12 ,8 , True ,4 ,21 ,4.2]
print (X [0] ,X[2] ,X[6] ,X [9])
print (X [1.0])

Out[1]: 9 cat True 4.2

---------------------------------------------------------
IndexError Traceback ( most recent call last )
Cell In [1] , line 3
1 X=[9 ,5 , 'cat ' ,19 ,12 ,8 , True ,4 ,21 ,4.2]
2 print (X[0] ,X[2] ,X[6] ,X [9])
----> 3 print (X [1.0])

TypeError : list indices must be integers or slices , not float

.‫ ﻣیﺗﻮﺍﻥ ﺧﻄﺎﯼ ﺑﺎلا ﺭﺍ ﺍﺻلاﺡ ﻛﺮﺩ‬int() ‫ﺑﺎ ﺗﺎﺑع‬


In [2]: X=[9 ,5 , 'cat ' ,19 ,12 ,8 , True ,4 ,21 ,4.2]
print (X [0] ,X[2] ,X[6] ,X [9])
print (X[ int (1.0)])

Out[2]: 9 cat True 4.2


5

.‫ﻋﻨﺎﺻﺮ ﻳﮏ ﻟﻴﺴﺖ ﺧﻮﺩ ﻣیﺗﻮﺍﻧﺪ ﻟﻴﺴﺖ ﺑﺎﺷﻨﺪ‬


In [3]: spam =[[ 'cat ','bat '] ,[10 ,20 ,30 ,40 ,50]]
print ( spam [0])
print ( spam [0][1])
print ( spam [1][4])
‫‪ .۲-۴‬ﻟﻴﺴﺖ‬ ‫‪۴۶‬‬
‫‪Out[3]:‬‬ ‫]' ‪['cat ','bat‬‬
‫‪bat‬‬
‫‪50‬‬

‫ﺍﮔﺮ ﺍﺯ ﻳﮏ ﺍﻧﺪﻳﺲ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‪ ،‬ﻛﻞ ﻳﮏ ﻟﻴﺴﺖ ﺩﺍﺧﻠی ﺭﺍ ﻧﺸﺎﻥ ﻣیﺩﻫﺪ‪ .‬ﻭ ﺍﮔﺮ ﺍﺯ ﺩﻭ ﺍﻧﺪﻳﺲ ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ ﺍﻭﻟی‬
‫ﻟﻴﺴﺖ ﺩﺍﺧﻠی ﺭﺍ ﻧﺸﺎﻥ ﻣیﺩﻫﺪ ﻭ ﺩﻭﻣی ﻋﻨﺼﺮ ﺩﺍﺧﻞ ﺁﻥ ﺭﺍ ﻧﺸﺎﻥ ﻣیﺩﻫﺪ‪.‬‬

‫ﺍﻧﺪﻳﺲ ﻣﻨﻔی‬ ‫‪۱-۱-۲-۴‬‬

‫ﺑﻪ ﻃﻮﺭ ﻛﻠی ﺍﻧﺪﻳﺲ ﺍﺯ ﺻﻔﺮ ﺷﺮﻭع ﺷﺪﻩ ﻭ ﺍﻓﺰﺍﻳﺶ ﻣیﻳﺎﺑﺪ‪ .‬ﺍﮔﺮ ﺍﺯ ﺍﻋﺪﺍﺩ ﺻﺤﻴح ﻣﻨﻔی ﺍﺳﺘﻔﺎﺩﻩ ﺷﻮﺩ‪ ،‬ﻣﻘﺪﺍﺭ ﺍﻧﺪﻳﺲ‬
‫‪ ،-1‬ﺁﺧﺮﻳﻦ ﻋﻨﻀﺮ ﻟﻴﺴﺖ ﺭﺍ ﻧﺸﺎﻥ ﻣیﺩﻫﺪ ﻭ ﺍﻧﺪﻳﺲ ‪ ،-2‬ﻋﻨﺼﺮ ﻳﻜی ﻣﺎﻧﺪﻩ ﺑﻪ ﺁﺧﺮ‪ ،‬ﻗﺎﺑﻞ ﺩﺳﺘﺮﺳی ﺍﺳﺖ‪ .‬ﺑﻪ ﺷﻜﻞ‬
‫ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬

‫‪9‬‬ ‫‪5‬‬ ‫‪13 19 12‬‬ ‫‪8‬‬ ‫‪7‬‬ ‫‪4‬‬ ‫‪21‬‬ ‫‪2‬‬


‫]‪[−10] [−9‬‬ ‫]‪[−8‬‬ ‫]‪[−7‬‬ ‫]‪[−6‬‬ ‫]‪[−5‬‬ ‫]‪[−4‬‬ ‫]‪[−3‬‬ ‫]‪[−2‬‬ ‫]‪[−1‬‬

‫]‪[0‬‬ ‫]‪[1‬‬ ‫]‪[2‬‬ ‫]‪[3‬‬ ‫]‪[4‬‬ ‫]‪[5‬‬ ‫]‪[6‬‬ ‫]‪[7‬‬ ‫]‪[8‬‬ ‫]‪[9‬‬

‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫]' ‪spam =[ 'cat ','bat ','rat ',' elephant‬‬
‫)]‪print ( spam [ -1‬‬
‫)]‪print ( spam [ -3‬‬

‫‪Out[1]:‬‬ ‫‪elephant‬‬
‫‪bat‬‬

‫ﺯﻳﺮﻟﻴﺴﺖﻫﺎ ﻭ ﺑﺮﺵ‬ ‫‪۲-۱-۲-۴‬‬

‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﮏ ﺍﻧﺪﻳﺲ ﺩﺳﺘﺮﺳی ﺑﻪ ﻳﮏ ﻣﻘﺪﺍﺭ ﺍﺯ ﻟﻴﺴﺖ ﺭﺍ ﺍﻳﺠﺎﺩ ﻣیﻛﻨﺪ‪ .‬ﺑﺮﺵ ‪ ۱‬ﺩﺳﺘﺮﺳی ﺑﻪ ﭼﻨﺪ ﻣﻘﺪﺍﺭ ﺍﺯ ﻳﮏ‬
‫ﻟﻴﺴﺖ ﺭﺍ ﻓﺮﺍﻫﻢ ﻣیﺳﺎﺯﺩ‪ ،‬ﻛﻪ ﺑﻪ ﺁﻥ ﺯﻳﺮﻟﻴﺴﺖ ﻫﻢ ﻣی ﮔﻮﻳﻨﺪ‪ .‬ﺑﺮﺵﻫﺎ ﺩﺭﻭﻥ ﺑﺮﺍﻛﺖ ﻧﻮﺷﺘﻪ ﻣیﺷﻮﻧﺪ ﻭ ﺑﺎ ﺩﻭ ﻣﻘﺪﺍﺭ‬
‫ﺻﺤﻴح ﻛﻪ ﺑﺎ ﻋلاﻣﺖ )‪ (:‬ﺍﺯ ﻫﻢ ﺟﺪﺍ ﻣیﺷﻮﻧﺪ‪ ،‬ﻣﺸﺨﺺ ﻣیﮔﺮﺩﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫]' ‪spam =[ 'cat ','bat ','rat ',' elephant‬‬
‫)]‪print ( spam [0:4‬‬
‫)]‪print ( spam [1:3‬‬
‫)]‪print ( spam [0: -1‬‬

‫‪Out[2]:‬‬ ‫]' ‪['cat ','bat ','rat ',' elephant‬‬


‫]' ‪['bat ','rat‬‬
‫]' ‪['cat ','bat ','rat‬‬

‫‪1. slice‬‬
‫‪۴۷‬‬ ‫ﻓﺼﻞ ‪ .۴‬ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬
‫ﻗﺮﻣﻮﻝ ﻛﻠی ﺑﺮﺵ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫] ‪[ s t a r t : end : s t e p‬‬
‫ﺷﺮﻭع ﺑﺮﺵ ﺑﺎ ‪ start‬ﻭ ﺧﺎﺗﻤﻪ ﺁﻥ ﺑﺎ ‪ end‬ﺍﺳﺖ‪ .‬ﮔﺎﻡ ﺭﻓﺘﻦ ﺍﺯ ﺷﺮﻭع ﺗﺎ ﺧﺎﺗﻤﻪ ﺑﺎ ﺍﻧﺪﺍﺯﻩ ‪ step‬ﺭﻗﻢ ﻣیﺧﻮﺭﺩ‪ .‬ﻣﻘﺎﺩﻳﺮ‬
‫ﭘﻴﺶﻓﺮﺽ ﻫﺮ ﻳﮏ ﺍﺯ ﺍﺟﺮﺍﺀ ﺑﺎلا ﻳﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪.‬‬

‫• ﺷﺮﻭع ﺑﺮﺵ‪ ،‬ﻋﻨﺼﺮ ﺍﻭﻝ ﻟﻴﺴﺖ ﺍﺳﺖ‪.‬‬

‫• ﺧﺎﺗﻤﻪ ﺑﺮﺵ‪ ،‬ﻋﻨﺼﺮ ﭘﺎﻳﺎﻧی ﻟﻴﺴﺖ ﺍﺳﺖ‪.‬‬

‫• ﮔﺎﻡ ﺑﺮﺵ‪ ،‬ﺑﺮﺍﺑﺮ ﻭﺍﺣﺪ ﺍﺳﺖ‪.‬‬

‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫]‪lst =[5.5 ,2 ,3 ,10 ,1.5‬‬
‫)]‪print ( lst [:2‬‬
‫)]‪print ( lst [1:‬‬
‫)]‪print ( lst [:4:2‬‬
‫)]‪print ( lst [::2‬‬
‫)]‪print ( lst [4:1: -1‬‬
‫)]‪print ( lst [1: -1:2‬‬

‫‪Out[1]:‬‬ ‫]‪[5.5 , 2‬‬


‫]‪[2 , 3, 10 , 1.5‬‬
‫]‪[5.5 , 3‬‬
‫]‪[5.5 , 3, 1.5‬‬
‫]‪[1.5 , 10 , 3‬‬
‫]‪[2 , 10‬‬

‫ﺗﻐﻴﻴﺮ ﻣﻘﺎﺩﻳﺮ ﻟﻴﺴﺖ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻧﺪﻳﺲﻫﺎ‬ ‫‪۳-۱-۲-۴‬‬

‫ﻫﺮ ﺩﺍﺩﻩ ﻳﮏ ﻟﻴﺴﺖ ﺭﺍ ﻣیﺗﻮﺍﻥ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻧﺪﻳﺲ ﺁﻥ ﺩﺍﺩﻩ ﺗﻐﻴﻴﺮ ﺩﺍﺩ‪ .‬ﻣﺜل ًا ’‪ spam[1]=’dog‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻋﻀﻮ‬
‫ﺍﻭﻝ ﻟﻴﺴﺖ ﺗﻐﻴﻴﺮ ﻣﻘﺪﺍﺭ ﭘﻴﺪﺍ ﻣیﻛﻨﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫]' ‪spam =[ 'cat ','bat ','rat ',' elephant‬‬
‫' ‪spam [1]= 'dog‬‬
‫) ‪print ( spam‬‬
‫]‪spam [2]= spam [1‬‬
‫) ‪print ( spam‬‬
‫‪spam [ -1]=12.5‬‬
‫) ‪print ( spam‬‬

‫‪Out[2]:‬‬ ‫]' ‪['cat ', 'dog ', 'rat ', ' elephant‬‬
‫]' ‪['cat ', 'dog ', 'dog ', ' elephant‬‬
‫]‪['cat ', 'dog ', 'dog ', 12.5‬‬
‫‪ .۲-۴‬ﻟﻴﺴﺖ‬ ‫‪۴۸‬‬
‫ﺟﻤﻊ ﻭ ﺿﺮﺏ ﺩﺭ ﻟﻴﺴﺖﻫﺎ‬ ‫‪۴-۱-۲-۴‬‬

‫ﻋﻤﻠﮕﺮ )‪ (+‬ﺑﻴﻦ ﺩﻭ ﻟﻴﺴﺖ‪ ،‬ﻟﻴﺴﺖ ﺟﺪﻳﺪﯼ ﺍﺯ ﺗﺮﻛﻴﺐ ﺩﻭ ﻟﻴﺴﺖ ﺑﺪﺳﺖ ﻣیﺩﻫﺪ‪ .‬ﻋﻤﻠﮕﺮ )∗( ﺑﻴﻦ ﻳﮏ ﻟﻴﺴﺖ ﻭ‬
‫ﻳﮏ ﻋﺪﺩ ﺻﺤﻴح ﺑﺎﻋﺚ ﻣیﺷﻮﺩ ﻛﻪ ﻟﻴﺴﺖ ﺟﺪﻳﺪﯼ ﺑﺎ ﺗﻜﺮﺍﺭ ﺑﺪﺳﺖ ﺁﻳﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫)]'‪print ([1 ,2 ,3]+[ 'A','B','c‬‬
‫)‪print ([ 'x','y','z']*3‬‬

‫‪Out[1]:‬‬ ‫]'‪[1 , 2, 3, 'A', 'B', 'c‬‬


‫]'‪['x ', 'y', 'z', 'x', 'y', 'z', 'x', 'y', 'z‬‬

‫‪ ۲-۲-۴‬ﺍﻓﺰﻭﺩﻥ ﻋﻨﺎﺻﺮ ﺟﺪﻳﺪ ﺑﻪ ﻟﻴﺴﺖ‬


‫ﻟﻴﺴﺘی ﺭﺍ ﺳﺎﺧﺘﻪ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﺍﻛﻨﻮﻥ ﻗﺼﺪ ﺩﺍﺭﻳﻢ ﻛﻪ ﻋﻀﻮﻫﺎﯼ ﺟﺪﻳﺪﯼ ﺭﺍ ﺑﻪ ﺁﻥ ﺍﺿﺎﻓﻪ ﻛﻨﻴﻢ‪ .‬ﻣﺜلا ﻟﻴﺴﺖ ﺍﺳﺎﻣی‬
‫ﺩﺍﻧﺸﺠﻮﻳﺎﻥ ﻳﮏ ﻛلاﺱ ﺭﺍ ﺩﺍﺭﻳﻢ‪ ،‬ﺍﻣﺎ ﭼﻨﺪ ﺩﺍﻧﺸﺠﻮ ﺑﺎ ﺗﺎﺧﻴﺮ ﺛﺒﺖﻧﺎﻡ ﻛﺮﺩﻩﺍﻧﺪ‪ .‬ﺑﺮﺍﯼ ﺍﻓﺰﻭﺩﻥ ﭼﻨﺪ ﻧﻔﺮ لاﺯﻡ ﻧﻴﺴﺖ‬
‫ﻛﻪ ﺍﺯ ﻧﻮ ﻟﻴﺴﺖ ﺩﺍﻧﺸﺠﻮﻳﺎﻥ ﺭﺍ ﺑﺴﺎﺯﻳﻢ‪ ،‬ﺑﻠﻜﻪ ﺍﺳﺎﻣی ﻫﻤﺎﻥ ﭼﻨﺪ ﻧﻔﺮ ﺭﺍ ﺑﻪ ﻟﻴﺴﺖ ﻣﻮﺟﻮﺩ ﺍﺿﺎﻓﻪ ﻣیﻛﻨﻴﻢ‪.‬‬
‫ﺑﺮﺍﯼ ﺍﺿﺎﻓﻪ ﻧﻤﻮﺩﻥ ﺍﻋﻀﺎﯼ ﺟﺪﻳﺪ ﺑﻪ ﻳﮏ ﻟﻴﺴﺖ ﺭﺍﻩﻫﺎﯼ ﮔﻮﻧﺎﮔﻮﻧی ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪.‬‬

‫‪ .۱‬ﺭﻭﺵ ‪ :append‬ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﻋﻀﻮ ﺟﺪﻳﺪ ﻓﻘﻂ ﺑﻪ ﺍﻧﺘﻬﺎﯼ ﻟﻴﺴﺖ ﺍﺿﺎﻓﻪ ﻣیﺷﻮﺩ ﻭ ﺿﻤﻨ ًﺎ ﻫﺮ ﺑﺎﺭ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﺍﺯ ﺍﻳﻦ ﺭﻭﺵ ﺗﻨﻬﺎ ﻳﮏ ﻋﻀﻮ ﺍﺿﺎﻓﻪ ﻣیﺷﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫][= ‪lst‬‬
‫)' ‪lst . append ('hadi‬‬
‫)'&'( ‪lst . append‬‬
‫)' ‪lst . append ('hoda‬‬
‫) ‪print ( lst‬‬

‫‪Out[2]:‬‬ ‫]' ‪['ava ', 'ali ', 'reza ','shiva‬‬

‫ﺭﻭﺵ ‪ append‬ﻣیﺗﻮﺍﻧﺪ ﻳﮏ ﻟﻴﺴﺖ ﻛﺎﻣل ًا ﭘﻮﻳﺎ ﺍﻳﺠﺎﺩ ﻛﻨﺪ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﺍﺯ ﻳﮏ ﻟﻴﺴﺖ ﺧﺎﻟی ﺷﺮﻭع ﻣی‬
‫ﻛﻨﻴﻢ ﻭ ﺍﻋﻀﺎﯼ ﻟﻴﺴﺖ ﺭﺍ ﻛﻨﺎﺭ ﻫﻢ ﻣیﭼﻴﻨﻴﻢ‪.‬‬
‫‪In [3]:‬‬ ‫][= ‪lst‬‬
‫)' ‪lst . append ('hadi‬‬
‫)'&'( ‪lst . append‬‬
‫)' ‪lst . append ('hoda‬‬
‫) ‪print ( lst‬‬

‫‪Out[3]:‬‬ ‫]' ‪['hadi ', '&', 'hoda‬‬

‫ﺍﻓﺰﻭﺩﻥ ﺑﻪ ﺷﻜﻞ ﺑﺎلا ﺑﻮﺳﻴﻠﻪ ﺣﻠﻘﻪ ‪ while‬ﻫﻢ ﺍﻣﻜﺎﻥ ﭘﺬﻳﺮ ﺍﺳﺖ‪ .‬ﻳﻌﻨی ﻳﮏ ﺗﻌﺪﺍﺩ ﺍﺳﻢ ﺑﻪ ﻟﻴﺴﺖ ﺍﺿﺎﻓﻪ‬
‫ﻣیﺷﻮﺩ‪ .‬ﻭ ﺑﻪ ﻣﺤﺾ ﺍﻳﻦ ﻛﻪ ﻭﺭﻭﺩ ﺍﺳﺎﻣی ﭘﺎﻳﺎﻥ ﻳﺎﻓﺖ‪ .‬ﻛﻠﻴﺪ ‪ Enter‬ﺯﺩﻩ ﻣیﺷﻮﺩ‪ ،‬ﻛﻪ ﺩﺭ ﻭﺍﻗﻊ ﻳﮏ ﺭﺷﺘﻪ‬
‫ﺧﺎﻟی ﻭﺍﺭﺩ ﻣیﮔﺮﺩﺩ ﻛﻪ ﺧﺘﻢ ﺣﻠﻘﻪ ﺭﺍ ﺑﺎﻋﺚ ﻣیﺷﻮﺩ‪.‬‬
‫‪۴۹‬‬ ‫ﻓﺼﻞ ‪ .۴‬ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬
‫‪In [1]:‬‬ ‫][= ‪lst‬‬
‫‪name =0‬‬
‫‪while name != '':‬‬
‫)'‪name = input ('Enter name :‬‬
‫‪if name == '':‬‬
‫‪break‬‬
‫) ‪lst . append ( name‬‬
‫) ‪print ( lst‬‬

‫‪Out[1]:‬‬ ‫‪Enter name : ava‬‬


‫‪Enter name : hoda‬‬
‫‪Enter name : hadi‬‬
‫‪Enter name : reza‬‬
‫‪Enter name :‬‬
‫]' ‪['ava ', 'hoda ', 'hadi ', 'reza‬‬

‫‪ .۲‬ﺭﻭﺵ ‪ insert‬ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﻳﮏ ﻋﻀﻮ ﻣیﺗﻮﺍﻧﺪ ﻛﻪ ﺩﺭ ﻣﺤﻞ ﺩﻟﺨﻮﺍﻩ ﺑﻪ ﻟﻴﺴﺖ ﺷﻤﺎ ﺍﺿﺎﻓﻪ ﻣیﺷﻮﺩ‪ .‬ﺩﺭ‬
‫ﺍﻳﻨﺠﺎ ﺍﺯ ﺩﻭ ﭘﺎﺭﺍﻣﺘﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﺍﻭﻟی ﺍﻧﺪﻳﺲ ﻣﺤﻞ ﺍﺳﺖ ﻭ ﺩﻳﮕﺮﯼ ﻧﺎﻡ ﻋﻀﻮﯼ ﺍﺳﺖ ﻛﻪ ﻣیﺧﻮﺍﻫﻴﺪ‬
‫ﺍﺿﺎﻓﻪ ﺷﻮﺩ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻣیﺧﻮﺍﻫﻴﻢ ﺑﻪ ﻟﻴﺴﺖ ﻣﺜﺎﻝ ﻗﺒﻞ ﻧﺎﻡ ‪ shiva‬ﺩﺭ ﺍﻧﺪﻳﺲ ﻳﮏ ﻗﺮﺍﺭ ﮔﻴﺮﺩ‪.‬‬

‫‪In [2]:‬‬ ‫]' ‪students =[ 'ava ','ali ','reza‬‬


‫)' ‪students . insert (1 , 'shiva‬‬
‫) ‪print ( students‬‬

‫‪Out[2]:‬‬ ‫]' ‪['ava ', 'shiva ', 'ali ', 'reza‬‬

‫ﺣﺬﻑ ﺍﻋﻀﺎﯼ ﻟﻴﺴﺖ‬ ‫‪۳-۲-۴‬‬


‫ﮔﺎﻫی ﺍﻭﻗﺎﺕ لاﺯﻡ ﺍﺳﺖ ﻛﻪ ﻋﻨﺎﺻﺮﯼ ﺍﺯ ﻟﻴﺴﺘی ﺣﺬﻑ ﺷﻮﺩ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻳﮏ ﻳﺎ ﭼﻨﺪ ﺩﺍﻧﺸﺠﻮ‪ ،‬ﻣیﺧﻮﺍﻫﻨﺪ‬
‫ﺩﺭﺱ ﺧﺎﺻی ﺭﺍ ﺣﺬﻑ ﻛﻨﻨﺪ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎﻳﺪ ﺑﺪﻭﻥ ﺑﺎﺯﻧﻮﻳﺴی ﻟﻴﺴﺖ ﻣﻮﺟﻮﺩ ﺑﺘﻮﺍﻥ ﺍﺳﺎﻣی ﻳﮏ ﻳﺎ ﺟﻨﺪ ﻧﻔﺮ ﺭﺍ ﺍﺯ ﻟﻴﺴﺖ‬
‫ﺁﻥ ﻛلاﺱ ﺣﺬﻑ ﻛﺮﺩ‪.‬‬
‫ﺑﺮﺍﯼ ﺣﺬﻑ ﻧﻤﻮﺩﻥ ﺍﻋﻀﺎﯼ ﻳﮏ ﻟﻴﺴﺖ ﺭﺍﻩﻫﺎﯼ ﮔﻮﻧﺎﮔﻮﻧی ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪.‬‬

‫‪ .۱‬ﻓﺮﻣﺎﻥ ‪ :del‬ﺑﺎ ﺍﻳﻦ ﻣیﺗﻮﺍﻥ ﻳﮏ ﻋﻀﻮ ﻟﻴﺴﺖ ﻳﺎ ﺑﺮﺷی ﺍﺯ ﺁﻥ ﺭﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻧﺪﻳﺲ)ﻫﺎ(‪ ،‬ﺣﺬﻑ ﻧﻤﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [3]:‬‬ ‫]' ‪students =[ 'ava ','ali ','reza ', 'hoda ',' hooman ','hadi‬‬
‫]‪del students [2‬‬
‫) ‪print ( students‬‬

‫‪Out[3]:‬‬ ‫]' ‪['ava ', 'ali ', 'hoda ', ' hooman ', 'hadi‬‬

‫ﻣیﺗﻮﺍﻥ ﻳﮏ ﺑﺮﺷی ﺍﺯ ﻟﻴﺴﺖ ﺭﺍ ﺣﺬﻑ ﻛﺮﺩ‪.‬‬


‫ ﻟﻴﺴﺖ‬.۲-۴ ۵۰
In [1]: students =[ 'ava ','ali ','reza ', 'hoda ',' hooman ','hadi ']
del students [1:4]
print ( students )

Out[1]: ['ava ', ' hooman ', 'hadi ']

.‫ ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﺑﺎﻳﺪ ﺍﺯ ﻣﻘﺪﺍﺭ ﻋﻀﻮ ﺑﺮﺍﯼ ﭘﺎﺭﺍﻣﺘﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤﻮﺩ‬:remove ‫ ﺭﻭﺵ‬.۲

In [2]: students =[ 'ava ','ali ','reza ', 'hoda ',' hooman ','hadi ']
students . remove ('hoda ')
print ( students )

Out[2]: ['ava ', 'ali ', 'reza ', ' hooman ', 'hadi ']

‫ ﺿﻤﻨ ًﺎ ﺍﮔﺮ ﺩﺭ ﻟﻴﺴﺖ ﺑﺎلا‬.‫ ﻗﻘﻂ ﻳﮏ ﻋﻀﻮ ﺭﺍ ﻣیﺗﻮﺍﻥ ﺣﺬﻑ ﻛﺮﺩ‬،‫ ﺩﺭ ﻫﺮ ﺑﺎﺭ ﺍﺳﺘﻔﺎﺩﻩ‬،‫ ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ‬:‫ﺗﻮﺟﻪ‬
.‫ ﻓﻘﻂ ﺍﻭﻟﻴﻦ ﺁﻧﻬﺎ ﺣﺬﻑ ﻣیﺷﻮﺩ ﻭ ﺑﻘﻴﻪ ﻣﻮﺭﺩ ﻭ ﻳﺎ ﻣﻮﺍﺭﺩ ﻣﺸﺎﺑﻪ ﺑﺎﻗی ﻣیﻣﺎﻧﺪ‬.‫ ﺑﻮﺩ‬hoda ‫ﺩﻭ ﺗﺎ ﻧﺎﻡ‬

‫ ﺑﻪ ﺷﺮﻁ ﺁﻥ ﻛﻪ ﭘﺎﺭﺍﻣﺘﺮﯼ )ﺑﺪﻭﻥ ﺫﻛﺮ‬.‫ ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﺁﺧﺮﻳﻦ ﻋﻀﻮ ﻟﻴﺴﺖ ﺣﺬﻑ ﻣیﺷﻮﺩ‬:pop ‫ ﺭﻭﺵ‬.۳
:‫ ﻣﺜﺎﻝ‬.‫ ﺿﻤﻨ ًﺎ ﺍﻳﻦ ﺭﻭﺵ ﻣﻘﺪﺍﺭ ﻋﻀﻮ ﺣﺬﻑ ﺷﺪﻩ ﺭﺍ ﺑﺮﮔﺮﺩﺍﻧﺪﻩ ﻣیﺷﻮﺩ‬.‫ﺍﻧﺪﻳﺲ( ﻭﺟﻮﺩ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ‬

In [3]: students =[ 'ava ','ali ','reza ', 'hoda ',' hooman ','hadi ']
print ( students )
rm_stustudent = students . pop ()
print ( students )
print ( rm_stustudent )

Out[3]: ['ava ', 'ali ', 'reza ', 'hoda ', ' hooman ', 'hadi ']
['ava ', 'ali ', 'reza ', 'hoda ', ' hooman ']
hadi

.‫ﺍﻛﻨﻮﻥ ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻣیﺧﻮﺍﻫﻴﺪ ﻋﻀﻮ ﺩﻭﻡ ﻟﻴﺴﺖ ﺭﺍ ﺣﺬﻑ ﻛﻨﻴﺪ‬

In [4]: students =[ 'ava ','ali ','reza ', 'hoda ',' hooman ','hadi ']
print ( students )
rm_stustudent = students . pop (2)
print ( students )
print ( rm_stustudent )

Out[4]: ['ava ', 'ali ', 'reza ', 'hoda ', ' hooman ', 'hadi ']
['ava ', 'ali ', 'hoda ', ' hooman ', 'hadi ']
reza
‫‪۵۱‬‬ ‫ﻓﺼﻞ ‪ .۴‬ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬
‫ﺳﺎﻣﺎﻥ ﺩﺍﺩﻥ ﺑﻪ ﻟﻴﺴﺖ‬ ‫‪۴-۲-۴‬‬
‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﺷﺪ ﻟﻴﺴﺖ‪ ،‬ﻳﮏ ﺩﻧﺒﺎﻟﻪﺍﯼ ﺍﺯ ﺩﺍﺩﻩﻫﺎﺳﺖ ﻛﻪ ﻟﺰﻭﻣ ًﺎ ﺗﺮﺗﻴﺐ ﺍﻟﻔﺒﺎﻳﯽ ﻳﺎ ﺗﺮﺗﻴﺐ ﻋﺪﺩﯼ ﻧﺪﺍﺭﻧﺪ‪.‬‬
‫ﺍﻛﻨﻮﻥ ﺳﻮﺍﻝ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺁﻳﺎ ﻣیﺗﻮﺍﻥ ﺑﻪ ﺗﺮﺗﻴﺒﯽ ﻛﻪ ﺫﻛﺮ ﺷﺪ ﺁﻧﻬﺎ ﺭﺍ ﻣﺮﺗﺐ ﻧﻤﻮﺩ‪ .‬ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﺎﺭ ﺭﺍﻩﻫﺎﯼ ﻣﺨﺘﻠﻔی‬
‫ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪.‬‬

‫‪ .۱‬ﺭﻭﺵ ‪ :sort‬ﺍﻳﻦ ﺭﻭﺵ ﻗﺎﺩﺭ ﺑﻪ ﻣﺮﺗﺐ ﻛﺮﺩﻥ ﻋﺪﺩﯼ ﻳﺎ ﺭﺷﺘﻪﺍﯼ ﻳﮏ ﻟﻴﺴﺖ ﻫﺴﺖ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫]' ‪students =[ 'ava ','ali ','reza ', 'hoda ',' hooman ','hadi‬‬
‫)( ‪students . sort‬‬
‫) ‪print ( students‬‬

‫‪Out[1]:‬‬ ‫]' ‪['ali ', 'ava ', 'hadi ', 'hoda ', ' hooman ', 'reza‬‬

‫ﻣﺜﺎﻝ ﻋﺪﺩﯼ‪:‬‬
‫‪In [2]:‬‬ ‫]‪num =[4 ,8 ,1 ,2.2 ,9 ,5 ,10 ,7.5‬‬
‫)( ‪num . sort‬‬
‫) ‪print ( num‬‬

‫‪Out[2]:‬‬ ‫]‪[1 , 2.2 , 4, 5, 7.5 , 8, 9, 10‬‬

‫ﺩﺭ ﺍﻳﻨﺠﺎ ﺑﺎﻳﺪ ﺑﻪ ﺳﻪ ﻧﻜﺘﻪ ﺗﻮﺟﻪ ﻛﺮﺩ‪ .‬ﺍﻭﻝ ﺍﻳﻦ ﻛﻪ ﺍﮔﺮ ﺩﺭ ﻣﻴﺎﻥ ﺍﺳﺎﻣی ﺣﺮﻑ ﻳﺎ ﺣﺮﻭﻑ ﺑﺰﺭﮒ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ‬
‫ﺑﺎﺷﺪ ﺗﺮﺗﻴﺐ ﺭﺍ ﺑﻪ ﻫﻢ ﻣیﺯﻧﺪ‪ .‬ﻣﮕﺮ ﺁﻥ ﻛﻪ ﺗﻤﺎﻡ ﺣﺮﻭﻑ ﺑﺪﻭﻥ ﺍﺳﺘﺜﻨﺎ ﺑﺰﺭﮒ ﺑﺎﺷﻨﺪ‪ .‬ﺩﻭﻡ ﺍﻳﻦ ﻛﻪ ﻟﻴﺴﺘی‬
‫ﻣﺮﻛﺐ ﺍﺯ ﺭﺷﺘﻪ ﻭ ﻋﺪﺩ‪ ،‬ﻗﺎﺑﻞ ﻣﺮﺗﺐ ﻛﺮﺩﻥ ﻧﻴﺴﺖ‪ .‬ﺳﻮﻡ ﺍﻳﻦ ﻛﻪ ﭘﺲ ﺍﺯ ﻣﺮﺗﺐ ﻛﺮﺩﻥ ﻟﻴﺴﺖ ﺩﻳﮕﺮ ﻧﻤیﺗﻮﺍﻥ‬
‫ﺑﻪ ﻟﻴﺴﺖ ﺍﻭﻟﻴﻪ ﺑﺎﺯﮔﺸﺖ‪.‬‬

‫‪ .۲‬ﺗﺎﺑع ‪ :sorted‬ﺑﺎ ﺍﻳﻦ ﺗﺎﺑع ﺿﻤﻦ ﺍﻳﻦ ﻛﻪ ﺩﺍﺩﻩﻫﺎﯼ ﻟﻴﺴﺖ ﻣﺮﺗﺐ ﻣیﺷﻮﻧﺪ ﻟﻴﺴﺖ ﺍﻭﻟﻴﻪ ﺣﻔﻆ ﻣیﺷﻮﺩ ﻭ ﺩﺳﺖ‬
‫ﻧﺨﻮﺭﺩﻩ ﺑﺎﻗی ﻣیﻣﺎﻧﺪ‪ ..‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [3]:‬‬ ‫]' ‪students =[ 'ava ','ali ','reza ', 'hoda ','hadi‬‬
‫)) ‪print (' sorted list :', sorted ( students‬‬
‫) ‪print (' original list :', students‬‬

‫‪Out[3]:‬‬ ‫]' ‪sorted list :[ 'ali ', 'ava ', 'hadi ', 'hoda ', 'reza‬‬
‫]' ‪original list :[ 'ava ', 'ali ', 'reza ', 'hoda ', 'hadi‬‬

‫ﻣﺜﺎﻝ ﻋﺪﺩﯼ‪:‬‬
‫‪In [4]:‬‬ ‫]‪num =[4 ,8 ,1 ,2.2 ,9 ,5 ,10 ,7.5‬‬
‫)) ‪print (' sorted list :', sorted ( num‬‬
‫) ‪print (' original list :',num‬‬

‫‪Out[4]:‬‬ ‫]‪sorted list : [1 , 2.2 , 4, 5, 7.5 , 8, 9, 10‬‬


‫]‪original list : [4 , 8, 1, 2.2 , 9, 5, 10 , 7.5‬‬
‫‪ .۲-۴‬ﻟﻴﺴﺖ‬ ‫‪۵۲‬‬
‫‪ ۵-۲-۴‬ﺩﺭﺳﺖ ﻛﺮﺩﻥ ﻟﻴﺴﺖ ﺑﺎ ﺗﺎﺑع ‪range‬‬
‫ﺍﮔﺮ ﺗﺎﺑع ‪ range‬ﺩﺭﻭﻥ ﺗﺎﺑع )(‪ range‬ﻗﺮﺍﺭ ﮔﻴﺮﺩ ﻳﮏ ﻟﻴﺴﺖ ﺍﻳﺠﺎﺩ ﻣیﺷﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫))‪lst = list ( range (1 ,6‬‬
‫) ‪print ( lst‬‬

‫‪Out[1]:‬‬ ‫]‪[1 , 2, 3, 4, 5‬‬

‫ﻣیﺗﻮﺍﻥ ﺍﺯ ﺁﺭﮔﻮﻣﺎﻥ ﺳﻮﻡ ﺗﺎﺑع ‪ range‬ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ ﻭ ﻳﮏ ﻟﻴﺴﺖ ﺍﺯ ﺍﻋﺪﺍﺩ ﺯﻭج ﺳﺎﺧﺖ‪.‬‬
‫‪In [2]:‬‬ ‫))‪lst = list ( range (2 ,11 ,2‬‬
‫) ‪print ( lst‬‬

‫‪Out[2]:‬‬ ‫]‪[2 , 4, 6, 8, 10‬‬

‫ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﺎﺑع ‪ range‬ﻣیﺗﻮﺍﻥ ﻟﻴﺴﺖﻫﺎﯼ ﻣﺘﻔﺎﻭﺗی ﺭﺍ ﺍﻳﺠﺎﺩ ﻧﻤﻮﺩ‪ .‬ﻣﺜل ًا ﻟﻴﺴﺘی ﺍﺯ ﻣﺮﺑع ﺍﻋﺪﺍﺩ ‪ ۱‬ﺗﺎ ‪۱۰‬‬
‫‪In [3]:‬‬ ‫][= ‪squares‬‬
‫‪for value in range (1 ,11):‬‬
‫‪square = value **2‬‬
‫) ‪squares . append ( square‬‬
‫) ‪print ( squares‬‬

‫‪Out[3]:‬‬ ‫]‪[1 , 4, 9, 16 , 25 , 36 , 49 , 64 , 81 , 100‬‬

‫ﺍﻟﺒﺘﻪ ﻛﺪ ﺑﺎلا ﺭﺍ ﻣیﺗﻮﺍﻥ ﻛﻮﺗﺎﻩﺗﺮ ﻫﻢ ﻧﻮﺷﺖ‪:‬‬


‫‪In [4]:‬‬ ‫][= ‪squares‬‬
‫‪for value in range (1 , 11):‬‬
‫)‪squares . append ( value **2‬‬
‫) ‪print ( squares‬‬

‫‪Out[4]:‬‬ ‫]‪[1 , 4, 9, 16 , 25 , 36 , 49 , 64 , 81 , 100‬‬

‫ﺣﺘی ﻣیﺗﻮﺍﻥ ﻛﺪ ﺑﺎلا ﺭﺍ ﻓﺸﺮﺩﻩﺗﺮ ﻫﻢ ﻧﻮﺷﺖ‪.‬‬


‫‪In [5]:‬‬ ‫][= ‪squares‬‬
‫])‪[x **2 for x in range (1 ,11‬‬

‫‪Out[5]:‬‬ ‫]‪[1 , 4, 9, 16 , 25 , 36 , 49 , 64 , 81 , 100‬‬

‫ﻛﭙﯽ ﻛﺮﺩﻥ ﻟﻴﺴﺖ‬ ‫‪۶-۲-۴‬‬


‫ﺩﺭ ﭘﺎﺭﻩﺍﯼ ﺍﻭﻗﺎﺕ لاﺯﻡ ﺍﺳﺖ ﻛﻪ ﺍﺯ ﻳﮏ ﻟﻴﺴﺖ ﻛﭙﯽ ﺗﻬﻴﻪ ﺷﻮﺩ‪ .‬ﺍﻳﻦ ﻛﺎﺭ ﺭﺍ ﻣیﺗﻮﺍﻥ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺑﺮﺵ ﺍﻧﺠﺎﻡ ﺩﺍﺩ‬
‫ﻛﻪ ﻋﻀﻮ ﺍﺑﺘﺪﺍ ﻭ ﺍﻧﺘﻬﺎﯼ ﺁﻥ ﻣﺸﺨﺺ ﻧﻴﺴﺖ‪ ،‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺷﺎﻣﻞ ﺗﻤﺎﻡ ﺍﻋﻀﺎﯼ ﻟﻴﺴﺖ ﺍﻭﻟﻴﻪ ﻣیﺷﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
۵۳ ‫ ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬.۴ ‫ﻓﺼﻞ‬
In [1]: my_foods = ['pizza ',' falafel ',' carrot cake ']
friend_foods = my_foods [:]
print ("My favorite foods are :")
print ( my_foods )
print ("\ nMy friend 's favorite foods are :")
print ( friend_foods )

Out[1]: My favorite foods are :


['pizza ', ' falafel ', ' carrot cake ']

My friend 's favorite foods are :


['pizza ', ' falafel ', ' carrot cake ']

‫ﺍﻛﻨﻮﻥ ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﻪ ﻧﺸﺎﻥ ﺩﻫﻴﻢ ﻛﻪ ﻭﺍﻗﻌ ًﺎ ﺩﻭ ﻟﻴﺴﺖ ﻣﺠﺰﺍ ﺍﺯ ﻫﻢ ﺩﺍﺭﻳﻢ ﺑﻪ ﻫﺮ ﻛﺪﺍﻡ ﺍﺯ ﺁﻧﻬﺎ ﻳﮏ ﻏﺬﺍﯼ ﺟﺪﻳﺪ ﺍﺿﺎﻓﻪ‬
.‫ﻣیﻛﻨﻴﻢ‬

In [2]: my_foods = ['pizza ',' falafel ',' carrot cake ']


friend_foods = my_foods [:]
my_foods . append (' hummus ')
friend_foods . append ('ice cream ')
print ("My favorite foods are :")
print ( my_foods )
print ("\ nMy friend 's favorite foods are :")
print ( friend_foods )

Out[2]: My favorite foods are :


['pizza ', ' falafel ', ' carrot cake ', ' hummus ']

My friend 's favorite foods are :


['pizza ', ' falafel ', ' carrot cake ', 'ice cream ']

.‫ﺍﻛﻨﻮﻥ ﺑﺮﺍﯼ ﻛﭙﯽ ﻛﺮﺩﻥ ﺍﺯ ﻃﺮﻳﻖ ﺑﺮﺵ ﻟﻴﺴﺖ ﺍﺳﺘﻔﺎﺩﻩ ﻧﻤیﺷﻮﺩ‬

In [3]: my_foods = ['pizza ', ' falafel ', ' carrot cake ']

friend_foods = my_foods
my_foods . append (' hummus ')
friend_foods . append ('ice cream ')
print ("My favorite foods are :")
print ( my_foods )
print ("\ nMy friend 's favorite foods are :")
print ( friend_foods )
‫‪ .۳-۴‬ﭼﻨﺪﺗﺎﻳﯽ‬ ‫‪۵۴‬‬
‫‪Out[3]:‬‬ ‫‪My favorite foods are :‬‬
‫]' ‪['pizza ',' falafel ',' carrot cake ',' hummus ','ice cream‬‬

‫‪My friend 's favorite foods are :‬‬


‫]' ‪['pizza ',' falafel ',' carrot cake ',' hummus ','ice cream‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‪ ،‬ﻫﺮ ﺩﺍﺩﻩﺍﯼ ﻛﻪ ﺑﻪ ﻟﻴﺴﺖ ‪ my_foods‬ﺍﺿﺎﻓﻪ ﻣیﺷﻮﺩ‪ ،‬ﻋﻴﻨ ًﺎ ﺑﻪ ﻟﻴﺴﺖ ‪friend_foods‬‬
‫ﺭﺍﻩ ﻣیﻳﺎﺑﺪ ﻭ ﺑﺎﻟﻌﻜﺲ‪ .‬ﭼﺮﺍ ﻛﻪ ﺍﺯ ﺍﻳﻦ ﻃﺮﻳﻖ‪ ،‬ﺁﺩﺭﺱ ﺣﺎﻓﻈﻪ ﺩﺭ ﺩﻭ ﻟﻴﺴﺖ ﻳﺎﺩ ﺷﺪﻩ ﻳﻜﺴﺎﻥ ﺍﺳﺖ‪.‬‬

‫ﭘﻴﻤﺎﻳﺶ ﻟﻴﺴﺖ ﺗﻮﺳﻂ ﺣﻠﻘﻪ‬ ‫‪۱-۶-۲-۴‬‬

‫ﺩﺭ ﺣﻴﻦ ﺍﺟﺮﺍﯼ ﺣﻠﻘﻪ ﻣیﺗﻮﺍﻥ ﺑﻪ ﺍﻋﻀﺎﯼ ﻟﻴﺴﺖ ﺩﺳﺖ ﻳﺎﻓﺖ‪ .‬ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﻣیﺗﻮﺍﻥ ﺗﻮﺳﻂ ﺣﻠﻘﻪ ﻋﻨﺎﺻﺮ ﻟﻴﺴﺖ‬
‫ﺭﺍ ﭘﻴﻤﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫]'‪vowels = ['a', 'e', 'i', 'o', 'u‬‬
‫" ‪word = " Melli_bank‬‬
‫‪for letter in word :‬‬
‫‪if letter in vowels :‬‬
‫) ‪print ( letter‬‬

‫‪Out[1]:‬‬ ‫‪e‬‬
‫‪i‬‬
‫‪a‬‬

‫ﭼﻨﺪﺗﺎﻳﯽ‬ ‫‪۳-۴‬‬
‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﺩﺭ ﻟﺴﺖﻫﺎ ﻣلاﺣﻈﻪ ﺷﺪ‪ ،‬ﺁﻧﻬﺎ ﻧﺴﺒﺖ ﺑﻪ ﺗﻐﻴﻴﺮﺍﺕ ﻛﺎﻣل ًا ﺍﻧﻌﻄﺎﻑ ﺩﺍﺭﻧﺪ‪ .‬ﻭ ﺗﻐﻴﻴﺮﺍﺕ ﺭﺍ ﺑﺨﻮﺑﯽ‬
‫ﻣیﭘﺬﻳﺮﻧﺪ‪ .‬ﺍﻣﺎ ﺩﺭ ﭘﺎﺭﻩﺍﯼ ﺍﺯ ﻛﺎﺭﺑﺮﺩﻫﺎ لاﺯﻡ ﺍﺳﺖ ﺩﻧﺒﺎﻟﻪ ﺩﺍﺩﻩﻫﺎ ﺗﻐﻴﻴﺮ ﻧﻜﻨﻨﺪ‪ .‬ﻭ ﺩﺭ ﻃﻮﻝ ﺑﺮﻧﺎﻣﻪ ﺛﺎﺑﺖ ﺑﻤﺎﻧﻨﺪ‪.‬‬

‫ﺗﻌﺮﻳﻒ ﭼﻨﺪﺗﺎﻳﯽ‬ ‫‪۱-۳-۴‬‬


‫ﺩﺭ ﭼﻨﺪﺗﺎﻳﯽ‪ ،‬ﺩﻧﺒﺎﻟﻪ ﺩﺍﺩﻩﻫﺎ ﻣﺎﻧﻨﺪ ﻟﻴﺴﺖ ﻫﺴﺘﻨﺪ ﺑﺎ ﺍﻳﻦ ﺗﻔﺎﻭﺕ ﻛﻪ ﺑﺠﺎﯼ ﻋلاﻣﺖ ﺑﺮﺍﻛﺖ ﺍﺯ ﻋلاﻣﺖ ﭘﺮﺍﻧﺘﺰ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﻣیﺷﻮﺩ‪ .‬ﻭ ﺑﺎ ﺍﻧﺪﻳﺲ ﻣیﺗﻮﺍﻥ ﺑﻪ ﺍﻋﻀﺎﯼ ﺁﻥ ﺩﺳﺘﺮﺳی ﺩﺍﺷﺖ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫)‪dimensions =(3 ,4 ,5‬‬
‫)]‪print ( dimensions [0‬‬
‫)]‪print ( dimensions [2‬‬

‫‪Out[2]:‬‬ ‫‪3‬‬
‫‪5‬‬

‫ﺍﻛﻨﻮﻥ ﺳﻌی ﻛﻨﻴﻢ ﻛﻪ ﻣﻘﺪﺍﺭ ﻳﮏ ﻋﻀﻮ ﭼﻨﺪﺗﺎﻳﯽ ﺭﺍ ﺗﻐﻴﻴﺮ ﺩﻫﻴﻢ‪.‬‬


‫‪۵۵‬‬ ‫ﻓﺼﻞ ‪ .۴‬ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬
‫‪In [1]:‬‬ ‫)‪dimensions =(3 ,4 ,5‬‬
‫‪dimensions [1]=7‬‬

‫‪Out[1]:‬‬ ‫‪---------------------------------------------------------‬‬
‫‪IndexError‬‬ ‫) ‪Traceback ( most recent call last‬‬
‫‪Cell In [2] , line 2‬‬
‫)‪1 dimensions =(3 ,4 ,5‬‬
‫‪----> 2 dimensions [1]=7‬‬

‫‪TypeError : 'tuple ' object does not support item assignment‬‬

‫ﺍﮔﺮ ﺍﺣﻴﺎﻧ ًﺎ ﭼﻨﺪﺗﺎﻳﯽ ﺩﺍﺭﺍﯼ ﻳﮏ ﻋﻀﻮ ﺑﻮﺩ‪ ،‬ﺑﺎﻳﺪ ﻛﺎﻣﺎﯼ ﺑﻌﺪ ﺍﺯ ﺁﻥ ﮔﺬﺍﺷﺘﻪ ﺷﻮﺩ‪ ،‬ﺩﺭ ﻏﻴﺮ ﺍﻳﻦ ﺻﻮﺭﺕ ﭼﻨﺪﺗﺎﻳﯽ‬
‫ﻣﺤﺴﻮﺏ ﻧﻤیﺷﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬

‫‪In [2]:‬‬ ‫)‪tp0 =(5.5‬‬


‫)‪tp1 =(5.5 ,‬‬
‫)) ‪print ( type ( tp0‬‬
‫)) ‪print ( type ( tp1‬‬

‫‪Out[2]:‬‬ ‫>' ‪<class 'float‬‬


‫>' ‪<class 'tuple‬‬

‫ﺍﮔﺮ ﭼﻨﺪ ﻣﻔﺪﺍﺭ ﺭﺍ ﺑﻪ ﻣﺘﻐﻴﺮ ﻧﺴﺒﺖ ﺩﻫﻴﻢ‪ ،‬ﺩﺭ ﻭﺍﻗﻊ ﻳﮏ ﭼﻨﺪﺗﺎﻳﯽ ﺳﺎﺧﺘﻪ ﻣیﺷﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬

‫‪In [3]:‬‬ ‫‪tup ='3D' ,3 ,5.5 ,8‬‬


‫) ‪print ( tup‬‬
‫)]‪print ( tup [1:3‬‬

‫‪Out[3]:‬‬ ‫)‪('3D ', 3, 5.5 , 8‬‬


‫)‪(3 , 5.5‬‬

‫‪ ۴-۴‬ﺭﺷﺘﻪﻫﺎ ﻭ ﺭﻭﺵﻫﺎ‬
‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻗﺒل ًا ﻣﺸﺎﻫﺪﻩ ﺷﺪ‪ ،‬ﺭﺷﺘﻪ ﻳﮏ ﺩﻧﺒﺎﻟﻪ ﺍﺯ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﺍﺳﺖ‪ .‬ﻛﻪ ﻣیﺗﻮﺍﻥ ﺑﻪ ﻫﺮ ﻳﮏ ﺍﺯ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﺑﺎ‬
‫ﺍﻧﺪﻳﺲ ﺑﻪ ﺁﻧﻬﺎ ﺩﺳﺘﺮﺳی ﭘﻴﺪﺍ ﻛﺮﺩ‪ .‬ﺿﻤﻨ ًﺎ ﺩﺭ ﺍﻳﻦ ﻧﻮع ﺩﺍﺩﻩ ﻣیﺗﻮﺍﻥ ﺑﺮﺵ ﻧﻴﺰ ﺍﻳﺠﺎﺩ ﻧﻤﻮﺩ‪.‬‬

‫‪In [4]:‬‬ ‫' ‪name =' hooman‬‬


‫) ‪print ( name‬‬
‫)]‪print ( name [1‬‬
‫)]‪print ( name [2:5‬‬
‫)]‪print ( name [ -1‬‬
‫ ﺭﺷﺘﻪﻫﺎ ﻭ ﺭﻭﺵﻫﺎ‬.۴-۴ ۵۶
Out[4]: hooman
o
oma
n

:‫ ﻣﺜﺎﻝ‬.‫ﺍﻛﻨﻮﻥ ﺳﻌی ﻛﻨﻴﻢ ﻛﻪ ﻛﺎﺭﺍﻛﺘﺮ ﺭﺷﺘﻪ ﺭﺍ ﺗﻐﻴﻴﺮ ﺩﻫﻴﻢ‬


In [1]: name =' hooman '
name [2]= 'u'

Out[1]: ---------------------------------------------------------
IndexError Traceback ( most recent call last )
Cell In [4] , line 2
1 name =' hooman '
----> 2 name [2]= 'u'

TypeError : 'str ' object does not support item assignment

‫ ﺭﻭﺵﻫﺎ‬۱-۴-۴
:‫ ﻣﺜﺎﻝ‬.‫ ﺑﺎ ﺍﻳﻦ ﻣیﺗﻮﺍﻥ ﺷﺮﻭع ﻳﮏ ﺯﻳﺮﺭﺷﺘﻪ ﺭﺍ ﺩﺭ ﺩﺍﺧﻞ ﻳﮏ ﺭﺷﺘﻪ ﻣﺸﺨﺺ ﻛﺮﺩ‬:find ‫ ﺭﻭﺵ‬.۱
In [2]: str =' hooman '
str . find ('oo ')

Out[2]: 1

:‫ ﻣﺜﺎﻝ‬.‫ ﺑﺎ ﺍﻳﻦ ﺭﻭﺵ ﺗﻤﺎﻡ ﺣﺮﻭﻑ ﺑﺰﺭﮒ ﺑﻪ ﺣﺮﻭﻑ ﻛﻮﭼﮏ ﺗﺒﺪﻳﻞ ﻣیﺷﻮﺩ‬:lower ‫ ﺭﻭﺵ‬.۲
In [3]: 'i Enjoy traveling . Do you ?'. lower ()

Out[3]: 'i enjoy traveling . do you ?'

:‫ ﻣﺜﺎﻝ‬.‫ ﺑﺎ ﺍﻳﻦ ﺭﻭﺵ ﺗﻤﺎﻡ ﺣﺮﻭﻑ ﻛﻮﭼﮏ ﺑﻪ ﺣﺮﻭﻑ ﻛﻮﭼﮏ ﺗﺒﺪﻳﻞ ﻣیﺷﻮﺩ‬:upper ‫ ﺭﻭﺵ‬.۳
In [4]: 'i Enjoy traveling . Do you ?'. upper ()

Out[4]: 'I ENJOY TRAVELING . DO YOU ?'

:‫ ﻣﺜﺎﻝ‬.‫ ﺑﺎ ﺍﻳﻦ ﺭﻭﺵ ﺗﻤﺎﻡ ﺣﺮﻭﻑ ﻛﻮﭼﮏ ﺍﻭﻝ ﻫﺮ ﻛﻠﻤﻪ ﺑﻪ ﺣﺮﻭﻑ ﺑﺰﺭﮒ ﺗﺒﺪﻳﻞ ﻣیﺷﻮﺩ‬:title ‫ ﺭﻭﺵ‬.۴
In [5]: 'i Enjoy traveling . do you ?'. title ()

Out[5]: 'I Enjoy Traveling . Do You ?'


۵۷ ‫ ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬.۴ ‫ﻓﺼﻞ‬
:‫ ﻣﺜﺎﻝ‬.‫ ﺑﺎ ﺍﻳﻦ ﺭﻭﺵ ﻣیﺗﻮﺍﻥ ﻳﮏ ﻟﻴﺴﺖ ﺍﺯ ﺭﺷﺘﻪﻫﺎ ﺭﺍ ﺑﻪ ﻳﮏ ﺭﺷﺘﻪ ﻭﺍﺣﺪ ﺗﺒﺪﻳﻞ ﻧﻤﻮﺩ‬:join ‫ ﺭﻭﺵ‬.۵
In [1]: ', '. join ([ 'cats ', 'rats ', 'bats '])

Out[1]: 'cats , rats , bats '

:‫ﻣﺜﺎﻝ ﺩﻳﮕﺮ‬
In [2]: ' '. join ([ 'My ', 'name ', 'is ', 'Saeed '])

Out[2]: 'My name is Saeed '

‫ ﻳﻌﻨی ﻳﮏ ﺭﺷﺘﻪ ﺭﺍ ﺑﻪ ﻳﮏ ﻟﻴﺴﺖ ﺍﺯ ﺭﺷﺘﻪ ﻳﺎ‬.‫ ﻋﻤﻞ ﻣیﻛﻨﺪ‬join ‫ ﺍﻳﻦ ﺭﻭﺵ ﻋﻜﺲ ﺭﻭﺵ‬:split ‫ ﺭﻭﺵ‬.۶
:‫ ﻣﺜﺎﻝ‬.‫ﺭﺷﺘﻪﻫﺎ ﺗﺒﺪﻳﻞ ﻣیﻛﻨﺪ‬
In [3]: 'My name is Saeed .'. split ()

Out[3]: ['My ', 'name ', 'is ', 'Saeed .']

‫ ﭼﭗﭼﻴﻦ ﻭ ﻭﺳﻂﭼﻴﻦ‬،‫ ﺩﺭ ﻳﮏ ﺑﺎﺯﻩ ﻣیﺗﻮﺍﻥ ﻳﮏ ﻣﺘﻦ ﺭﺍ ﺭﺍﺳﺖﭼﻴﻦ‬:rjust, ljust, center ‫ ﺭﻭﺵ‬.۷


:‫ ﻣﺜﺎﻝ ﺭﺍﺳﺖﭼﻴﻦ‬.‫ﻧﻤﻮﺩ‬
In [4]: 'Hello '. rjust (10)

Out[4]: ' Hello '

In [5]: 'Hello '. rjust (20 , '*')

Out[5]: ' *************** Hello '

:‫ﻣﺜﺎﻝ ﭼﭗﭼﻴﻦ‬
In [6]: 'Hello '. ljust (10)

Out[6]: 'Hello '

In [7]: 'Hello '. ljust (20 , '-')

Out[7]: 'Hello ---------------'

:‫ﻣﺜﺎﻝ ﻭﺳﻂﭼﻴﻦ‬
In [8]: 'Hello '. center (20)

Out[8]: ' Hello '


‫‪ .۴-۴‬ﺭﺷﺘﻪﻫﺎ ﻭ ﺭﻭﺵﻫﺎ‬ ‫‪۵۸‬‬
‫‪In [1]:‬‬ ‫)'=' ‪'Hello '. center (20 ,‬‬

‫‪Out[1]:‬‬ ‫' ======== ‪' ======= Hello‬‬

‫ﺭﻭﺵ ‪ :rstrip, lstrip, strip‬ﺍﮔﺰ ﺍﻃﺮﺍﻑ ﺭﺷﺘﻪﻫﺎ ﺍﺯ ﺭﺍﺳﺖ ﻳﺎ ﭼﭗ ﻭ ﻳﺎ ﺍﺯ ﻃﺮﻓﻴﻦ ﺟﺎﯼ ﺧﺎﻟی ﻭﺟﻮﺩ‬
‫ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﻣیﺗﻮﺍﻥ ﺑﺎ ﺍﻳﻦ ﺭﻭﺵﻫﺎ ﺁﻧﻬﺎ ﺭﺍ ﺣﺬﻑ ﻧﻤﻮﺩ‪ .‬ﻣﺜﺎﻝ ﺟﺎﯼ ﺧﺎﻟی ﺭﺍﺳﺖ‪:‬‬
‫‪In [2]:‬‬ ‫' = ‪spam‬‬ ‫‪Hello World‬‬ ‫'‬
‫)( ‪spam . rstrip‬‬

‫‪Out[2]:‬‬ ‫'‬ ‫' ‪Hello World‬‬

‫ﻣﺜﺎﻝ ﺟﺎﯼ ﺧﺎﻟی ﭼﭗ‪:‬‬

‫‪In [3]:‬‬ ‫' = ‪spam‬‬ ‫‪Hello World‬‬ ‫'‬


‫)( ‪spam . lstrip‬‬

‫‪Out[3]:‬‬ ‫‪'Hello World‬‬ ‫'‬

‫ﻣﺜﺎﻝ ﺑﺪﻭﻥ ﺟﺎﯼ ﺧﺎﻟی‪:‬‬


‫‪In [4]:‬‬ ‫' = ‪spam‬‬ ‫‪Hello World‬‬ ‫'‬
‫)( ‪spam . strip‬‬

‫‪Out[4]:‬‬ ‫' ‪'Hello World‬‬

‫ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﺟﺎﯼ ﺧﺎﻟی ﺑﻴﻦ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ ﺩﺭ ﻳﮏ ﺭﺷﺘﻪ ﺭﺍ ﺣﺬﻑ ﻛﻨﻴﻢ‪ .‬ﻣیﺗﻮﺍﻥ ﺍﺯ ﺭﻭﺵ ‪ replace‬ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﻧﻤﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [5]:‬‬ ‫'‪s= 'p y t h o n‬‬
‫)''‪s_mod =s. replace (' ',‬‬
‫‪s_mod‬‬

‫‪Out[5]:‬‬ ‫' ‪' python‬‬

‫ﺗﺒﺪﻳﻞ ﺭﺷﺘﻪ ﺑﻪ ﻟﻴﺴﺖ‬ ‫‪۲-۴-۴‬‬

‫ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺍﻣﻜﺎﻧﺎﺕ ﺗﻐﻴﻴﺮ ﺑﻴﺸﺘﺮ ﺩﺭ ﺳﺎﺧﺘﺎﺭ ﻟﻴﺴﺖ ﻣیﺗﻮﺍﻥ ﻳﮏ ﺭﺷﺘﻪ ﺭﺍ ﺑﺎ ﺗﺎﺑع )(‪ list‬ﺑﻪ ﻳﮏ ﻟﻴﺴﺖ ﺗﺒﺪﻳﻞ ﻧﻤﻮﺩ‪.‬‬
‫ﻭ ﺳﭙﺲ ﺑﻌﺪ ﺍﺯ ﺍﻋﻤﺎﻝ ﺗﻐﻴﻴﺮﺍﺕ‪ ،‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ )(‪ join‬ﺑﻪ ﺳﺎﺧﺘﺎﺭ ﺭﺷﺘﻪ ﺑﺎﺯ ﮔﺮﺩﻳﻢ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪۵۹‬‬ ‫ﻓﺼﻞ ‪ .۴‬ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬
‫‪In [1]:‬‬ ‫' ‪S= ' hamidian‬‬
‫)‪L= list (S‬‬
‫)‪print (L‬‬
‫'‪L [3]= 'e‬‬
‫'‪L [5]= 'a‬‬
‫'‪L [ -2]= 'n‬‬
‫'‪L [ -1]= 'i‬‬
‫)‪print (L‬‬
‫)‪S= ''. join (L‬‬
‫)‪print (S‬‬

‫‪Out[1]:‬‬ ‫]'‪['h ', 'a', 'm', 'i', 'd', 'i', 'a', 'n‬‬
‫]'‪['h ', 'a', 'm', 'e', 'd', 'a', 'n', 'i‬‬
‫‪hamedani‬‬

‫‪ ۵-۴‬ﺩﻳﻜﺸﻨﺮﯼ‬
‫ﺩﻳﻜﺸﻨﺮﯼ ﻣﺎﻧﻨﺪ ﻟﻴﺴﺖ ﻣیﺗﻮﺍﻧﺪ ﺷﺎﻣﻞ ﺗﻌﺪﺍﺩ ﺯﻳﺎﺩﯼ ﻣﻘﺪﺍﺭ ﺑﺎﺷﺪ‪ .‬ﺍﻣﺎ ﺑﺮ ﺧلاﻑ ﻟﻴﺴﺖ ﺑﺎ ﺍﻧﺪﻳﺲ ﻛﺎﺭ ﻧﻤیﻛﻨﺪ‪.‬‬
‫ﺑﻠﻜﻪ ﺑﺎ ﺁﻳﺘﻤی ﺑﻪ ﻧﺎﻡ ﻛﻠﻴﺪ ﻛﺎﺭ ﻣیﻛﻨﺪ‪ ،‬ﻛﻪ ﻣیﺗﻮﺍﻧﺪ ﺩﺍﺩﻩﻫﺎﯼ ﻣﺘﻨﻮﻋی ﺑﺎﺷﺪ‪ .‬ﻭ ﻣﺤﺪﻭﺩ ﺑﻪ ﺍﻋﺪﺍﺩ ﺻﺤﻴح ﻣﺜﻞ ﺍﻧﺪﻳﺲ‬
‫ﻟﻴﺴﺖ ﻧﻴﺴﺖ‪ .‬ﻭ ﻣیﺗﻮﺍﻧﺪ ﻋﺪﺩ‪ ،‬ﺭﺷﺘﻪ‪ ،‬ﻟﻴﺴﺖ ﻭ ﻳﺎ ﺣﺘی ﻳﮏ ﺩﻳﻜﺸﻨﺮﯼ ﺩﻳﮕﺮ ﺑﺎﺷﺪ‪ .‬ﺍﺯ ﻛﻠﻴﺪﻫﺎ ﺑﺮﺍﯼ ﺩﺳﺘﺮﺳی ﺑﻪ‬
‫ﻣﻘﺎﺩﻳﺮ ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪.‬‬
‫ﺑﻄﻮﺭ ﻛﻠی ﺩﻳﻜﺸﻨﺮﯼﻫﺎ ﺷﺎﻣﻞ ﺗﻌﺪﺍﺩﯼ ﺯﻭج ﻛﻠﻴﺪ‪-‬ﻣﻘﺪﺍﺭ ﻫﺴﺘﻨﺪ‪ ،‬ﻛﻪ ﺗﻮﺳﻂ ﻋلاﻣﺖ }{ ﻣﺤﺼﻮﺭ ﻣیﺷﻮﻧﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫}‪kid ={ 'name ':'reza ',' family ':'shams ','age ':7‬‬
‫‪kid‬‬

‫‪Out[2]:‬‬ ‫}‪{'name ':'reza ',' family ':'shams ','age ':7‬‬

‫ﺩﻳﻜﺸﻨﺮﯼ ﺑﺎلا ﺷﺎﻣﻞ ﺳﻪ ﺯﻭج ﺍﺳﺖ‪ ،‬ﻛﻪ ﺗﻮﺳﻂ ﻋلاﻣﺖ ﻛﺎﻣﺎ ﺍﺯ ﻳﻜﺪﻳﮕﺮ ﻣﺠﺰﺍ ﺷﺪﻩﺍﻧﺪ‪ .‬ﺿﻤﻨ ًﺎ ﻛﻠﻴﺪ ﻭ ﻣﻘﺪﺍﺭ‬
‫ﻣﺘﻨﺎﻇﺮﺵ ﺑﺎ ﻋلاﻣﺖ )‪ (:‬ﺑﻪ ﻫﻢ ﺭﺑﻂ ﭘﻴﺪﺍ ﻣیﻛﻨﻨﺪ‪ .‬ﺍﺳﺎﻣی '‪ 'family' ،'name‬ﻭ '‪ 'age‬ﻛﻠﻴﺪﻫﺎ ﻭ '‪'shams' ،'reza‬‬
‫ﻭ ‪ 7‬ﻣﻘﺪﺍﺭﻫﺎ ﻫﺴﺘﻨﺪ‪ .‬ﺑﺮﺍﯼ ﺩﺳﺘﺮﺳی ﺑﻪ ﻣﻘﺎﺩﻳﺮ ﺩﻳﻜﺸﺘﺮﯼ ﺑﺎﻳﺪ ﺍﺯ ﻃﺮﻳﻖ ﻛﻠﻴﺪﻫﺎ ﻋﻤﻞ ﻧﻤﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [3]:‬‬ ‫}‪kid ={ 'name ':'reza ',' family ':'shams ','age ':7‬‬
‫]' ‪kid [' family‬‬

‫‪Out[3]:‬‬ ‫' ‪'shams‬‬

‫‪ ۱-۵-۴‬ﺗﺮﺗﻴﺐ ﺩﺭ ﻟﻴﺴﺖ ﻭ ﺩﻳﻜﺸﻨﺮﯼ‬


‫ﺩﺭ ﻟﻴﺴﺖﻫﺎ ﺗﺮﺗﻴﺐ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ ،‬ﻳﻌﻨی ﻋﻀﻮ ﺍﻭﻝ‪ ،‬ﺩﻭﻡ ﻭ … ﻭ ﺍﮔﺮ ﻋﻨﺎﺻﺮ ﺁﻧﻬﺎ ﺟﺎﺑﺠﺎ ﺷﻮﻧﺪ ﺩﻭ ﻟﻴﺴﺖ ﻣﺘﻔﺎﻭﺕ ﺍﻳﺠﺎﺩ‬
‫ﻣیﺷﻮﺩ‪ .‬ﺍﻣﺎ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ ﺗﺮﺗﻴﺐ ﺭﻋﺎﻳﺖ ﻧﻤیﺷﻮﺩ‪ .‬ﺑﺮﺍﯼ ﺩﺭﮎ ﺑﻬﺘﺮ ﺑﻪ ﻣﺜﺎﻝ ﻳﮏ ﻟﻴﺴﺖ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬
‫ ﺩﻳﻜﺸﻨﺮﯼ‬.۵-۴ ۶۰
In [1]: list1 =[5 ,1.5 , 'ali ',True ]
list2 =[ 'ali ' ,5 ,1.5 , True ]
list1 == list2

Out[1]: False

:‫ﺍﻛﻨﻮﻥ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ‬
In [2]: kid1 ={ 'name ':'reza ',' family ':'shams ','age ':7}
kid2 ={ 'name ':'reza ','age ':7 , ' family ':'shams '}
kid1 == kid2

Out[2]: True

.‫ﺑﻪ ﻫﻤﻴﻦ ﺟﻬﺖ ﻣﻔﻬﻮﻡ ﺑﺮﺵ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ‬

‫ ﻭﻳﺮﺍﻳﺶ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ‬۲-۵-۴
‫ ﺯﻭﺟی ﺭﺍ ﺣﺬﻑ ﻧﻤﻮﺩ ﻭ ﻳﺎ ﻛﻠﻴﺪﻫﺎ ﻳﺎ‬،‫ ﻳﻌﻨی ﺯﻭﺟی ﺭﺍ ﺍﺿﺎﻓﻪ ﻛﺮﺩ‬.‫ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ ﻣیﺗﻮﺍﻥ ﺗﻐﻴﻴﺮﺍﺗی ﺭﺍ ﺍﻋﻤﺎﻝ ﻧﻤﻮﺩ‬
.‫ﻣﻘﺪﺍﺭﻫﺎ ﺭﺍ ﻭﻳﺮﺍﻳﺶ ﻛﺮﺩ‬
:‫ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﺯﻭج ﺟﺪﻳﺪ ﺑﻪ ﺩﻳﻜﺸﻨﺮﯼ‬
.‫ﻣیﺗﻮﺍﻥ ﺯﻭجﻫﺎﯼ ﻣﺘﻌﺪﺩﯼ ﺑﻪ ﺩﻳﻜﺸﻨﺮﯼ ﺍﺿﺎﻓﻪ ﻧﻤﻮﺩ‬
In [3]: birthdays = {'Ava ': 'Apr 1', 'Reza ': 'Dec 5'}
birthdays ['Ali ']= 'Sep 2'
print ( birthdays )

Out[3]: {'Ava ':'Apr 1','Reza ':'Dec 5','Ali ':'Sep 2'}

:‫ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﺯﻭج ﺑﻪ ﺩﻳﻜﺸﻨﺮﯼ ﺧﺎﻟی‬:‫ﻣﺜﺎﻝ‬


In [4]: birthdays ={}
birthdays ['Homa ']= 'Jan 7'
birthdays ['Hoda ']= 'Nov 9'
print ( birthdays )

Out[4]: {'Homa ':'Jan 7','Hoda ':'Nov 9'}

:‫ﺗﻐﻴﻴﺮ ﻣﻘﺪﺍﺭ ﻳﮏ ﺯﻭج‬


In [5]: birthdays = {'Ava ': 'Apr 1', 'Reza ': 'Dec 12 '}
birthdays ['Ava ']= 'Mar 5'
print ( birthdays )

Out[5]: {'Ava ':'Mar 5','Reza ':'Dec 12 '}


۶۱ ‫ ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬.۴ ‫ﻓﺼﻞ‬
:‫ﺗﻐﻴﻴﺮ ﻛﻠﻴﺪ ﻳﮏ ﺯﻭج‬
:‫ ﻣﺜﺎﻝ‬.‫ ﺍﺳﺘﻔﺎﺩﻩ ﻣیﻛﻨﻴﻢ‬pop() ‫ ﺍﺯ ﺭﻭﺵ‬،‫ﺑﺮﺍﯼ ﺗﻐﻴﻴﺮ ﻧﺎﻡ ﻳﮏ ﻛﻠﻴﺪ‬

In [1]: di ={1: 'ava ', 2: True }


print (di)
di[ 'bool ']= di. pop (2)
print (di)

Out[1]: {1: 'ava ', 2: True }


{1: 'ava ', 'bool ': True }

:‫ ﻣﺜﺎﻝ‬.‫ ﻣیﺗﻮﺍﻥ ﻳﮏ ﺯﻭج ﺭﺍ ﺍﺯ ﺩﻳﻜﺸﻨﺮﯼ ﺣﺬﻑ ﻧﻤﻮﺩ‬del ‫ ﺑﺎ ﻓﺮﻣﺎﻥ‬:‫ﺣﺬﻑ ﻛﺮﺩﻥ ﻳﮏ ﺯﻭج ﺍﺯ ﺩﻳﻜﺸﻨﺮﯼ‬

In [2]: birthdays ={ 'Ava ':'Apr 1','Reza ':'Dec 12 ',' Rezvan ':'Jun 8'}
del birthdays ['Reza ']
print ( birthdays )

Out[2]: {'Ava ':'Apr 1',' Rezvan ':'Jun 8'}

‫ﻣﻘﺪﺍﺭ ﺩﺭ ﺣﻠﻘﻪ‬-‫ ﺯﻭجﻫﺎﯼ ﻛﻠﻴﺪ‬۳-۵-۴

:‫ ﻣﺘﺎﻝ‬.‫ ﻣیﺗﻮﺍﻥ ﺯﻭجﻫﺎﯼ ﺩﻳﻜﺸﻨﺮﯼ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﺟﺪﻳﺪﯼ ﻧﻮﺷﺖ‬،‫ﻗﺒﻞ ﺍﺯ ﺍﺟﺮﺍﯼ ﺭﻭﻳﻜﺮﺩ ﺩﻳﻜﺸﻨﺮﯼ ﺩﺭ ﺣﻠﻘﻪ‬

In [3]: user_0 = {
" username ": " Skarimi ",
" first ": " saeed ",
" last ": " karimi "
}
x = user_0 [" first "]
print (x)
print ( user_0 . keys ())
print ( user_0 . values ())
print ( user_0 . items ())

Out[3]: saeed
dict_keys ([ ' username ', 'first ', 'last '])
dict_values ([ ' Skarimi ', 'saeed ', ' karimi '])
dict_items ([( ' username ', ' Skarimi '), ('first ', 'saeed '),
('last ', ' karimi ')])

:‫ ﻣﺜﺎﻝ‬.‫ ﻛﻠﻴﺪﻫﺎ ﻭ ﻣﻘﺎﺩﻳﺮ ﺭﺍ ﺑﺪﺳﺖ ﺁﻭﺭﺩ‬items() ‫ﻣیﺗﻮﺍﻥ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺩﺭ ﺣﻠﻘﻪ ﺑﺎ ﺭﻭﺵ‬


‫ ﺩﻳﻜﺸﻨﺮﯼ‬.۵-۴ ۶۲
In [1]: user_0 = {
" username ": " Skarimi ",
" first ": " saeed ",
" last ": " karimi "
}
for key , value in user_0 . items ():
print ('\ nKey : '+ key )
print ('Value : '+ value )

Out[1]: Key : username


Value : Skarimi

Key : first
Value : saeed

Key : last
Value : karimi

:‫ ﻣﺜﺎﻝ‬.‫ﻫﻤﻴﻦﻃﻮﺭ ﻣیﺗﻮﺍﻥ ﻛﻠﻴﺪﻫﺎ ﻭ ﻳﺎ ﻣﻘﺎﺩﻳﺮ ﺭﺍ ﺑﻪ ﺻﻮﺭﺕ ﻣﺠﺰﺍ ﻧﻮﺷﺖ‬


In [2]: favorite_languages = {
'ali ': ' python ',
'ava ': 'c',
'rahim ': 'ruby ',
'zahra ': ' python ',
}
for name in favorite_languages . keys ():
print ( name . title ())

Out[2]: Ali
Ava
Rahim
Zahra

In [3]: favorite_languages = {
'ali ': ' python ',
'ava ': 'c',
'rahim ': 'ruby ',
'zahra ': ' python ',
}
for name in favorite_languages . values ():
print ( name . title ())

Out[3]: Python
C
Ruby
Python
‫‪۶۳‬‬ ‫ﻓﺼﻞ ‪ .۴‬ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬
‫ﺍﻳﺠﺎﺩ ﺩﻳﻜﺸﻨﺮﯼ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﺎﺑع )(‪dict‬‬ ‫‪۴-۵-۴‬‬
‫ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﺎﺑع )(‪ dict‬ﻣیﺗﻮﺍﻥ ﺩﻳﻜﺸﻨﺮﯼ ﺳﺎﺧﺖ‪.‬‬
‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ﺑﻪ ﻋﻨﻮﺍﻥ ﺁﺭﮔﻮﻣﺎﻥ‬
‫ﻳﮏ ﺩﻳﻜﺸﻨﺮﯼ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺗﺎﺑع )(‪ dict‬ﻭ ﺁﺭﮔﻮﻣﺎﻥ ﻛﻠﻴﺪ ﻭﺍﮊﻩ ﺳﺎﺧﺘﻪ ﻣیﺷﻮﺩ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫)‪d = dict (k1 =1 , k2 =2 , k3 =3‬‬
‫)‪print (d‬‬

‫‪Out[1]:‬‬ ‫}‪{'k1 ': 1, 'k2 ': 2, 'k3 ': 3‬‬

‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻟﻴﺴﺖ ﺑﻪ ﻋﻨﻮﺍﻥ ﺁﺭﮔﻮﻣﺎﻥ‬

‫ﺩﺭ ﺁﺭﮔﻮﻣﺎﻥ ﺗﺎﺑع‪ ،‬ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﻳﮏ ﻟﻴﺴﺖ ﻛﻪ ﻫﺮ ﻳﮏ ﺍﺯ ﭘﺮﺍﻧﺘﺰﻫﺎ ﺑﻪ ﻋﻨﻮﺍﻥ ﻳﮏ ﺯﻭج ﺩﻳﻜﺸﻨﺮﯼ ﻣﺤﺴﻮﺏ ﻣیﺷﻮﺩ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫)])‪d = dict ([( 'k1 ', 1) , ( 'k2 ', 2) , ( 'k3 ', 3‬‬
‫)‪print (d‬‬

‫‪Out[2]:‬‬ ‫}‪{'k1 ': 1, 'k2 ': 2, 'k3 ': 3‬‬

‫ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻭ ﻟﻴﺴﺖ ﺑﻪ ﻋﻨﻮﺍﻥ ﺁﺭﮔﻮﻣﺎﻥ‬


‫ﺩﺭ ﺁﺭﮔﻮﻣﺎﻥ ﺗﺎﺑع‪ ،‬ﻣیﺗﻮﺍﻥ ﺍﺯ ﺩﻭ ﻟﻴﺴﺖ ﺍﺳﺘﻔﺎﺩﻩ ﻛﺮﺩ‪ .‬ﻳﻜی ﺍﺯ ﺁﻧﻬﺎ ﺷﺎﻣﻞ ﻛﻠﻴﺪﻫﺎ ﻭ ﺩﻳﮕﺮﯼ ﺷﺎﻣﻞ ﻣﻘﺎﺩﻳﺮ ﺍﺳﺖ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [3]:‬‬ ‫]' ‪keys = ['k1 ', 'k2 ', 'k3‬‬
‫]‪values = [1 , 2, 3‬‬
‫)) ‪d = dict ( zip (keys , values‬‬
‫)‪print (d‬‬

‫‪Out[3]:‬‬ ‫}‪{'k1 ': 1, 'k2 ': 2, 'k3 ': 3‬‬

‫‪ ۵-۵-۴‬ﺩﺭﻫﻢ ﺷﺪﮔی‬
‫ﺑﻌﻀی ﺍﻭﻗﺎﺕ ﻣیﺧﻮﺍﻫﻴﺪ ﻛﻪ ﻳﮏ ﻣﺠﻤﻮﻋﻪﺍﯼ ﺍﺯ ﺩﻳﻜﺸﻨﺮﯼﻫﺎ ﺩﺭ ﻟﻴﺴﺖ ﻇﺎﻫﺮ ﺷﻮﺩ ﻭ ﻳﺎ ﻟﻴﺴﺖﻫﺎ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ‬
‫ﻗﺮﺍﺭ ﮔﻴﺮﺩ‪ .‬ﺑﻪ ﻣﻮﺍﺭﺩ ﺫﻛﺮ ﺷﺪﻩ ﺩﺭﻫﻢ ﺷﺪﮔی ‪ ۱‬ﮔﻮﻳﻨﺪ‪ .‬ﺣﺘی ﻣیﺷﻮﺩ ﻛﻪ ﺩﻳﻜﺸﻨﺮﯼ ﺩﺍﺧﻞ ﺩﻳﻜﺸﻨﺮﯼ ﺩﻳﮕﺮ ﻭﺍﻗﻊ‬
‫ﺷﻮﺩ‪.‬‬

‫ﻟﻴﺴﺘی ﺍﺯ ﺩﻳﻜﺸﻨﺮﯼﻫﺎ‬ ‫‪۱-۵-۵-۴‬‬

‫ﺑﻪ ﻣﺜﺎﻝ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪.‬‬


‫‪1. nesting‬‬
‫ ﺩﻳﻜﺸﻨﺮﯼ‬.۵-۴ ۶۴
In [1]: list_0 ={ 'color ':'green ',' points ':5}
list_1 ={ 'color ':' yellow ',' points ':10}
list_2 ={ 'color ':'red ',' points ':15}
lists =[ list_0 , list_1 , list_2 ]
for list in lists :
print ( list )

Out[1]: {'color ': 'green ', ' points ': 5}


{'color ': ' yellow ', ' points ': 10}
{'color ': 'red ', ' points ': 15}

‫ﻟﻴﺴﺖ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ‬ ۲-۵-۵-۴

،‫ ﻟﻴﺴﺖ ﻣﻮﺍﺩ ﺭﻭ‬.‫ ﻧﻮع ﭘﺎﻳﻪ )ﻧﺎﻥ ﻭ…( ﻭ ﻣﻮﺍﺩ ﺭﻭﯼ ﭘﻴﺘﺰﺍ‬.‫ﺩﺭ ﻣﺜﺎﻝ ﺯﻳﺮ ﺩﻭ ﻧﻮع ﺍﻃلاﻉ ﺩﺭ ﻫﺮ ﭘﻴﺘﺰﺍﻳﯽ ﺫﺧﻴﺮﻩ ﻣیﺷﻮﺩ‬
.‫ ﺑﻪ ﻛﺪ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‬.‫ ﻣﺮﺗﺒﻂ ﻣیﺷﻮﺩ‬toppings ‫ﺑﻪ ﻛﻠﻴﺪ‬

In [2]: # Store information about a pizza being ordered .


pizza = {
'crust ': 'thick ',
' toppings ': [' mushrooms ', 'extra cheese '],
}
# Summarize the order.
print (" You ordered a " + pizza ['crust '] + "-crust pizza " +
" with the following toppings :")
for topping in pizza [' toppings ']:
print ("\t" + topping )

Out[2]: You ordered a thick - crust pizza with the following toppings :
mushrooms
extra cheese

:‫ﻣﺜﺎﻝ ﺩﺍﺷﺘﻦ ﭼﻨﺪﻳﻦ ﻟﻴﺴﺖ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ‬

In [3]: favorite_languages = {
'ava ': [ ' python ', 'ruby '],
'sarah ': ['c'],
'amir ': [ 'ruby ', 'go '],
'emad ': [ ' python ', 'java '],
}
for name , languages in favorite_languages . items ():
print ("\n"+ name . title ()+ "'s favorite languages are :")
for language in languages :
print ("\t" + language . title ())
۶۵ ‫ ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬.۴ ‫ﻓﺼﻞ‬
Out[3]: Ava 's favorite languages are :
Python
Ruby

Sarah 's favorite languages are :


C

Ami r's favorite languages are :


Ruby
Go

Emad 's favorite languages are :


Python
Java

‫ﺩﻳﻜﺸﻨﺮﯼ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ‬ ۳-۵-۵-۴

‫ ﺍﻟﺒﺘﻪ ُﻛﺪﻫﺎ ﻣیﺗﻮﺍﻧﺪ ﺍﻧﺪﻛی ﭘﻴﭽﻴﺪﻩ‬.‫ ﺩﻳﻜﺸﻨﺮﯼ ﺩﻳﮕﺮﯼ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ‬،‫ﺷﻤﺎ ﻣیﺗﻮﺍﻧﻴﺪ ﻛﻪ ﺩﺭ ﺩﺍﺧﻞ ﻳﮏ ﺩﻳﻜﺸﻨﺮﯼ‬
‫ ﻛﺎﺭﺑﺮﻫﺎ‬.‫ ﺑﺮﺍﯼ ﻫﺮ ﻛﺎﺭﺑﺮ ﻳﮏ ﺷﻨﺎﺳﻪ ﻛﺎﺭﺑﺮﯼ ﻣﻨﺤﺼﺮ ﺑﻔﺮﺩ ﺩﺍﺭﻳﻢ‬.‫ ﺑﺮﺍﯼ ﻣﺜﺎﻝ ﭼﻨﺪ ﺷﻨﺎﺳﻪ ﻛﺎﺭﺑﺮﯼ ﺩﺍﺭﻳﻢ‬.‫ﺷﻮﺩ‬
‫ ﺳﻪ‬.‫ ﻣیﺗﻮﺍﻥ ﺍﻃلاﻋﺎﺕ ﻫﺮ ﻛﺎﺭﺑﺮ ﺭﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺩﻳﻜﺸﻨﺮﯼ ﺫﺧﻴﺮﻩ ﻧﻤﻮﺩ‬.‫ﺩﺭ ﺣﻜﻢ ﻛﻠﻴﺪﻫﺎ ﺩﺭ ﺩﻳﻜﺸﻨﺮﯼ ﻫﺴﺘﻨﺪ‬
‫ ﻭ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺣﻠﻘﻪ ﻭ ﺩﻳﻜﺸﻨﺮﯼ‬.‫ﺍﻃلاﻉ ﻫﺮ ﻛﺎﺭﺑﺮ ﺑﻪ ﺻﻮﺭﺕ ﻧﺎﻡ ﻭ ﻧﺎﻡﺧﺎﻧﻮﺍﺩﮔی ﻭ ﻣﺤﻞ ﺁﻧﻬﺎ ﺫﺧﻴﺮﻩ ﻣیﺷﻮﺩ‬
.‫ﻣیﺗﻮﺍﻥ ﺑﻪ ﺍﻃلاﻋﺎﺕ ﻫﺮ ﻛﺎﺭﺑﺮ ﺩﺳﺖ ﻳﺎﻓﺖ‬
:۱ ‫ﻣﺜﺎﻝ‬

In [1]: users = {
' mmirzakhani ': {
'first ': ' maryam ',
'last ': ' mirzakhani ',
' location ': ' stanford ',
},
' mcurie ': {
'first ': 'marie ',
'last ': 'curie ',
' location ': 'paris ',
},
}
for username , user_info in users . items ():
print ("\ nUsername : " + username )
full_name = user_info ['first ']+" "+ user_info ['last ']
location = user_info [' location ']
print ("\ tFull name : " + full_name . title ())
print ("\ tLocation : " + location . title ())
‫ ﺩﻳﻜﺸﻨﺮﯼ‬.۵-۴ ۶۶
Out[1]: Username : mmirzakhani
Full name : Maryam Mirzakhani
Location : Stanford

Username : mcurie
Full name : Marie Curie
Location : Paris

:۲ ‫ﻣﺜﺎﻝ‬

In [1]: rec = {'name ': {'first ': 'Bob ', 'last ': 'Smith '},
'job ': [ 'dev ', 'mgr '],
'age ': 40}
print ( rec )
print ( rec [ 'name '])
print ( rec [ 'job '])
print ( rec [ 'job '][ -1])

Out[1]: {'name ':{ 'first ':'Bob ','last ':'Smith '},'job ':[ 'dev ','mgr '],
'age ':40}
{'first ':'Bob ','last ':'Smith '}
['dev ','mgr ']
mgr

‫ ﭘﻴﺪﺍ ﻛﺮﺩﻥ ﻓﺮﺍﻭﺍﻧی ﻫﺮ ﻳﮏ ﺍﺯ ﺣﺮﻭﻑ ﺻﺪﺍﺩﺍﺭ ﺩﺭ ﻳﮏ ﻭﺍﮊﻩ‬:۳ ‫ﻣﺜﺎﻝ‬

In [2]: vowels = ['a', 'e', 'i', 'o', 'u']


word = input (' provide a word to search for vowels ')
found ={}
found ['a']=0
found ['e']=0
found ['i']=0
found ['o']=0
found ['u']=0
for letter in word :
if letter in vowels :
found [ letter ] +=1

for k,v in sorted ( found . items ()):


print (k , 'was found ',v, 'time (s)')
‫‪۶۷‬‬ ‫ﻓﺼﻞ ‪ .۴‬ﺩﺍﺩﻩ ﺳﺎﺧﺘﺎﺭﻫﺎ‬
‫‪Out[2]:‬‬ ‫‪provide a word to search for vowels afternoon‬‬

‫‪a‬‬ ‫‪was‬‬ ‫‪found‬‬ ‫‪1‬‬ ‫)‪time (s‬‬


‫‪e‬‬ ‫‪was‬‬ ‫‪found‬‬ ‫‪1‬‬ ‫)‪time (s‬‬
‫‪i‬‬ ‫‪was‬‬ ‫‪found‬‬ ‫‪0‬‬ ‫)‪time (s‬‬
‫‪o‬‬ ‫‪was‬‬ ‫‪found‬‬ ‫‪2‬‬ ‫)‪time (s‬‬
‫‪u‬‬ ‫‪was‬‬ ‫‪found‬‬ ‫‪0‬‬ ‫)‪time (s‬‬

‫‪ ۶-۴‬ﻣﺠﻤﻮﻋﻪ‬
‫ﻣﺠﻤﻮﻋﻪﺍﯼ ﺍﺯ ﻋﻨﺎﺻﺮ ﺭﺍ ‪ set‬ﮔﻮﻳﻨﺪ ﻛﻪ ﺩﺭ ﺩﺍﺧﻞ ﺁﻛﻮلاﺩ ﻗﺮﺍﺭ ﻣیﮔﻴﺮﻧﺪ‪ .‬ﺑﻴﺸﺘﺮ ﺷﺒﻴﻪ ﺩﻳﻜﺸﻨﺮﯼ ﺍﺳﺖ ﻛﻪ ﺻﺮﻓ ًﺎ‬
‫ﺩﺍﺭﺍﯼ ﻛﻠﻴﺪ ﺍﺳﺖ ﻭ ﻣﻘﺪﺍﺭ ﻧﺪﺍﺭﺩ‪ .‬ﻧﺎﻣﺮﺗﺐ ﺍﺳﺖ ﻭ ﺗﻜﺮﺍﺭ ﻋﻨﺎﺻﺮ ﺭﺍ ﻧﻤیﭘﺬﻳﺮﺩ‪.‬‬
‫ﻣﺜﺎﻝ ‪:۱‬‬
‫‪In [1]:‬‬ ‫)]‪x1= set ([1 ,2 ,3 ,4‬‬
‫)' ‪x2= set ('spam‬‬
‫)‪print (x1‬‬
‫)‪print (x2‬‬

‫‪Out[1]:‬‬ ‫}‪{1 , 2, 3, 4‬‬


‫}'‪{'a ', 'p', 'm', 's‬‬

‫ﻣﺜﺎﻝ ‪ :۲‬ﺍﺷﺘﺮﺍﮎ ﺩﻭ ﻣﺠﻤﻮﻋﻪ‬


‫‪In [2]:‬‬ ‫}‪s1 ={1 ,2 ,3 ,4‬‬
‫}‪s1 &{1 ,3‬‬

‫‪Out[2]:‬‬ ‫}‪{1 , 3‬‬

‫ﻣﺜﺎﻝ ‪ :۳‬ﺍﺟﺘﻤﺎﻉ ﺩﻭ ﻣﺠﻤﻮﻋﻪ‬


‫‪In [3]:‬‬ ‫}‪s1 ={1 ,2 ,3 ,4‬‬
‫‪{1 ,5 ,3 ,6}| s1‬‬

‫‪Out[3]:‬‬ ‫}‪{1 , 2, 3, 4, 5, 6‬‬

‫ﻣﺜﺎﻝ ‪ :۴‬ﺗﻔﺎﺿﻞ ﺩﻭ ﻣﺠﻤﻮﻋﻪ‬


‫‪In [4]:‬‬ ‫}‪s1 -{1 ,3 ,4‬‬

‫‪Out[4]:‬‬ ‫}‪{2‬‬

‫ﻣﺜﺎﻝ ‪ :۵‬ﺗﻔﺎﺿﻞ ﺩﻭ ﻣﺠﻤﻮﻋﻪ‬


‫‪ .۶-۴‬ﻣﺠﻤﻮﻋﻪ‬ ‫‪۶۸‬‬
‫‪In [1]:‬‬ ‫)}‪print (s1 -{1 ,2 ,3 ,4‬‬
‫))}{( ‪print ( type‬‬

‫‪Out[1]:‬‬ ‫)( ‪set‬‬


‫>' ‪<class 'dict‬‬

‫ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﻧﻤﺎﻳﺶ ﻣﺠﻤﻮﻋﻪ ﺗﻬی ﺑﻪ ﺻﻮﺭﺕ }{ ﻧﻴﺴﺖ‪ ،‬ﺯﻳﺮﺍ ﻋلاﻣﺖ ﺍﺧﻴﺮ ﻧﺸﺎﻥﺩﻫﻨﺪﻩ ﺩﻳﻜﺸﻨﺮﯼ‬
‫ﺧﺎﻟی ﺍﺳﺖ‪ .‬ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﺩﺭ ﻛﺪ ﺑﺎلا ﻫﻢ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‪ ،‬ﺗﺎﺑع )(‪ type‬ﻫﻢ ﻧﻮع ﺁﻛﻮلاﺩ ﺑﺎﺯ ﻭ ﺑﺴﺘﻪ ﺭﺍ ﺩﻳﻜﺸﻨﺮﯼ‬
‫ﻣﻌﺮﻓی ﻣیﻛﻨﺪ‪.‬‬
‫���‬

‫‪۵‬‬
‫ﻋﻤﻠﻴﺎﺕ ﺭﻭﯼ ﻓﺎﻳﻞﻫﺎ ﻭ‬
‫ﻣﺪﻳﺮﻳﺖ ﺧﻄﺎﻫﺎ‬

‫‪ ۱-۵‬ﻣﻘﺪﻣﻪ‬

‫ﺑﺴﻴﺎﺭﯼ ﺍﺯ ﺍﻃلاﻋﺎﺕ ﻣﻮﺭﺩ ﻧﻈﺮ ﻣﺎ ﺩﺍﺧﻞ ﻓﺎﻳﻠی ﻛﻪ ﻛﺪﻫﺎﯼ ﻣﺎ ﺩﺭ ﺁﻥ ﻗﺮﺍﺭ ﺩﺍﺭﺩ ﻭﺟﻮﺩ ﻧﺪﺍﺭﺩ‪ ،‬ﻭ ﺑﺮ ﺭﻭﯼ ﻓﺎﻳﻞﻫﺎﻳﯽ‬
‫ﺑﺎ ﭘﺴﻮﻧﺪ ‪ txt‬ﻭ ‪ csv‬ﻭ… ﺫﺧﻴﺮﻩ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﻭ ﺩﺭ ﻭﺍﻗﻊ ﻧﺴﺒﺖ ﺑﻪ ﻓﺎﻳﻞ ﻛﺪﻫﺎ‪ ،‬ﻓﺎﻳﻞ ﺧﺎﺭﺟی ﻣﺤﺴﻮﺏ ﻣیﺷﻮﻧﺪ‪ .‬ﻳﺎ‬
‫ﺩﺍﺩﻩﻫﺎ ﺩﺭ ﺑﺮﻧﺎﻣﻪﻫﺎ ﺑﻪﺻﻮﺭﺕ ﻣﻮﻗﺖ ﻫﺴﺘﻨﺪ‪ ،‬ﻣﮕﺮ ﺍﻳﻦ ﻛﻪ ﺁﻧﻬﺎ ﺭﺍ ﻣﺸﺨﺼﺎ ﺫﺧﻴﺮﻩ ﻛﻨﻴﻢ‪ .‬ﺩﺭ ﻏﻴﺮ ﺍﻳﻨﺼﻮﺭﺕ‪ ،‬ﺩﺭ‬
‫ﺍﻧﺘﻬﺎﯼ ﺑﺮﻧﺎﻣﻪ ﺍﺯ ﺩﺳﺖ ﺧﻮﺍﻫﻨﺪ ﺭﻓﺖ‪ .‬ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﻪ ﺩﺍﺩﻩﻫﺎﯼ ﺍﻳﺠﺎﺩ ﺷﺪﻩ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺑﻪﺻﻮﺭﺕ ﺩﺍﺋﻤی ﺑﺎﻗی ﺑﻤﺎﻧﻨﺪ‪،‬‬
‫لاﺯﻡ ﺍﺳﺖ ﻛﻪ ﺁﻧﻬﺎ ﺭﻭﯼ ﻓﺎﻳﻞ ﺩﺭ ﺍﺑﺰﺍﺭﯼ ﺫﺧﻴﺮﻩ ﺷﻮﻧﺪ‪.‬‬
‫ﺩﺭ ﺍﻳﻦ ﻓﺼﻞ ﻣیﺧﻮﺍﻫﻴﻢ ﻧﺤﻮﻩ ﺩﺳﺘﺮﺳی ﺑﻪ ﻓﺎﻳﻞﻫﺎﯼ ﺍﻃلاﻋﺎﺕ ﻭ ﻧﺤﻮﮤ ﭘﺮﺩﺍﺯﺵ ﺁﻧﻬﺎ ﺭﺍ ﺑﺮﺭﺳی ﻛﻨﻴﻢ‪.‬‬

‫‪ ۲-۵‬ﻧﺤﻮﮤ ﺩﺳﺘﺮﺳی ﺑﻪ ﻓﺎﻳﻞﻫﺎ‬

‫ﺑﺮﺍﯼ ﺩﺳﺘﺮﺳی ﺑﻪ ﻓﺎﻳﻞﻫﺎﯼ ﺩﺍﺩﻩﻫﺎ‪ ،‬ﻧﺨﺴﺖ ﺑﺎﻳﺪ ﺁﻧﻬﺎ ﺭﺍ ﺑﺎﺯ ﻧﻤﻮﺩ‪ .‬ﺍﻳﻦ ﻛﺎﺭ ﺗﻮﺳﻂ ﺗﺎﺑع )(‪ open‬ﺻﻮﺭﺕ ﻣیﮔﻴﺮﻳﺪ‪.‬‬
‫ﺩﺭ ﺍﻳﻦ ﺗﺎﺑع ﺩﻭ ﺁﺭﮔﻮﻣﺎﻥ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ .‬ﺍﻭﻝ ﻧﺎﻡ ﻓﺎﻳﻞ ﻭ ﺩﺭ ﺻﻮﺭﺕ ﻟﺰﻭﻡ ﺁﺩﺭﺱ ﻣﺤﻞ ﺫﺧﻴﺮﻩ ﻓﺎﻳﻞ ﻭ ﺩﻭﻡ ﺣﺎﻟﺖ ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﺍﺯ ﺁﻧﻬﺎ‪ ،‬ﺑﻪ ﻋﺒﺎﺭﺕ ﺩﻳﮕﺮ ﻣیﺧﻮﺍﻫﻴﻢ ﺩﺍﺩﻩﻫﺎﯼ ﺁﻥ ﺭﺍ ﺑﺨﻮﺍﻧﻴﻢ ﻳﺎ ﺭﻭﯼ ﻳﮏ ﻓﺎﻳﻞ ﺍﻃلاﻋﺎﺕ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﺑﻨﻮﻳﺴﻴﻢ ﻭ ﻳﺎ‬
‫ﻳﮏ ﻓﺎﻳﻞ ﺑﺮﻭﺯ ﺭﺳﺎﻧی ﻛﻨﻴﻢ‪ .‬ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺍﻳﻦ ﺩﻭ ﺁﺭﮔﻮﻣﺎﻥ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮﺭﺕ ﺭﺷﺘﻪ ﺩﺍﺧﻞ ﺗﺎﺑع ‪ open‬ﻗﺮﺍﺭ‬
‫ﮔﻴﺮﻧﺪ‪ .‬ﺩﺳﺘﻮﺭ ﻛﻠی ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪.‬‬
‫)'‪file_variable=open('filename','mode‬‬
‫ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﺳﻪ ﺗﺎ ﺣﺎﻟﺖ ﺍﺻﻠی ﺩﺭ ﻣﻮﺭﺩ ﻓﺎﻳﻞﻫﺎ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﺷﺮح ﺁﻧﻬﺎ ﺩﺭ ﺍﺩﺍﻣﻪ ﺍﺭﺍﺋﻪ ﻣیﮔﺮﺩﺩ‪.‬‬

‫‪۶۹‬‬
‫‪ .۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ‬ ‫‪۷۰‬‬
‫‪ ۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ‬
‫ﭘﺲ ﺍﺯ ﺑﺎﺯ ﺷﺪﻥ ﻓﺎﻳﻞ ﺩﺍﺩﻩﻫﺎ‪ ،‬ﺳﻴﺴﺘﻢ ﺑﺮﺍﯼ ﺣﺎﻟﺖ ﻣﻮﺭﺩ ﻧﻈﺮ ﻛﻪ ﺩﺭ ﺍﻳﻨﺠﺎ ﺧﻮﺍﻧﺪﻥ ﺍﺳﺖ‪ ،‬ﻣیﺗﻮﺍﻥ ﻣﺤﺘﻮﻳﺎﺕ ﻓﺎﻳﻞ‬
‫ﺭﺍ ﺧﻮﺍﻧﺪ‪ .‬ﺑﺮﺍﯼ ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ ﺭﻭﺵﻫﺎﯼ ﮔﻮﻧﺎﮔﻮﻧی ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ .‬ﻛﻪ ﺫﻳل ًا ﺑﻪ ﺁﻥ ﭘﺮﺩﺍﺧﺘﻪ ﻣیﺷﻮﺩ‪.‬‬

‫‪ ۱-۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ ‪read‬‬


‫ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻧﺎﻡ ﻓﺎﻳﻞ ﻭﺭﻭﺩﯼ ‪ input.txt‬ﺑﺎﺷﺪ ﻭ ﻗﺮﺍﺭ ﺍﺳﺖ ﻛﻪ ﺁﻥ ﺭﺍ ﺑﺨﻮﺍﻧﻴﻢ‪.‬‬
‫)'‪infile=open('input.txt','r‬‬
‫ﺁﺭﮔﻮﻣﺎﻥ '‪ (read) 'r‬ﻧﺸﺎﻥ ﻣیﺩﻫﺪ ﻛﻪ ﻓﺎﻳﻞ ﺑﺮﺍﯼ ﺧﻮﺍﻧﺪﻥ ﺑﺎﺯ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﺍﮔﺮ ﺁﺭﮔﻮﻣﺎﻥ ﺩﻭﻡ ﮔﺬﺍﺷﺘﻪ ﻧﺸﻮﺩ‪ ،‬ﭘﻴﺶﻓﺮﺽ‬
‫ﺑﺎﺯ ﺷﺪﻥ ﻓﺎﻳﻞ ﺩﺍﺩﻩﻫﺎ '‪ 'r‬ﺧﻮﺍﻫﺪ ﺑﻮﺩ‪.‬‬
‫لاﺯﻡ ﺑﻪ ﻳﺎﺩﺁﻭﺭﯼ ﺍﺳﺖ ﻛﻪ ﻓﺎﻳﻞ ﺩﺍﺩﻩﻫﺎ ﺑﺎﻳﺪ ﺍﺯ ﻗﺒﻞ ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ ﻭﮔﺮﻧﻪ ﺑﺮﻧﺎﻣﻪ ﺧﻄﺎ ﻣیﺩﻫﺪ‪ .‬ﺿﻤﻨ ًﺎ ﻓﺎﻳﻠی ﻛﻪ‬
‫ﺑﻪ ﺣﺎﻟﺖ ﺧﻮﺍﻧﺪﻥ ﺑﺎﺯ ﻣیﺷﻮﺩ‪ ،‬ﻧﻤیﺗﻮﺍﻥ ﺭﻭﯼ ﺁﻥ ﻧﻮﺷﺖ‪.‬‬
‫ﺍﮔﺮ ﻓﺎﻳﻞ ﺩﺍﺩﻩ ﺩﺭ ﭘﻮﺷﻪ ﺟﺎﺭﯼ ﻧﺒﺎﺷﺪ ﺑﺎﻳﺪ ﻣﺴﻴﺮ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻦ ﻓﺎﻳﻞ ﻫﻢ ﮔﻔﺘﻪ ﺷﻮﺩ‪ .‬ﻭﮔﺮﻧﻪ ﺑﺮﻧﺎﻣﻪ ﻓﺎﻳﻞ ﻣﻮﺭﺩ ﻧﻈﺮ ﺷﻤﺎ‬
‫ﺭﺍ ﭘﻴﺪﺍ ﻧﻤیﻛﻨﺪ ﻭ ﺧﻄﺎ ﻣیﺩﻫﺪ‪ .‬ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻓﺎﻳﻞ ﺷﻤﺎ ﺩﺭ ﺩﺍﻳﺮﻛﺘﻮﺭﯼ ‪ E‬ﻭ ﺩﺭ ﭘﻮﺷﮥ ‪ py_course‬ﺑﺎﺷﺪ‪ ،‬ﺁﻧﮕﺎﻩ‬
‫ﺁﺭﮔﻮﻣﺎﻥ ﺍﻭﻝ ‪ open‬ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪:‬‬
‫'‪'E:/py_course/input.txt‬‬
‫ﺭﻭﺵ )(‪ read‬ﻛﻞ ﻣﺤﺘﻮﻳﺎﺕ ﻓﺎﻳﻞ ﺭﺍ ﻳﻜﺠﺎ ﻣیﺧﻮﺍﻧﺪ ﻭ ﺩﺭ ﺣﺎﻓﻈﻪ ﻣیﻧﺸﺎﻧﺪ‪ .‬ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻓﺎﻳﻞ ﻭﺭﻭﺩﯼ ﺑﻪ ﻧﺎﻡ‬
‫‪ text.txt‬ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺑﺎﺷﺪ‪.‬‬
‫‪Flight‬‬
‫‪No . 1 0‬‬
‫‪I r a n Air‬‬
‫ﺍﻛﻨﻮﻥ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﺯﻳﺮ‪ ،‬ﻓﺎﻳﻞ ﺑﺎلا ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪.‬‬
‫‪In [1]:‬‬ ‫‪# Read a file with read () method‬‬
‫)' ‪infile = open ('text . txt‬‬
‫))( ‪print ( infile . read‬‬

‫‪Out[1]:‬‬ ‫‪Flight‬‬
‫‪No .10‬‬
‫‪Iran Air‬‬

‫ﺍﻛﻨﻮﻥ ﺍﮔﺮ ﺭﻭﺵ )(‪ read‬ﻣﻘﺪﺍﺭ ﺑﮕﻴﺮﺩ ﭼﻪ ﺍﺗﻔﺎﻗی ﺭخ ﻣیﺩﻫﺪ‪ .‬ﺑﻪ ﻣﺜﺎﻝ ﺯﻳﺮ ﺗﻮﺟﻪ ﻛﻨﻴﺪ‪ .‬ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻣﺤﺘﻮﻳﺎﺕ‬
‫ﻓﺎﻳﻞ ‪ toto.txt‬ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺑﺎﺷﺪ‪.‬‬
‫‪Hello , world .‬‬
‫‪welcome .‬‬

‫‪In [2]:‬‬ ‫)' ‪infile = open ('toto . txt‬‬


‫))‪line = print ( infile . read (4‬‬
‫‪۷۱‬‬ ‫ﻓﺼﻞ ‪ .۵‬ﻋﻤﻠﻴﺎﺕ ﺭﻭﯼ ﻓﺎﻳﻞﻫﺎ ﻭ ﻣﺪﻳﺮﻳﺖ ﺧﻄﺎﻫﺎ‬
‫‪Out[2]:‬‬ ‫‪Hell‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‪ ،‬ﻓﻘﻂ ﭼﻬﺎﺭ ﻛﺎﺭﺍﻛﺘﺮ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﻭ ﺩﺭ ﺍﺩﺍﻣﻪ ﺩﺍﺭﻳﻢ ﻛﻪ‪:‬‬
‫‪In [1]:‬‬ ‫))‪print ( infile . read (2‬‬

‫‪Out[1]:‬‬ ‫‪o,‬‬

‫ﺩﺭ ﺍﺩﺍﻣﻪ ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ‪ ،‬ﺗﻨﻬﺎ ﺩﻭ ﻛﺎﺭﺍﻛﺘﺮ ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﺍﻛﻨﻮﻥ ﺭﻭﺵ )(‪ read‬ﺭﺍ ﺑﺪﻭﻥ ﻋﺪﺩ ﺑﻪ ﻛﺎﺭ ﻣیﮔﻴﺮﻳﻢ‪.‬‬
‫‪In [2]:‬‬ ‫))( ‪print ( infile . read‬‬

‫‪Out[2]:‬‬ ‫‪world .‬‬


‫‪welcome .‬‬

‫ﺑﻪ ﺍﻳﻦ ﺗﺮﺗﻴﺐ ﺑﻘﻴﻪ ﻓﺎﻳﻞ ﺗﺎ ﭘﺎﻳﺎﻥ ﺁﻥ ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪.‬‬


‫ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﻧﺸﺎﻧﮕﺮ ﻓﺎﻳﻞ ﺭﺍ ﺑﻪ ﻧﻘﻄﻪ ﻣﻮﺭﺩ ﻧﻈﺮ ﻣﻨﺘﻘﻞ ﻛﻨﻴﻢ‪ ،‬ﺍﺯ ﺭﻭﺵ )(‪ seek‬ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﺩﺭ ﻣﺜﺎﻝ ﺯﻳﺮ‬
‫ﻗﺮﺍﺭ ﺍﺳﺖ ﻛﻪ ﺑﻪ ﺍﺑﺘﺪﺍﯼ ﻓﺎﻳﻞ ﺩﺍﺩﻩ ﺑﺮﻭﻳﻢ‪ .‬ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﺎﺭ ﺩﺭ ﺭﻭﺵ ﺍﺧﻴﺮ‪ ،‬ﻋﺪﺩ ﺻﻔﺮ ﺭﺍ ﻭﺍﺭﺩ ﻣیﻛﻨﻴﻢ‪.‬‬
‫‪In [3]:‬‬ ‫)‪infile . seek (0‬‬

‫‪Out[3]:‬‬ ‫‪0‬‬

‫ﺍﻛﻨﻮﻥ ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﻪ ﻣﻄﻤﺌﻦ ﺷﻮﻳﻢ ﻛﻪ ﻧﺸﺎﻧﮕﺮ ﺑﻪ ﺟﺎﯼ ﻣﻮﺭﺩ ﻧﻈﺮ ﻣﻨﺘﻘﻞ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﻳﮏ ﺑﺎﺭ ﺩﻳﮕﺮ ﻓﺎﻳﻞ ﺭﺍ ﺑﻪ‬
‫ﺻﻮﺭﺕ ﻛﺎﻣﻞ ﻣیﺧﻮﺍﻧﻴﻢ‪.‬‬
‫‪In [4]:‬‬ ‫))( ‪print ( infile . read‬‬

‫‪Out[4]:‬‬ ‫‪Hello , world .‬‬


‫‪welcome .‬‬

‫ﺧﻮﺍﻧﺶ ﺑﺎلا ﻧﺸﺎﻥ ﻣیﺩﻫﺪ ﻛﻪ ﻧﺸﺎﻧﮕﺮ ﺑﻪ ﻣﺤﻞ ﺻﻔﺮ‪ ،‬ﻳﻌﻨی ﺑﻪ ﺍﺑﺘﺪﺍﯼ ﻓﺎﻳﻞ ﻣﻨﺘﻘﻞ ﺷﺪﻩ ﺍﺳﺖ‪ .‬ﭼﺮﺍ ﻛﻪ ﺗﻤﺎﻡ‬
‫ﻣﺤﺘﻮﻳﺎﺕ ﻓﺎﻳﻞ ﺧﻮﺍﻧﺪﻩ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪ ۲-۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ ‪readline‬‬


‫ﺭﻭﺵ ﺩﻭﻡ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ )(‪ readline‬ﺍﺳﺖ‪ .‬ﻭﻗﺘی ﻛﻪ ﻓﺎﻳﻞ ﺑﺎﺯ ﺷﺪ‪ .‬ﻧﺸﺎﻧﮕﺮ ﺳﻴﺴﺘﻢ ﺩﺭ ﺳﻄﺮ ﻧﺨﺴﺖ ﻭ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﺁﻥ‬
‫ﻗﺮﺍﺭ ﻣیﮔﻴﺮﺩ‪ .‬ﺭﻭﺵ )(‪ readline‬ﺍﺯ ﻣﺤﻞ ﻗﺮﺍﺭﮔﻴﺮﯼ ﻧﺸﺎﻧﮕﺮ ﺗﺎ ﺁﺧﺮ ﺳﻄﺮ ﺟﺎﺭﯼ ﺭﺍ ﻣیﺧﻮﺍﻧﺪ‪ .‬ﻭ ﺳﭙﺲ ﻧﺸﺎﻧﮕﺮ ﺑﻪ‬
‫ﺳﻄﺮ ﺑﻌﺪﯼ ﻣﻨﺘﻘﻞ ﻣیﺷﻮﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻓﺎﻳﻞ ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﺳﻄﺮ ﺑﻪ ﺳﻄﺮ ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ ﻭ ﻧﻪ ﻳﮏ ﺑﺎﺭﻩ‪.‬‬
‫ﻓﺮﺽ ﻛﻨﻴﺪ ﻛﻪ ﻓﺎﻳﻞ ﻭﺭﻭﺩﯼ ﺷﺎﻣﻞ ﺳﻪ ﺳﻄﺮ ﺍﺳﺖ‪.‬‬
‫‪flight‬‬
‫‪No . 1 0‬‬
‫‪I r a n Air‬‬
‫‪ .۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ‬ ‫‪۷۲‬‬
‫ﺩﺭ ﻧﺨﺴﺘﻴﻦ ﻓﺮﺍﺧﻮﺍﻥ ﻓﺎﻳﻞ‪ ،‬ﺭﺷﺘﮥ '‪ 'flight\n‬ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﻳﺎﺩﺁﻭﺭﯼ ﻣیﮔﺮﺩﺩ ﻛﻪ )' '( ﺑﻪ ﻣﻌﻨی ﺳﻄﺮ ﺟﺪﻳﺪ ﺍﺳﺖ‪.‬‬
‫ﻭ ﺍﮔﺮ ﺩﻭﺑﺎﺭﻩ )(‪ readline‬ﻓﺮﺍﺧﻮﺍﻧی ﺷﻮﺩ ﺭﺷﺘﮥ '‪ 'No.10\n‬ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﻭ ﺍﮔﺮ ﺑﺮﺍﯼ ﺑﺎﺭ ﺳﻮﻡ )(‪readline‬‬
‫ﻓﺮﺍﺧﻮﺍﻧی ﺷﻮﺩ ﺭﺷﺘﮥ '‪ 'Iran Air‬ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﻭ ﺍﮔﺮ ﺑﺮﺍﯼ ﺑﺎﺭ ﭼﻬﺎﺭﻡ ﺗﻜﺮﺍﺭ ﮔﺮﺩﺩ‪ ،‬ﺁﻧﮕﺎﻩ ﻓﻘﻂ ﺭﺷﺘﮥ )' '( ﺭﺍ‬
‫ﺑﺪﺳﺖ ﻣیﺩﻫﺪ‪ .‬ﻛﻪ ﺑﻪ ﻣﻌﻨﺎﯼ ﭘﺎﻳﺎﻥ ﻓﺎﻳﻞ ﺍﺳﺖ‪ .‬ﺍﮔﺮ ﻓﺎﻳﻞ ﺷﺎﻣﻞ ﺳﻄﺮ ﺧﺎﻟی ﺑﺎﺷﺪ‪ ،‬ﺭﺷﺘﮥ ﺣﺎﺻﻞ ﺷﺎﻣﻞ '‪ '\n‬ﺍﺳﺖ‪.‬‬
‫ﻛﻪ ﺑﻪ ﻣﻌﻨﺎﯼ ﺳﻄﺮ ﺧﺎﻟی ﺍﺳﺖ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫)' ‪infile = open ('text . txt‬‬
‫))( ‪print ( infile . readline‬‬
‫))( ‪print ( infile . readline‬‬
‫))( ‪print ( infile . readline‬‬

‫‪Out[1]:‬‬ ‫‪Flight‬‬

‫‪No .10‬‬

‫‪Iran Air‬‬

‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﺑﻴﻦ ﻣﻮﺍﺭﺩ ﭼﺎﭖ ﺷﺪﻩ ﺳﻄﺮﻫﺎﯼ ﺧﺎﻟی ﺍﻳﺠﺎﺩ ﻣیﺷﻮﺩ‪ .‬ﭼﺮﺍ ﻫﺮ '‪ '\n‬ﻳﮏ ﺳﻄﺮ‬
‫ﻋﻮﺽ ﻣیﻛﻨﺪ ﻭ ﻫﻢ ﻓﺮﺍﺧﻮﺍﻧی ﺩﺳﺘﻮﺭ ‪ print‬ﻧﻴﺰ ﻛﻨﺘﺮﻝ ﺭﺍ ﺑﻪ ﺳﻄﺮ ﺑﻌﺪﯼ ﻣیﺑﺮﺩ‪ .‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ )(‪rstrip‬‬
‫ﻣیﺗﻮﺍﻥ '‪ '\n‬ﺭﺍ ﺣﺬﻑ ﻧﻤﻮﺩ‪.‬‬
‫‪In [2]:‬‬ ‫)' ‪infile = open ('text . txt‬‬
‫))( ‪print ( infile . readline (). rstrip‬‬
‫))( ‪print ( infile . readline (). rstrip‬‬
‫))( ‪print ( infile . readline‬‬

‫‪Out[2]:‬‬ ‫‪Flight‬‬
‫‪No .10‬‬
‫‪Iran Air‬‬

‫ﺍﻛﻨﻮﻥ ﻣیﺧﻮﺍﻫﻴﻢ ﺑﻪ ﺭﻭﺵ )(‪ readline‬ﻣﻘﺪﺍﺭ ﺑﺪﻫﻴﻢ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻣﻘﺪﺍﺭ ‪ ۳‬ﺍﺧﺘﻴﺎﺭ ﻣیﺷﻮﺩ‪.‬‬
‫‪In [3]:‬‬ ‫)'‪infile = open ('text . txt ','r‬‬
‫))‪print ( infile . read (3‬‬

‫‪Out[3]:‬‬ ‫‪Fli‬‬

‫ﭘﺲ ﺳﻪ ﻛﺎﺭﺍﻛﺘﺮ ﺧﻮﺍﻧﺪﻩ ﺷﺪ‪ .‬ﺍﻣﺎ ﺍلاﻥ ﻧﺸﺎﻧﮕﺮ ﻓﺎﻳﻞ ﻛﺠﺎﺳﺖ؟ ﺑﺮﺍﯼ ﻳﺎﻓﺘﻦ ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺍﺯ ﺭﻭﺵ )(‪ tell‬ﺍﺳﺘﻔﺎﺩﻩ‬
‫ﻣیﺷﻮﺩ‪ .‬ﭘﺲ ﺁﻥ ﺭﺍ ﺍﺟﺮﺍ ﻣیﻛﻨﻴﻢ‪.‬‬
‫‪In [4]:‬‬ ‫)( ‪infile . tell‬‬

‫‪Out[4]:‬‬ ‫‪3‬‬
‫‪۷۳‬‬ ‫ﻓﺼﻞ ‪ .۵‬ﻋﻤﻠﻴﺎﺕ ﺭﻭﯼ ﻓﺎﻳﻞﻫﺎ ﻭ ﻣﺪﻳﺮﻳﺖ ﺧﻄﺎﻫﺎ‬
‫ﻳﻌﻨی ﻧﺸﺎﻧﮕﺮ ﺍﺯ ﻣﺤﻞﻫﺎﯼ ‪ ۱ ،۰‬ﻭ ‪ ۲‬ﻋﺒﻮﺭ ﻛﺮﺩﻩ ﺩﺭ ﻣﻜﺎﻥ ‪ ۳‬ﻗﺮﺍﺭ ﺩﺍﺭﺩ‪ .‬ﺣﺎلا ﻣﻘﺪﺍﺭ ‪ ۶‬ﺭﺍ ﺑﻪ ﺭﻭﺵ )(‪readline‬‬
‫ﻣیﺩﻫﻴﻢ‪.‬‬
‫‪In [1]:‬‬ ‫))‪print ( infile . read (6‬‬

‫‪Out[1]:‬‬ ‫‪ght‬‬
‫‪No‬‬

‫ﺍلاﻥ ﻣﻜﺎﻥ ﻗﺮﺍﺭ ﮔﺮﻓﺘﻦ ﻧﺸﺎﻧﮕﺮ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﻛﺠﺎﺳﺖ؟‬


‫‪In [2]:‬‬ ‫)( ‪infile . tell‬‬

‫‪Out[2]:‬‬ ‫‪9‬‬

‫ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ ﺑﺎﺷﻴﺪ ﻛﻪ ﺍﻧﺪﻳﺲ ﻣﻜﺎﻥﻫﺎ ﺍﺯ ﺻﻔﺮ ﺷﺮﻭع ﻣیﺷﻮﺩ‪ .‬ﺿﻤﻨ ًﺎ ﺍﻧﺘﻬﺎﯼ ﻫﺮ ﺳﻄﺮ ﻫﻢ ﻳﮏ ﺟﺎﯼ ﺧﺎﻟی ﺍﺳﺖ‬
‫)‪ \n‬ﺷﻤﺎﺭﺵ ﻧﻤیﺷﻮﺩ‪ (.‬ﻛﻪ ﺁﻥ ﻫﻢ ﺷﻤﺮﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﭘﺲ ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﻓﺎﻳﻞ ﺩﺭ ﻣﻘﺎﺑﻞ ﻛﺎﺭﺍﻛﺘﺮ )‪ (.‬ﺩﺭ ﺳﻄﺮ ﺩﻭﻡ‬
‫ﻗﺮﺍﺭ ﺩﺍﺭﺩ‪.‬‬

‫‪ ۳-۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ ‪readlines‬‬


‫ﺩﺭ ﺍﻳﻦ ﺭﻭﺵ ﻛﻞ ﻓﺎﻳﻞ ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﻣﻨﺘﻬﺎ ﺧﺮﻭﺟی ﺑﻪ ﺻﻮﺭﺕ ﻟﻴﺴﺖ ﺍﺳﺖ‪ .‬ﻭ ﻫﺮ ﺳﻄﺮ ﻓﺎﻳﻞ ﻳﮏ ﻋﻀﻮ ﻟﻴﺴﺖ‬
‫ﺭﺍ ﺗﺸﻜﻴﻞ ﻣیﺩﻫﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬
‫‪In [3]:‬‬ ‫)'‪infile = open ('text . txt ','r‬‬
‫))( ‪print ( infile . readlines‬‬

‫‪Out[3]:‬‬ ‫]' ‪[' Flight \n', 'No .10\ n', 'Iran Air‬‬

‫ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﻧﺸﺎﻧﮕﺮ ﻓﺎﻳﻞ ﻛﺠﺎﺳﺖ؟‬


‫‪In [4]:‬‬ ‫)( ‪infile . tell‬‬

‫‪Out[4]:‬‬ ‫‪21‬‬

‫ﺑﻴﺎﻳﻢ ﺩﻭﺑﺎﺭﻩ ﺑﻪ ﺍﺑﺘﺪﺍﯼ ﻓﺎﻳﻞ ﺑﺮﮔﺮﺩﻳﻢ‪.‬‬


‫‪In [5]:‬‬ ‫)‪infile . seek (0‬‬

‫‪Out[5]:‬‬ ‫‪0‬‬

‫ﺣﺎلا ﺑﻪ ﺭﻭﺵ ‪ readlines‬ﻣﻘﺪﺍﺭ ﺑﺪﻫﻴﻢ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ ﻣﻘﺪﺍﺭ ‪ ۳‬ﺭﺍ ﺍﺧﺘﻴﺎﺭ ﻣیﺷﻮﺩ‪.‬‬
‫‪In [6]:‬‬ ‫))‪print ( infile . readlines (3‬‬

‫‪Out[6]:‬‬ ‫]'‪[' Flight \n‬‬


‫‪ .۳-۵‬ﺧﻮﺍﻧﺪﻥ ﻓﺎﻳﻞ‬ ‫‪۷۴‬‬
‫ﻫﻤﺎﻥﻃﻮﺭ ﻛﻪ ﻣلاﺣﻈﻪ ﻣیﻛﻨﻴﺪ‪ ،‬ﺍﻳﻦ ﺭﻭﺵ ﺑﻪ ﻣﻘﺪﺍﺭ ﺩﺍﺩﻩ ﺷﺪﻩ ﺗﻮﺟﻪ ﻧﺪﺍﺭﺩ‪ .‬ﻭ ﺗﻨﻬﺎ ﺗﻔﺎﻭﺕ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﺳﻄﺮ ﺍﻭﻝ‬
‫ﻓﺎﻳﻞ ﺭﺍ ﺗﺎ ﺍﻧﺘﻬﺎ ﺩﺭ ﻟﻴﺴﺖ ﺧﺮﻭﺟی ﻧﺸﺎﻥ ﻣیﺩﻫﺪ‪.‬‬
‫ﺍﻛﻨﻮﻥ ﺑﺒﻴﻨﻴﻢ ﻛﻪ ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺩﺭ ﻓﺎﻳﻞ ﻛﺠﺎﺳﺖ؟‬
‫‪In [1]:‬‬ ‫)( ‪infile . tell‬‬

‫‪Out[1]:‬‬ ‫‪-----------------------------------------------------------‬‬
‫‪OSError‬‬
‫) ‪Traceback ( most recent call last‬‬
‫‪Cell In [32] , line 1‬‬
‫)( ‪----> 1 infile . tell‬‬

‫‪OSError : telling position disabled by next () call‬‬

‫ﺑﺎ ﻣﺸﺨﺺ ﻛﺮﺩﻥ ﻣﻘﺪﺍﺭ ﺑﺮﺍﯼ ﺭﻭﺵ )(‪ readlines‬ﺩﻳﮕﺮ ﻧﻤیﺗﻮﺍﻥ ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺭﺍ ﻣﻌﻴﻦ ﻧﻤﻮﺩ ﻭ ﺑﺮﻧﺎﻣﻪ ﻣﻮﺍﺟﻪ ﺑﺎ‬
‫ﺧﻄﺎ ﻣیﺷﻮﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺩﺭ ﺭﻭﺵ ﻳﺎﺩ ﺷﺪﻩ ﻧﺒﺎﻳﺪ ﻣﻘﺪﺍﺭﯼ ﺭﺍ ﺑﺮﺍﯼ ﺁﻥ ﺗﻌﻴﻴﻦ ﻧﻤﻮﺩ‪.‬‬

‫ﻣﺤﻴﻂ ‪with‬‬ ‫‪۴-۳-۵‬‬


‫ﺷﻤﺎ ﻭﻗﺘی ﻛﻪ ﺩﺭ ﺑﺮﻧﺎﻣﻪ ﻳﮏ ﻓﺎﻳﻞ ﺑﺎﺯ ﻣیﻛﻨﻴﺪ‪ .‬ﺑﺮﻧﺎﻣﻪﻫﺎﯼ ﺩﻳﮕﺮ ﻧﻤیﺗﻮﺍﻧﻨﺪ ﺍﺯ ﺁﻥ ﭼﻴﺰﯼ ﺑﺨﻮﺍﻧﻨﺪ ﻳﺎ ﺭﻭﯼ ﺁﻥ ﭼﻴﺰﯼ‬
‫ﺑﻨﻮﻳﺴﻨﺪ‪ .‬ﭘﺲ ﺑﻌﺪ ﺍﺯ ﺍﻳﻦ ﻛﻪ ﻛﺎﺭ ﺑﺎ ﻓﺎﻳﻞ ﻣﻮﺭﺩ ﻧﻈﺮ ﺷﺪ‪ ،‬ﺑﺎﻳﺪ ﺁﻥ ﺭﺍ ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ )(‪ close‬ﺑﺒﻨﺪﻳﺪ‪ .‬ﺣﺎﻝ ﻣﻤﻜﻦ‬
‫ﺍﺳﺖ ﻛﻪ ﺍﺣﻴﺎﻧ ًﺎ ﻓﺮﺍﻣﻮﺵ ﺷﻮﺩ ﻛﻪ ﻓﺎﻳﻞ ﺑﺴﺘﻪ ﺷﻮﺩ‪ .‬ﺑﺮﺍﯼ ﺍﻳﻦ ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﺧﻮﺩ ﺑﺨﻮﺩ ﺍﻳﻦ ﻛﺎﺭ ﺍﻧﺠﺎﻡ ﺷﻮﺩ‪ ،‬ﺍﺯ ﻣﺤﻴﻄی‬
‫ﺑﻪ ﻧﺎﻡ ‪ with‬ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﺑﻪ ﻋﻨﻮﺍﻥ ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫‪with open ('toto . txt ','r') as infile :‬‬
‫))‪print ( infile . read (5‬‬
‫))‪print ( infile . read (3‬‬

‫‪Out[2]:‬‬ ‫‪Hello‬‬

‫‪-----------------------------------------------------------‬‬
‫‪ValueError‬‬
‫) ‪Traceback ( most recent call last‬‬
‫‪Cell In [47] , line 4‬‬
‫‪1 with open ('toto . txt ','r') as infile :‬‬
‫‪2‬‬ ‫))‪print ( infile . read (5‬‬
‫))‪----> 4 print ( infile . read (3‬‬

‫‪ValueError : I/O operation on closed file .‬‬

‫ﺑﺮﺍﯼ ﺩﺳﺘﻮﺭ ‪ print‬ﺍﻭﻟی ﻛﻪ ﺩﺍﺧﻞ ﻣﺤﻴﻂ ‪ with‬ﺍﺳﺖ‪ .‬ﺑﺮﻧﺎﻣﻪ ﺍﺟﺮﺍ ﻣیﺷﻮﺩ ﻭ ﺣﺎﺻﻞ ‪ Hello‬ﺍﺳﺖ‪ .‬ﺍﻣﺎ ﺑﻪ ﻣﺤﺾ‬
‫ﺧﺎﺭج ﺷﺪﻥ ﺍﺯ ﻣﺤﻴﻂ ﻳﺎﺩ ﺷﺪﻩ‪ ،‬ﻓﺎﻳﻞ ﺧﻮﺩ ﺑﺨﻮﺩ ﺑﺴﺘﻪ ﻣیﺷﻮﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﻧﻤیﺗﻮﺍﻥ ﻋﻤﻠﻴﺎﺗی ﺭﻭﯼ ﺁﻥ ﺍﻧﺠﺎﻡ ﺩﺍﺩ ﻭ‬
‫ﺑﺮﺍﯼ ﻫﻤﻴﻦ ﺍﺳﺖ ﻛﻪ ﺑﺮﻧﺎﻣﻪ ﺑﺮﺍﯼ ﺩﻭﻣﻴﻦ ‪ print‬ﺑﺎ ﺧﻄﺎ ﻣﻮﺍﺟﻪ ﻣیﺷﻮﺩ‪ .‬ﺑﺎ ﺍﻳﻦ ﻣﺤﻴﻂ ﻣیﺗﻮﺍﻥ ﺳﻄﺮ ﺑﻪ ﺳﻄﺮ ﻓﺎﻳﻞ‬
‫‪۷۵‬‬ ‫ﻓﺼﻞ ‪ .۵‬ﻋﻤﻠﻴﺎﺕ ﺭﻭﯼ ﻓﺎﻳﻞﻫﺎ ﻭ ﻣﺪﻳﺮﻳﺖ ﺧﻄﺎﻫﺎ‬
‫ﺭﺍ ﭘﻴﻤﺎﻳﺶ ﻧﻤﻮﺩ‪ .‬ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺍﻳﻦ ﺧﺎﺻﻴﺖ ﻣیﺗﻮﺍﻥ ﺳﻄﺮﻫﺎﯼ ﻓﺎﻳﻠی ﻛﻪ ﺧﺎﻟی ﺍﺳﺖ ﺭﺍ ﺣﺬﻑ ﻧﻤﻮﺩ ﻭ ﻣﺤﺘﻮﺍﯼ‬
‫ﺳﻄﺮﻫﺎﯼ ﻏﻴﺮ ﺧﺎﻟی ﺩﺭﻭﻥ ﻳﮏ ﻓﺎﻳﻞ ﺧﺮﻭﺟی ﻧﻮﺷﺖ‪ .‬ﻓﺎﻳﻞ ‪ b_lines‬ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪.‬‬
‫? ‪Hey , how a r e you‬‬

‫‪f i n e , t h a n k you .‬‬

‫‪s e e you l a t e r .‬‬


‫ﻓﺎﻳﻞ ﺑﺎلا ﺩﻭ ﺳﻄﺮ ﺧﺎﻟی ﺩﺍﺭﺩ ﻛﻪ ﺑﺎﻳﺪ ﺣﺬﻑ ﺷﻮﺩ‪.‬‬
‫‪In [1]:‬‬ ‫)'‪with open (' b_lines . txt ') as infile , open (' output . txt ', 'w‬‬
‫‪as outfile :‬‬
‫‪for line in infile :‬‬
‫‪if not line . strip ():‬‬
‫‪continue # skip the empty line.‬‬
‫‪outfile . write ( line ) #otherwise ,write it to output .‬‬

‫ﺍﻛﻨﻮﻥ ﻓﺎﻳﻞ ﺧﺮﻭﺟی ﺭﺍ ﻣیﺧﻮﺍﻧﻴﻢ‪.‬‬


‫‪In [2]:‬‬ ‫)' ‪f= open (' output . txt‬‬
‫))( ‪print (f. read‬‬

‫‪Out[2]:‬‬ ‫? ‪Hey , how are you‬‬


‫‪fine , thank you .‬‬
‫‪see you later .‬‬

‫ﻧﺴﺒﺖ ﺩﺍﺩﻥ ﻣﺤﺘﻮﯼ ﻓﺎﻳﻞ ﺑﻪ ﻳﮏ ﻣﺘﻐﻴﺮ‬ ‫‪۵-۳-۵‬‬


‫ﻗﺒل ًا ﺩﻳﺪﻳﻢ ﻛﻪ ﺑﺎ ﺩﺳﺘﻮﺭ ‪ read‬ﻳﮏ ﻓﺎﻳﻞ ﺑﻪﻃﻮﺭ ﻛﺎﻣﻞ ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪ .‬ﺍﻣﺎ ﺍﮔﺮ ﻋﻤﻞ ﺧﻮﺍﻧﺪﻥ ﺭﺍ ﺗﻜﺮﺍﺭ ﻛﻨﻴﺪ ﭼﻴﺰﯼ‬
‫ﭼﺎﭖ ﻧﻤیﺷﻮﺩ‪ ،‬ﭼﺮﺍ ﻛﻪ ﻧﺸﺎﻧﮕﺮ ﺩﺭ ﭘﺎﻳﺎﻥ ﻓﺎﻳﻞ ﻗﺮﺍﺭ ﺩﺍﺭﺩ‪ .‬ﻣﮕﺮ ﺍﻳﻦ ﻛﻪ ﭘﻴﺶ ﺍﺯ ﺧﻮﺍﻧﺪﻥ ﻣﺠﺪﺩ‪ ،‬ﺑﺎ ﺩﺳﺘﻮﺭ ‪seek‬‬
‫ﻧﺸﺎﻧﮕﺮ ﺑﻪ ﺍﺑﺘﺪﺍﯼ ﻓﺎﻳﻞ ﺑﺮﻭﺩ‪ ،‬ﺳﭙﺲ ﻣﺠﺪﺩﺍ ﻓﺎﻳﻞ ﺭﺍ ﺧﻮﺍﻧﺪﻩ‪ ،‬ﺗﺎ ﻛﻞ ﻣﺤﺘﻮﯼ ﻓﺎﻳﻞ ﺑﺪﺳﺖ ﺁﻳﺪ‪ .‬ﺍﻣﺎ ﺍﮔﺮ ﻣﺤﺘﻮﯼ ﺭﺍ‬
‫ﺑﻪ ﻣﺘﻐﻴﺮﯼ ﻧﺴﺒﺖ ﺩﻫﻴﻢ‪ ،‬ﻫﺮ ﭼﻨﺪ ﺑﺎﺭ ﻛﻪ ﺑﺨﻮﺍﻫﻴﻢ ﺑﻪ ﻣﺤﺘﻮﯼ ﻓﺎﻳﻞ ﺑﺪﻭﻥ ﺗﻐﻴﻴﺮ ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺩﺳﺘﺮﺳی ﺩﺍﺭﻳﻢ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [3]:‬‬ ‫)'‪infile = open ('toto . txt ','r‬‬
‫)( ‪fi= infile . read‬‬
‫)‪print (fi‬‬

‫‪Out[3]:‬‬ ‫‪Hello , world .‬‬


‫‪welcome .‬‬

‫ﺣﺎلا ﺑﺪﻭﻥ ﻫﻴچ ﮔﻮﻧﻪ ﻋﻤﻠی ﺩﻭﺑﺎﺭﻩ ﻣﺘﻐﻴﺮ ‪ fi‬ﺭﺍ ﭼﺎﭖ ﻣیﻛﻨﻴﻢ‪.‬‬
‫‪In [4]:‬‬ ‫)‪print (fi‬‬
‫‪ .۴-۵‬ﻧﻮﺷﺘﻦ ﺭﻭﯼ ﻓﺎﻳﻞ‬ ‫‪۷۶‬‬
‫‪Out[4]:‬‬ ‫‪Hello , world .‬‬
‫‪welcome .‬‬

‫ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ ﻛﻪ ﻛﻞ ﻣﺠﺘﻮﻳﺎﺕ ﻓﺎﻳﻞ ﭼﺎﭖ ﺷﺪﻩ ﺍﺳﺖ‪.‬‬

‫‪ ۴-۵‬ﻧﻮﺷﺘﻦ ﺭﻭﯼ ﻓﺎﻳﻞ‬


‫ﺍﮔﺮ ﺑﺨﻮﺍﻫﻴﻢ ﺩﺭﻭﻥ ﻓﺎﻳﻠی ﺑﻨﻮﻳﺴﻴﻢ ‪ (write).‬ﺑﺎﻳﺪ ﺁﺭﮔﻮﻣﺎﻥ ﺩﻭﻡ ﺑﻪ ﺻﻮﺭﺕ '‪ 'w‬ﺑﺎﺷﺪ‪ .‬ﺍﮔﺮ ﻓﺎﻳﻠی ﺑﺎ ﺍﻳﻦ ﺣﺎﻟﺖ ﺑﺎﺷﺪ‪،‬‬
‫ﺩﻳﮕﺮ ﻗﺎﺑﻞ ﺧﻮﺍﻧﺪﻥ ﻧﻴﺴﺖ‪.‬‬
‫ﺍﮔﺮ ﻓﺎﻳﻞ ﺧﺮﻭﺟی ﻗﺒل ًا ﻭﺟﻮﺩ ﺩﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﻧﺨﺴﺖ ﻣﺤﺘﻮﻳﺎﺕ ﺁﻥ ﺣﺬﻑ ﻣیﺷﻮﺩ ﻭ ﺳﭙﺲ ﺩﺍﺩﻩﻫﺎﯼ ﺟﺪﻳﺪ ﺩﺭ ﺁﻥ‬
‫ﻧﻮﺷﺘﻪ ﻣیﺷﻮﺩ‪ .‬ﺍﺯ ﺍﻳﻦ ﺭﻭ ﺑﺎﻳﺪ ﺧﻴﻠی ﻣﺮﺍﻗﺐ ﺑﻮﺩ‪ ،‬ﭼﺮﺍ ﻛﻪ ﺩﺍﺩﻩﻫﺎﯼ ﻗﺒﻠی ﻣﺎ ﺍﺯ ﺩﺳﺖ ﻣیﺭﻭﺩ‪ .‬ﺍﻣﺎ ﺍﮔﺮ ﻓﺎﻳﻞ ﺧﺮﻭﺟی‬
‫ﺍﺯ ﻗﺒﻞ ﻭﺟﻮﺩ ﻧﺪﺍﺷﺘﻪ ﺑﺎﺷﺪ‪ ،‬ﻳﮏ ﻓﺎﻳﻞ ﺧﺎﻟی ﺳﺎﺧﺘﻪ ﻣیﺷﻮﺩ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [1]:‬‬ ‫)'‪f= open ('text . txt ','w‬‬
‫)'! ‪f. write ('Hello , world‬‬

‫‪Out[1]:‬‬ ‫‪13‬‬

‫ﺧﺮﻭﺟی ﺑﺮﻧﺎﻣﻪ ﺗﻌﺪﺍﺩ ﻛﺎﺭﺍﻛﺘﺮﻫﺎﻳﯽ ﺍﺳﺖ ﻛﻪ ﺩﺍﺧﻞ ﻓﺎﻳﻞ ‪ text.txt‬ﻧﻮﺷﺘﻪ ﻣیﺷﻮﺩ‪ .‬ﺍﻛﻨﻮﻥ ﺍﮔﺮ ﻓﺎﻳﻞ ﺧﺮﻭﺟی ﺭﺍ‬
‫ﺑﺎﺯ ﻛﻨﻴﻢ‪ ،‬ﭼﻴﺰﯼ ﺩﺍﺧﻞ ﺁﻥ ﻧﻮﺷﺘﻪ ﻧﺸﺪﻩ ﺍﺳﺖ‪ .‬ﭼﺮﺍ ﻛﻪ ﻫﻨﻮﺯ ﻓﺎﻳﻞ ﺑﺎﺯ ﺍﺳﺖ ﻭ ﺑﺎﻳﺪ ﺁﻥ ﺭﺍ ﺑﺴﺖ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎ ﺭﻭﺵ‬
‫)(‪ close‬ﻋﻤﻞ ﺑﺴﺘﻦ ﻓﺎﻳﻞ ﺍﻧﺠﺎﻡ ﻣیﺷﻮﺩ‪.‬‬

‫‪In [2]:‬‬ ‫)( ‪f. close‬‬

‫ﺍﮔﺮ ﭼﻨﺪ ﺁﻳﺘﻢ ﺭﺍ ﺑﺨﻮﺍﻫﻴﻢ ﺩﺭ ﻳﮏ ﻓﺎﻳﻞ ﺑﻨﻮﻳﺴﻴﻢ‪ .‬ﺭﻭﺵ )(‪ write‬ﻣﺜﻞ ﺗﺎﻳع )(‪ print‬ﺳﻄﺮ ﻋﻮﺽ ﻧﻤیﻛﻨﺪ‪ .‬ﭼﺮﺍ ﻛﻪ‬
‫ﺁﺭﮔﻮﻣﺎﻧﺎﺧﺘﻴﺎﺭﯼ '‪ '\n‬ﺭﺍ ﻧﺪﺍﺭﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎﻳﺪ ﺑﻪ ﺻﻮﺭﺕ ﺩﺳﺘی ﻭﺍﺭﺩ ﺑﺮﻧﺎﻣﻪ ﻧﻤﻮﺩ‪ .‬ﺗﻔﺎﻭﺗی ﺩﻳﮕﺮﯼ ﻛﻪ ﺍﻳﻦ ﺩﻭ ﺑﺎ ﻫﻢ‬
‫ﺩﺍﺭﻧﺪ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ‪ write‬ﺍﻃلاﻋﺎﺕ ﺭﺍ ﺩﺭﻭﻥ ﻓﺎﻳﻞ ﻣیﻧﻮﻳﺴﺪ‪ ،‬ﺍﻣﺎ ‪ print‬ﺍﻃلاﻋﺎﺕ ﺭﺍ ﺭﻭﯼ ﺻﻔﺤﮥ ﻧﻤﺎﻳﺶ ﭼﺎﭖ‬
‫ﻣیﻛﻨﺪ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [3]:‬‬ ‫)"‪file = open (" Employees . txt ", "w‬‬
‫‪for i in range (3):‬‬
‫)" ‪name = input (" Enter the name of the employee :‬‬
‫) ‪file . write ( name‬‬
‫)"‪file . write ("\n‬‬
‫)( ‪file . close‬‬
‫)"‪print (" Data is written into the file .‬‬
‫‪۷۷‬‬ ‫ﻓﺼﻞ ‪ .۵‬ﻋﻤﻠﻴﺎﺕ ﺭﻭﯼ ﻓﺎﻳﻞﻫﺎ ﻭ ﻣﺪﻳﺮﻳﺖ ﺧﻄﺎﻫﺎ‬
‫‪Out[3]:‬‬ ‫‪Enter the name of the employee :‬‬ ‫‪ali‬‬
‫‪Enter the name of the employee :‬‬ ‫‪ava‬‬
‫‪Enter the name of the employee :‬‬ ‫‪reza‬‬
‫‪Data is written into the file .‬‬

‫ﺩﺭ ﺍﻳﻨﺠﺎ ﻓﺎﻳﻠی ﺑﻪ ﻧﺎﻡ ‪ Employees.txt‬ﺳﺎﺧﺘﻪ ﻣیﺷﻮﺩ ﻭ ﺍﺳﺎﻣی ‪ ali,ava,reza‬ﺩﺭ ﺳﻪ ﺳﻄﺮ ﻣﺠﺰﺍ ﻧﻮﺷﺘﻪ‬
‫ﻣیﺷﻮﺩ‪ .‬ﺑﺮﺍﯼ ﻣﺸﺎﻫﺪﻩ ﻭ ﺍﻃﻤﻴﻨﺎﻥ‪ ،‬ﻓﺎﻳﻞ ﺍﻳﺠﺎﺩ ﺷﺪﻩ ﺭﺍ ﻣیﺧﻮﺍﻧﻴﻢ‪.‬‬
‫‪In [1]:‬‬ ‫)"‪f= open (" Employees . txt ", "r‬‬
‫))( ‪print (f. read‬‬

‫‪Out[1]:‬‬ ‫‪ali‬‬
‫‪ava‬‬
‫‪reza‬‬

‫ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ ﺍﻃلاﻋﺎﺕ ﺑﻪ ﺍﻧﺘﻬﺎﯼ ﻳﮏ ﻓﺎﻳﻞ‬ ‫‪۵-۵‬‬


‫ﺑﺮﺍﯼ ﺍﺿﺎﻓﻪ ﻧﻤﻮﺩﻥ ﺍﻃلاﻋﺎﺕ ﺑﻪ ﺍﻧﺘﻬﺎﯼ ﻳﮏ ﻓﺎﻳﻞ ﺍﺯ ﺭﻭﺵ )‪ (append‬ﺍﺳﺘﻔﺎﺩﻩ ﻣیﺷﻮﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺑﺎﻳﺪ ﺁﺭﮔﻮﻣﺎﻥ ﺩﻭﻡ‬
‫)(‪ open‬ﺑﻪ ﺻﻮﺭﺕ '‪ 'a‬ﺑﺎﺷﺪ‪ .‬ﺩﺭ ﺍﻳﻦ ﺣﺎﻟﺖ ﻧﻴﺰ ﻧﻤیﺗﻮﺍﻥ ﺍﻃلاﻋﺎﺕ ﻓﺎﻳﻞ ﺭﺍ ﺧﻮﺍﻧﺪ‪.‬‬
‫ﻣﺜﺎﻝ‪:‬‬
‫‪In [2]:‬‬ ‫)'‪f= open (' Employees . txt ','a‬‬
‫)'‪f. write ('Last name .‬‬

‫‪Out[2]:‬‬ ‫‪10‬‬

‫ﻋﺪﺩ ‪ ۱۰‬ﺗﻌﺪﺍﺩ ﻛﺎﺭﺍﻛﺘﺮﯼ )‪ (Last name.‬ﺍﺳﺖ ﻛﻪ ﺑﻪ ﺍﻧﺘﻬﺎﯼ ﻓﺎﻳﻞ ‪ Employees.txt‬ﺍﺿﺎﻓﻪ ﻣیﺷﻮﺩ‪ .‬ﺑﺮﺍﯼ ﺍﻳﻦ‬
‫ﻛﻪ ﺧﺮﻭﺟی ﺑﺮﻭﺯ ﺭﺳﺎﻧی ﺷﻮﺩ‪ .‬ﻓﺎﻳﻞ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﻣیﺑﻨﺪﻳﻢ‪.‬‬
‫‪In [3]:‬‬ ‫)( ‪f. close‬‬

‫ﺍﻛﻨﻮﻥ ﺑﺮﺍﯼ ﻣﺸﺎﻫﺪﻩ ﺗﻐﻴﻴﺮ ﻓﺎﻳﻞ ﺧﺮﻭﺟی‪ ،‬ﺁﻥ ﺭﺍ ﻣیﺧﻮﺍﻧﻴﻢ‪.‬‬


‫‪In [4]:‬‬ ‫)'‪f= open (' Employees . txt ', 'r‬‬
‫))( ‪print (f. read‬‬

‫‪Out[4]:‬‬ ‫‪ali‬‬
‫‪ava‬‬
‫‪rezaLast name .‬‬

‫ﭼﻮﻥ ‪ write‬ﭘﻴﺶﻓﺮﺽ ﺗﻌﻮﻳﺾ ﺳﻄﺮ ﺭﺍ ﻧﺪﺍﺭﺩ‪ .‬ﺑﻨﺎﺑﺮﺍﻳﻦ ﺁﻳﺘﻢ ﺍﺿﺎﻓﻪ ﺷﺪﻩ ﺩﺭ ﺍﺩﺍﻣﻪ ﺳﻄﺮ ﺳﻮﻡ ﺁﻣﺪﻩ ﺍﺳﺖ‪ .‬ﺑﺮﺍﯼ ﺍﻳﻦ‬
‫ﻛﻪ ﺳﻄﺮ ﻋﻮﺽ ﺷﻮﺩ ﻭ ﺁﻳﺘﻢ ﺍﺿﺎﻓﻪ ﺷﺪﻩ ﺩﺭ ﺳﻄﺮ ﭼﻬﺎﺭﻡ ﻧﻮﺷﺘﻪ ﺷﻮﺩ‪ .‬ﺑﺎ ﺗﻐﻴﻴﺮ ﺟﺰﻳﯽ ﻛﺪﻫﺎﯼ ﺑﺎلا ﺭﺍ ﺗﻜﺮﺍﺭ ﻣیﻛﻨﻴﻢ‪.‬‬
‫‪ .۶-۵‬ﺣﺎﻟﺖﻫﺎﯼ ﺗﺮﻛﻴﺒﯽ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﻭ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ‬ ‫‪۷۸‬‬
‫‪In [1]:‬‬ ‫)'‪f= open (' Employees . txt ','a‬‬
‫)'‪f. write ('\n‬‬
‫)'‪f. write ('Last name .‬‬

‫‪Out[1]:‬‬ ‫‪10‬‬

‫‪In [2]:‬‬ ‫)( ‪f. close‬‬

‫‪In [3]:‬‬ ‫)'‪f= open (' Employees . txt ', 'r‬‬


‫))( ‪print (f. read‬‬

‫‪Out[3]:‬‬ ‫‪ali‬‬
‫‪ava‬‬
‫‪reza‬‬
‫‪Last name .‬‬

‫‪ ۶-۵‬ﺣﺎﻟﺖﻫﺎﯼ ﺗﺮﻛﻴﺒﯽ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﻭ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ‬


‫ﻫﻤﺎﻧﻄﻮﺭ ﻛﻪ ﻗﺒل ًا ﻣﺸﺎﻫﺪﻩ ﺷﺪ‪ ،‬ﺳﻪ ﺣﺎﻟﺖ ﺍﺻﻠی ‪ r, w, a‬ﺑﺮﺍﯼ ﺑﺎﺯ ﻛﺮﺩﻥ ﻓﺎﻳﻞ ﻭﺟﻮﺩ ﺩﺍﺭﺩ‪ .‬ﻭ ﻫﻤﭽﻨﻴﻦ ﺳﻪ ﺣﺎﻟﺖ‬
‫ﺗﺮﻛﻴﺒﯽ ﻧﻴﺰ ﻭﺟﻮﺩ ﺩﺍﺭﺩ ﻛﻪ ﻋﺒﺎﺭﺗﻨﺪ ﺍﺯ‪ r+, w+, a+ :‬ﻣیﺑﺎﺷﻨﺪ‪.‬‬

‫ﺟﺪﻭﻝ ‪ :۱-۵‬ﺣﺎلاﺕ ﻣﺨﺘﻠﻒ ﺑﺎﺯ ﻛﺮﺩﻥ ﻓﺎﻳﻞﻫﺎ‬


‫‪Mode‬‬ ‫‪Description‬‬ ‫‪handle file Position‬‬
‫‪r‬‬ ‫‪Read‬‬ ‫‪B.o.F‬‬
‫‪w‬‬ ‫‪Write‬‬ ‫‪B.o.F‬‬
‫‪a‬‬ ‫‪Append‬‬ ‫‪E.o.F‬‬
‫‪r+‬‬ ‫‪Write & Read‬‬ ‫‪B.o.F‬‬
‫‪w+‬‬ ‫‪Read & Write‬‬ ‫‪B.o.F‬‬
‫‪a+ Read & Append‬‬ ‫‪E.o.F‬‬

‫• ﺑﺎ ﺣﺎﻟﺖ )‪ (r+‬ﻣیﺗﻮﺍﻥ ﻓﺎﻳﻞ ﺭﺍ ﺧﻮﺍﻧﺪ ﻭ ﺭﻭﯼ ﺁﻥ ﻧﻮﺷﺖ‪ .‬ﻣﺜﺎﻝ‪:‬‬


‫‪In [4]:‬‬ ‫)'‪f= open ('toto . txt ','r+‬‬
‫)( ‪f. tell‬‬

‫‪Out[4]:‬‬ ‫‪0‬‬

‫ﭘﺲ ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﻓﺎﻳﻞ ﺍﺳﺖ‪ .‬ﺍﻛﻨﻮﻥ ﻓﺎﻳﻞ ﺭﺍ ﻣیﺧﻮﺍﻧﻴﻢ‪.‬‬


‫‪In [5]:‬‬ ‫))( ‪print (f. read‬‬

‫‪Out[5]:‬‬ ‫‪Hello , world .‬‬


‫‪welcome .‬‬
‫‪۷۹‬‬ ‫ﻓﺼﻞ ‪ .۵‬ﻋﻤﻠﻴﺎﺕ ﺭﻭﯼ ﻓﺎﻳﻞﻫﺎ ﻭ ﻣﺪﻳﺮﻳﺖ ﺧﻄﺎﻫﺎ‬
‫ﻧﺸﺎﻧﮕﺮ ﺩﺭ ﺣﺎﻝ ﺣﺎﺿﺮ ﺩﺭ ﺍﻧﺘﻬﺎﯼ ﻓﺎﻳﻞ ﺍﺳﺖ‪ .‬ﺍﻛﻨﻮﻥ ﻣیﺧﻮﺍﻫﻴﻢ ﻳﮏ ﺍﻃلاﻉ ﺟﺪﻳﺪ ﺑﻪ ﻓﺎﻳﻞ ﻣﻮﺭﺩ ﻧﻈﺮ‬
‫ﺍﺿﺎﻓﻪ ﻛﻨﻴﻢ‪.‬‬
‫‪In [1]:‬‬ ‫)'! ‪f. write (' something new‬‬

‫‪Out[1]:‬‬ ‫‪14‬‬

‫ﺗﻌﺪﺍﺩ ﻛﺎﺭﺍﻛﺘﺮﻫﺎ‪ ،‬ﺑﺮﺍﯼ ﻧﻮﺷﺘﻦ ﺩﺭ ﻓﺎﻳﻞ ﺑﺮﺍﺑﺮ ﺑﺎ ‪ ۱۴‬ﺍﺳﺖ‪ .‬ﺍﻛﻨﻮﻥ ﻓﺎﻳﻞ ﺭﺍ ﻣیﺑﻨﺪﻳﻢ‪.‬‬
‫‪In [2]:‬‬ ‫)( ‪f. close‬‬

‫ﻣﺤﺘﻮﻳﺎﺕ ﻓﺎﻳﻞ ﺑﻪ ﺻﻮﺭﺕ ﺯﻳﺮ ﺗﻐﻴﻴﺮ ﻛﺮﺩﻩ ﺍﺳﺖ‪.‬‬


‫‪Out[2]:‬‬ ‫‪Hello , world .‬‬
‫! ‪welcomesomething new‬‬

‫ﻋﻤﻠﻴﺎﺕ ﺍﺧﻴﺮ ﺭﺍ ﺗﻜﺮﺍﺭ ﻣیﻛﻨﻴﻢ‪ ،‬ﻣﻨﺘﻬﺎ ﺍﻳﻦ ﺑﺎﺭ ﻓﺎﻳﻞ ﺭﺍ ﻧﻤیﺧﻮﺍﻧﻴﻢ‪.‬‬


‫‪In [3]:‬‬ ‫)'‪f= open ('toto . txt ','r+‬‬
‫)( ‪f. tell‬‬

‫‪Out[3]:‬‬ ‫‪0‬‬

‫ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺭﻭﯼ ﺻﻔﺮ ﺍﺳﺖ‪ .‬ﺣﺎلا ﺁﻳﺘﻢ ﻣﻮﺭﺩ ﻧﻈﺮ ﺭﺍ ﺩﺭ ﻓﺎﻳﻞ ﻣیﻧﻮﻳﺴﻴﻢ‪.‬‬
‫‪In [4]:‬‬ ‫)' ‪f. write ('OkOk‬‬

‫‪Out[4]:‬‬ ‫‪4‬‬

‫ﺗﻌﺪﺍﺩ ﻛﺎﺭﺍﻛﺘﺮﻫﺎﯼ ﺩﺍﺩﻩ ﺷﺪﻩ ﺭﺍ ﺑﺮﻣیﮔﺮﺩﺍﻧﺪ‪ ،‬ﻛﻪ ﺑﺮﺍﺑﺮ ‪ ۴‬ﺍﺳﺖ‪ .‬ﻓﺎﻳﻞ ﺭﺍ ﻣیﺑﻨﺪﻳﻢ ﻭ ﺳﭙﺲ ﻣﺤﺘﻮﯼ ﺭﺍ ﻣﺸﺎﻫﺪﻩ‬
‫ﻣیﻛﻨﻴﻢ‪.‬‬
‫‪In [5]:‬‬ ‫)( ‪f. close‬‬

‫‪Out[5]:‬‬ ‫‪OkOko , world .‬‬


‫‪welcome‬‬

‫ﻣﺸﺎﻫﺪﻩ ﻣیﺷﻮﺩ ﻛﻪ ‪ ۴‬ﺣﺮﻑ ﻣﻮﺭﺩ ﻧﻈﺮ ﻳﻌﻨی ‪ OkOk‬ﺭﻭﯼ ‪ Hell‬ﻧﺸﺴﺘﻪ ﻭ ﺁﻥ ﺭﺍ ﭘﺎﮎ ﻛﺮﺩﻩ ﺍﺳﺖ‪.‬‬

‫• ﺑﺎ ﺣﺎﻟﺖ )‪ (w+‬ﻣیﺗﻮﺍﻥ ﺭﻭﯼ ﻓﺎﻳﻞ ﻧﻮﺷﺖ ﻭ ﺳﭙﺲ ﺁﻥ ﺭﺍ ﺧﻮﺍﻧﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬


‫‪In [6]:‬‬ ‫)'‪f= open ('toto . txt ','w+‬‬
‫)( ‪f. tell‬‬

‫‪Out[6]:‬‬ ‫‪4‬‬
‫‪ .۶-۵‬ﺣﺎﻟﺖﻫﺎﯼ ﺗﺮﻛﻴﺒﯽ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﻭ ﺍﺿﺎﻓﻪ ﻛﺮﺩﻥ‬ ‫‪۸۰‬‬
‫ﺣﺎلا ﺑﺎ ﺭﻭﺵ )(‪ seek‬ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺭﺍ ﺑﻪ ﺍﺑﺘﺪﺍﯼ ﻓﺎﻳﻞ ﻣﻨﺘﻘﻞ ﻣیﻛﻨﻴﻢ‪ .‬ﻭ ﻓﺎﻳﻞ ﺭﺍ ﻣیﺧﻮﺍﻧﻴﻢ‪ .‬ﺗﻮﺟﻪ ﺩﺍﺷﺘﻪ‬
‫ﺑﺎﺷﻴﺪ ﻛﻪ ﺩﺭ ﺣﺎﻟﺖ ‪ w‬ﻧﻤیﺗﻮﺍﻥ ﻣﺤﺘﻮﻳﺎﺕ ﻓﺎﻳﻞ ﺭﺍ ﺧﻮﺍﻧﺪ‪.‬‬
‫‪In [1]:‬‬ ‫))( ‪print (f. read‬‬

‫‪Out[1]:‬‬ ‫‪Hey , how are you‬‬

‫• ﺑﺎ ﺣﺎﻟﺖ )‪ (a+‬ﻣیﺗﻮﺍﻥ ﺁﺧﺮ ﻓﺎﻳﻞ ﻧﻮﺷﺖ ﻭ ﺳﭙﺲ ﺁﻥ ﺭﺍ ﺧﻮﺍﻧﺪ‪ .‬ﻣﺜﺎﻝ‪:‬‬


‫‪In [2]:‬‬ ‫)'‪f= open ('toto . txt ','a+‬‬
‫)( ‪f. tell‬‬

‫‪Out[2]:‬‬ ‫‪16‬‬

‫ﻣﻘﺪﺍﺭ ‪ ۱۶‬ﺍﻧﺘﻬﺎﯼ ﻓﺎﻳﻞ ﺭﺍ ﻧﺸﺎﻥ ﻣیﺩﻫﺪ‪.‬‬


‫‪In [3]:‬‬ ‫))( ‪print (f. read‬‬

‫ﺑﻨﺎﺑﺮﺍﻳﻦ ﭼﻴﺰﯼ ﭼﺎﭖ ﻧﻤیﺷﻮﺩ‪ .‬ﺣﺎلا ﺑﺎ ﺍﺳﺘﻔﺎﺩﻩ ﺍﺯ ﺭﻭﺵ )(‪ seek‬ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺭﺍ ﺑﻪ ﺍﺑﺘﺪﺍﯼ ﻓﺎﻳﻞ ﻣیﺍﻭﺭﻳﻢ‪.‬‬
‫‪In [4]:‬‬ ‫)‪f. seek (0‬‬

‫‪Out[4]:‬‬ ‫‪0‬‬

‫ﺍﻛﻨﻮﻥ ﻓﺎﻳﻞ ﺭﺍ ﻣیﺧﻮﺍﻧﻴﻢ‪.‬‬


‫‪In [5]:‬‬ ‫))( ‪print (f. read‬‬

‫‪Out[5]:‬‬ ‫‪Hey , how are you‬‬

‫ﺣﺎلا ﻳﮏ ﺁﻳﺘﻢ ﺭﻭﯼ ﻓﺎﻳﻞ ﻣیﻧﻮﻳﺴﻴﻢ‪.‬‬


‫‪In [6]:‬‬ ‫)' ‪f. write ('Ok‬‬

‫‪Out[6]:‬‬ ‫‪2‬‬

‫‪In [7]:‬‬ ‫)( ‪f. tell‬‬

‫‪Out[7]:‬‬ ‫‪18‬‬

‫ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺭﺍ ﺑﻪ ﺍﻭﻝ ﻓﺎﻳﻞ ﻣﻨﺘﻘﻞ ﻣیﻛﻨﻴﻢ‪.‬‬


‫‪In [8]:‬‬ ‫)‪f. seek (0‬‬

‫‪Out[8]:‬‬ ‫‪0‬‬

‫ﺍﻛﻨﻮﻥ ﻓﺎﻳﻞ ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪.‬‬


‫‪۸۱‬‬ ‫ﻓﺼﻞ ‪ .۵‬ﻋﻤﻠﻴﺎﺕ ﺭﻭﯼ ﻓﺎﻳﻞﻫﺎ ﻭ ﻣﺪﻳﺮﻳﺖ ﺧﻄﺎﻫﺎ‬
‫‪In [1]:‬‬ ‫))( ‪print (f. read‬‬

‫‪Out[1]:‬‬ ‫‪Hey , how are youOk‬‬

‫ﺣﺎلا ﻳﮏ ﺗﻔﺎﻭﺕ ﺭﺍ ﻣﺸﺎﻫﺪﻩ ﺧﻮﺍﻫﻴﻢ ﻧﻤﻮﺩ‪.‬‬


‫‪In [2]:‬‬ ‫)‪f. seek (0‬‬

‫‪Out[2]:‬‬ ‫‪0‬‬

‫ﺍﻛﻨﻮﻥ ﺁﻳﺘﻤی ﺭﺍ ﺭﻭﯼ ﻓﺎﻳﻞ ﺑﺎ ﺗﻮﺟﻪ ﺑﻪ ﺍﻳﻦ ﻛﻪ ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺩﺭ ﺍﺑﺘﺪﺍﯼ ﻓﺎﻳﻞ ﺍﺳﺖ‪ ،‬ﻣیﻧﻮﻳﺴﻴﻢ‬
‫‪In [3]:‬‬ ‫)' ‪f. write (' GoodBy‬‬

‫‪Out[3]:‬‬ ‫‪6‬‬

‫ﺩﻭﺑﺎﺭﻩ ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺑﻪ ﺍﺑﺘﺪﺍﯼ ﻓﺎﻳﻞ ﻣﻨﺘﻘﻞ ﻣیﺷﻮﺩ‪.‬‬


‫‪In [4]:‬‬ ‫)‪f. seek (0‬‬

‫‪Out[4]:‬‬ ‫‪0‬‬

‫ﺳﭙﺲ ﻓﺎﻳﻞ ﺧﻮﺍﻧﺪﻩ ﻣیﺷﻮﺩ‪.‬‬


‫‪In [5]:‬‬ ‫))( ‪print (f. read‬‬

‫‪Out[5]:‬‬ ‫‪Hey , how are youOkGoodBy‬‬

‫ﺑﺎ ﺍﻳﻦ ﻛﻪ ﻣﻜﺎﻥ ﻧﺸﺎﻧﮕﺮ ﺍﻭﻝ ﻓﺎﻳﻞ ﺑﻮﺩ‪ .‬ﺍﻣﺎ ﺁﻳﺘﻢ ﻧﻮﺷﺘﻪ ﺷﺪﻩ ﺩﺭ ﭘﺎﻳﺎﻥ ﻓﺎﻳﻞ ﻗﺮﺍﺭ ﮔﺮﻓﺖ‪ .‬ﻭ ﺍﻳﻦ ﺗﻔﺎﻭﺕ ﺣﺎﻟﺖ‬
‫)‪ (a+‬ﺑﺎ ﺳﺎﻳﺮ ﺣﺎلاﺕ ﺍﺳﺖ‪.‬‬

‫ﻋﻤﻠﻴﺎﺕ ﺑﺎ ﻓﺎﻳﻞﻫﺎ ﺑﺎ ﭘﺴﻮﻧﺪ ‪CSV‬‬ ‫‪۷-۵‬‬


‫ﻓﺎﻳﻞ ﺩﺍﺩﻩﻫﺎﻳﯽ ﻭﺟﻮﺩ ﺩﺍﺭﻧﺪ ﻛﻪ ﭘﺴﻮﻧﺪ ‪ ۱‬ﺁﻥ ‪ ۲ CSV‬ﻫﺴﺘﻨﺪ‪ .‬ﻓﻴﻠﺪﻫﺎﯼ ﺍﻳﻦ ﻓﺎﻳﻞ ﺑﺎ ﻛﺎﻣﺎ ﺍﺯ ﻫﻢ ﺟﺪﺍ ﻣیﺷﻮﻧﺪ ﻭ ﺑﺎ‬
‫ﺻﻔﺤﻪ ﮔﺴﺘﺮﺩﻩﺍﯼ ﻣﺎﻧﻨﺪ ‪ Excel‬ﺳﺎﺯﮔﺎﺭ ﻫﺴﺘﻨﺪ‪ .‬ﺍﻣﺎ ﻓﺮﻕ ﺁﻥ ﺑﺎ ﻓﺎﻳﻞﻫﺎﯼ ﺍﻛﺴﻞ ﺍﻳﻦ ﺍﺳﺖ ﻛﻪ ﻣﺜﻞ ﻓﺎﻳﻞﻫﺎﯼ ﻣﺘﻨی‬
‫ﻗﺎﺑﻞ ﻭﻳﺮﺍﻳﺶ ﺍﺳﺖ ﺍﻣﺎ ﻓﺎﻳﻞﻫﺎﯼ ﺍﻛﺴﻞ ﺍﻳﻦ ﺧﺎﺻﻴﺖ ﺭﺍ ﻧﺪﺍﺭﺩ‪ .‬ﺍﺯ ﻃﺮﻓی ﻣیﺗﻮﺍﻥ ﺁﻧﻬﺎ ﺭﺍ ﺑﺎ ﺍﻛﺴﻞ ﺑﺎﺯ ﻧﻤﻮﺩ‪.‬‬
‫ﭘﺎﻳﺘﻮﻥ ﻣیﺗﻮﺍﻧﺪ ﺍﻳﻦ ﻧﻮع ﻓﺎﻳﻞﻫﺎ ﺭﺍ ﺑﺨﻮﺍﻧﺪ ﻭ ﻫﻢ ﺭﻭﯼ ﺁﻥ ﺑﻨﻮﻳﺴﺪ‪ .‬ﻣﺜﺎﻝ‪ :‬ﻳﮏ ﻓﺎﻳﻞ ‪ csv‬ﺑﻪ ﻧﺎﻡ ‪ data.csv‬ﺑﻪ‬
‫ﺻﻮﺭﺕ ﺯﻳﺮ ﺍﺳﺖ‪.‬‬
‫‪name , age , E _ m a i l‬‬
‫‪a l i , 3 0 , a l i @ y a h o o . com‬‬
‫‪r e z a , 2 5 , r e z a @ h o t m a i l . com‬‬
‫‪1. Extension‬‬
‫‪2. Comma Seperated Values‬‬
CSV ‫ ﻋﻤﻠﻴﺎﺕ ﺑﺎ ﻓﺎﻳﻞﻫﺎ ﺑﺎ ﭘﺴﻮﻧﺪ‬.۷-۵ ۸۲
ava , 2 0 , ava@gmail . com
.‫ ﺭﺍ ﺩﺭ ﭘﺎﻳﺘﻮﻥ ﺑﺨﻮﺍﻧﻴﻢ‬data.csv ‫ﻣیﺧﻮﺍﻫﻴﻢ ﺍﻳﻦ ﻓﺎﻳﻞ‬
In [1]: f_in = open ('data . csv ')
for line in f_in :
print (line , end ='')
f_in . close ()

Out[1]: name ,age , E_mail


ali ,30 , ali@yahoo . com
reza ,25 , reza@hotmail . com
ava ,20 , ava@gmail . com

csv ‫ ﺧﻮﺍﻧﺪﻥ ﻭ ﻧﻮﺷﺘﻦ ﻓﺎﻳﻞ ﺑﺎ ﭘﺴﻮﻧﺪ‬:‫ﻣﺜﺎﻝ‬


In [2]: f_in = open ('data . csv ')
f_out = open (' outdata . txt ', 'w')
for line in f_in :
fields = line . split (',')
field1 = fields [0]
field2 = fields [1]
field3 = fields [2]
print ( field1 +' '+ field2 +' '+ field3 , end ='')
f_out . write ( field1 +' '+ field2 +' '+ field3 )
f_in . close ()
f_out . close ()

Out[2]: name age E_mail


ali 30 ali@yahoo . com
reza 25 reza@hotmail . com
ava 20 ava@gmail . com

You might also like