קורס Python 3 שיעור תרגיל לולאות ותנאים

להלן הקוד לששת התרגילים:
**1

x=input('enter 10 numbers seperated with space: ')
y=[]
x=x.split(' ')
for i in x:
    i=int(i)
    y.append(i)
print(max(y))

**2

x=input('enter your age in months: ')
while x.isalpha():
 print('Only digits are allowed, try again')
 x = input('Re-enter your age in months: ')
x=int(x)
x=x/12
print('your age is: ',round(x,2))

**3

print('Type text, end with empty line')
x=[]
while True:
 y=input()
 if y=='':
  break
 x.append(y)
for i in x[::-1]:
  print(i)

**4

from random import randint
x=randint(1, 1000000)
print(x)
while x%7!=0 and x%13!=0 and x%15!=0:
    x = randint(1, 1000000)
    print(x)

**5

from random import randint
x=randint(1, 10)
y=randint(1,10)
a=0
z=1
i=1
while z!=0:
  a = x * i
  z = a % y
  i+=1
print('The values of x,y are:',x,',',y)
print('The smalest number is: ',a)

**6

# The program will display wrong answer once on every 3 answers
from random import randint
x=randint(1, 100)
print('x=',x)
y=0
j=1
while x!=y:
 y=int(input('Try to guess the number: '))
 if x==y:
    print('Great, you succeeded!')
 elif x>y:
    a = j % 3
    if a != 0:
     print('The number is too LOW, try again')
    if a==0:
     print('The number is too HIGH, try again')
    j+=1
 else:
    a = j % 3
    if a != 0:
     print('The number is too HIGH, try again')
    if a==0:
     print('The number is too LOW, try again')
    j+=1
לייק 1

הי רחביה וכל הכבוד על הפיתרונות!

בשביל שקוד יופיע טוב בפורום צריך לעטוף אותו בסימן גרש הפוך שמופיע שלוש פעמים בשורה (אני לא בטוח שתיארתי את זה מספיק טוב), בכל מקרה אתה יכול ללחוץ על העיפרון (עריכה) על ההודעה שלך ולראות מה עשיתי שם מסביב לקוד לפעמים הבאות.

כמה מחשבות לגבי הקוד עצמו-

  1. כדאי לבחור שמות משתנים בעלי משמעות יותר גדולה מ i, x ו y. כשקוראים את התוכנית קשה להבין למה התכוונת עם השמות האלה.

  2. קל יותר לקרוא כשיש רווח מסביב לסימן השווה, כלומר:

x = input('enter 10 numbers: ')
  1. בתרגיל הראשון אפשר לכתוב את מה שהתכוונת בצורה פשוטה יותר כך:
input_string = input('enter 10 numbers')
numbers = [int(n) for n in input_string.split()]
print(max(numbers))

אני מסביר על תחביר הלולאות הזה בשיעור כאן יחד עם ההסבר על רשימות:
https://www.tocode.co.il/bundles/python/lessons/12-lists

  1. בתרגיל 2 לא היה צריך לבדוק שהגיל הוא אכן מספר - אנחנו נראה איך עושים את זה בהמשך הקורס כשנדבר על Exceptions. באופן כללי לא כדאי “למחזר” את אותו משתנה במשמעות שונה, לכן בקוד של תרגיל 2 שווה להוסיף עוד משתנה או שניים.

  2. אם יש לך זמן ובשביל המשחק, אפשר לפתור את תרגיל 3 גם בלי להשתמש ברשימות

  3. אם יש לך זמן ובשביל המשחק, אפשר לפתור את תרגיל 4 בלי לכתוב פעמיים randint

כיף לקרוא את התשובות ומחכה לראות פיתרונות לתרגילים נוספים

בהרצת הקוד הבא של תרגיל 4, הלולאה מפסיקה גם אם מתמלאים חלק מהתנאים, למרות שכתבתי AND בין שלושת התנאים???

הערה: הלולאה מתפקדת היטב אם אני משנה ל:

while not (x%7==0 and x%13==0 and x%15==0):

אשמח מאוד לתשובתך.

תודה ויום טוב.

from random import randint

x=1

while x%7!=0 and x%13!=0 and x%15!=0:

