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

יפה! שווה לבדוק גם את הספריה הזאת:

שתעזור לך להציג תפריטים מתוקתקים יותר

תודה @ynonp

אם אני מבין נכון הספרייה הזו לא נתמכת בחלונות בלי להתקין את החבילות הלא רשמיות מכאן:
https://www.lfd.uci.edu/~gohlke/pythonlibs/#curses
האם זה מומלץ?

בהקשר עקיף, האם אתה מכיר נוחה בפייטון ל-GetOptions של מודול Getopt::Long משפת פרל (לקבלת משתנים משורת בפקודה)?

הי,

לגבי Getopt יש לפייתון את argparse שעושה עבודה דומה:
https://docs.python.org/3/library/argparse.html

לגבי curses אני חושב שכן. זו ספריה ותיקה וטובה. אין לי ניסיון איתה על Windows אבל ממשחקים עם מק ו Linux היא עובדת טוב ויש הרבה אופציות. ובכל מקרה בקורס המתקדם פה באתר תלמד על Qt ואז תכתוב יישומי פייתון עם UI גרפי של ממש

היי ינון
האם יש דרך קיצור ב-PyCharm לבצע הזחות? (כמו format document in vs)

כן ברור זה נקרא Reformat Code. הנה הוידאו שלהם בנושא:

def read_until_number(prompt):
    while True:
        try:
            return int(input('what is your age?'))
        except ValueError:
            print('only numbers, please try agine')

x = read_until_number('what is your age?')
total = x*12
print(total)

הי,
נראה מעולה - רק שתי הערות קטנות:

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

  2. לגבי פייתון - מקובל לרשום רווח מסביב לסימן הכפול כלומר total = x * 12

התשובה לתרגיל הראשון

x=[1,2,3,4,9,6,7,8,5,0]
e=[1,2,3,4,9,5,7,8,6,0]

for t in e:
    def read_until_number(prompt):
        while True:
            try:
                return int(input(prompt))
            except ValueError:
                print('Please try again')

    x[t] = read_until_number("please select a number->")
big_number = 0
for y in x:
    if big_number <= y:
        big_number = y
    for i in x:
        if (y <= i) & (big_number <= i):
            big_number = i

print(big_number)

הי @learner וברוכה הבאה לקורס

בשביל להדביק קטעי קוד כאן בפורום אנחנו משתמשים בסימן ״שלום פעמים גרש הפוך״. עדכנתי לך את הקוד ואת יכולה ללחוץ על העיפרון כדי לראות איך גרמתי לקוד להיראות כמו קוד - ויש גם תיעוד עם כל הסימנים האפשריים כאן:
https://commonmark.org/help/

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

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

from random import randint
"""
first exercise
"""
num = 10
biggest_number = 0
print(f"Please choose {num} numbers")
current_number = 0
while current_number < 10:
    try:
        current_number += 1
        number = int(input(f"Enter a number {current_number}: "))
        if number >= biggest_number:
            biggest_number = number
    except ValueError:
        print("Please write in numbers")
        current_number -= 1
        num -= 1
print(f"The biggest number is: {biggest_number}")

"""
second exercise
"""


def age_to_months(user_age):
    user_age = int(input("What is your age?"))
    try:
        print(f"Your age in months is: {user_age * 12}")
    except ValueError:
        print("Please write your age in numbers")

age_to_months(int())

"""
third exercise
"""
lines = []
print("please write something")
while True:
    line = input()
    if line == '':
        break
    lines.append(line)
print(f"you have writen {lines[::-1]}")

"""
fourth exercise
"""
while True:
    random_number1 = randint(1, 1000000)
   if random_number1 % 7 == 0 & random_number1 % 13 == 0 & random_number1 % 15 == 0:
        print(f"I found it, it is {random_number1}")
        break
"""
fifth exercise
"""
num1 = randint(1, 10)
num2 = randint(1, 10)
y = max(num1, num2)
while not (y % num1 == 0) & (y % num2 == 0):
    y += 1
print(f"The smallest multiplier of {num1} and {num2} is  {y}")
"""
sixth exercise
"""
random_number = randint(1, 100)
user_input = 1
while True:
    try:
        user_input = int(input("Guess the number from 1 to 100:"))
    except ValueError:
        print("Oops!  That was no valid number.  Try again...")
        if 1 == 1:
            continue
    if user_input == random_number:
        print("You got it right!")
    else:
        random_number2 = randint(1,4)
        if random_number2 == 2:
            if user_input > random_number:
                print("your number is smaller")
            else:
                print("Your number is bigger")
        else:
            if user_input < random_number:
                print("your number is smaller")
            else:
                print("Your number is bigger")

הי בגדול נראה טוב,

בתרגיל הראשון אני חושב שפיתרון עם לולאת for היה יוצא יותר קל,
ואת התרגיל השלישי אפשר לפתור בלי להשתמש ברשימה - נסה להתאמץ ולמצוא איך

היי, בתרגיל 5 אני מרנדם פעמיים ערכים בין 0-10 אך 2 הערכים יוצאים לי זהים…

הי,

יכול להדביק כאן את הקוד?

from random import randint
def my_funct():
    while True:
        rand_num1= randint(0,10)
        rand_num2= randint(0,10)
        print (f" rand_num1: {rand_num1} rand_num2: {rand_num1}")
        return  
my_funct()

משום מה ההזחות נעלמות לאחר השליחה.

הי אני רואה שאתה מדפיס פעמיים את הערך של המשתנה הראשון. שים לב טוב לשורת ההדפסה

להלן הקוד לששת התרגילים:
**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 שאלה בעצם הארגומנטים שיישלחו לסקריפט