x = randint(1, 1000000)

print(x)

print('x%7=',x%7)

print('x%13=', x % 13)

print('x%15=', x % 15)

**Result-1:

384807

x%7= 3

x%13= 7

x%15= 12

869401

x%7= 1

x%13= 0

x%15= 1

**Result-2:

554802

x%7= 3

x%13= 1

x%15= 12

75165

x%7= 6

x%13= 12

x%15= 0

אשמח לעזרה על איך מריצים קובץ פייתון עם ארגומנטים דרך ה-pycharm user console

הי,

בפייצ’ארם בשביל להריץ קובץ פייתון עם ארגומנטים צריך להיכנס לתפריט Run ושם ללחוץ על Run עם השלוש נקודות אחריו ואז לבחור Edit Configuration.

ייפתח לך דיאלוג עם מקום לרשום Parameters שאלה בעצם הארגומנטים שיישלחו לסקריפט

היי ,
אלה הפתרונות שלי לששת התרגילים .
אשמח לקבל הארות / הערות .


**ex-1**
c = 0
list = []
while c < 10:
    x = int(input("Please enter your number:"))
    c = c + 1
    list.append(x)
print(list)
ans = max(list)
print(f"the maximum value is: {ans}")

**ex-2**
while True:
    try:
        x = int(input("please enter your age:"))
        y = x*12
        print(f"your age (in months)", y)
    except ValueError:
        print("Sorry you need to type a number")

**ex-3**
lines = []
while True:
    x = input("Please enter something:")
    lines.append(x)
    if x == '':
        break
print(f"your lines:{lines[::-1]}")

**ex-4**

from random import randint

while True:
    num = (randint(1, 1000000))
    print(num)
    if (num % 7 == 0) and (num % 13 == 0) and (num % 15 == 0):
        break
print(f"This is the number:{num}")

**ex-5**

import math
from random import randint

num1 = (randint(1, 10))
num2 = (randint(1, 10))
#gcd calc.
x = math.gcd(num1, num2)
#lcm clac.
y =int((num1*num2)/x)
print(f"The Least Common Multiple of {num1} & {num2} is:  {y} ")

**ex-6**

from random import randint
num1 = (randint(1, 100))
while True:
    num2 = int(input("Please enter num :"))
    if num2 > num1:
        print("Try again but less then before")
    elif num2 < num1:
        print("Try again but more then before")
    else:
        break

print("You guessed right !!!")

הי,

כיף - בשמחה

  1. תרגיל ראשון לא חייבים לשמור את כל המספרים. אנחנו רק רוצים למצוא את המספר הכי גדול, אז מספיק לשמור מספר אחד וכל פעם שמגיע עוד מספר לבדוק מי משניהם יותר גדול ואותו לשמור.

  2. תרגיל שני שים לב לשמות המשתנים. תראה את זה:

while True:
  try:
    age_in_years = int(input("please enter your age:"))
    age_in_months = age_in_years * 12
    print(f"You are {age_in_months} months old")
  except ValueError:
    print("Sorry, we only take numbers")

ברגע שאני בוחר שמות ברורים למשתנים גם כל הקוד מסביר את עצמו והרבה יותר קל להבין מה זה עושה.

  1. כמו בתרגיל 1, גם כאן אין צורך לשמור רשימה של כל השורות ולהפוך אותה בסוף. אפשר לשמור את הכל במשתנה אחד ולעדכן אותו בכל איטרציה (למרות שבניגוד לתרגיל 1 פה החיסכון לא כזה משמעותי כי בסוף באמת צריך לשמור את כל הטקסטים)

  2. תרגיל 4 - נראה מעולה. לא הבנתי למה ה randint בתוך סוגריים.

  3. תרגיל 5 - שוב המשחק של שמות משתנים. עדיף לבחור gcd ו lcm במקום x ו y

  4. תרגיל 6 - שוב שמות משתנים. הפעם היינו רוצים לראות שמות כמו secret_number ו user_guess. שווה גם לנסות את הבונוס

בגדול נראה טוב ורואים שאתה בעניינים. שים לב לסדר ושמות משתנים כדי להתחשב גם במי שקורא ויהיה מושלם