כתבו פונקציה בשם maximum שמקבלת כפרמטר רשימת מספרים.
הפונקציה תחזיר את המספר המקסימלי במערך מבלי להשתמש בלולאות.
השתמשו רק בחומר שלמדנו עד כה.
אתם רשאים לפרסם פה את הפתרון שלכם
אנחנו ממליצים לכולם לא להסתכל על הפתרון של אחרים ולנסות לפתור בעצמם.
שימו לב שמדובר בשאלה קשה מאוד, וזה בסדר גמור לא להצליח לפתור אותה בשלב הזה של הקורס.
ניתן לבדוק האם הפתרון שלכם עובד בעזרת הרצת הקוד שכאן אחרי שהגדרתם את הפונקציה שלכם:
import random
def listgen1():
return [random.uniform(-1000, 1000) for i in range(random.randrange(1, 999))]
def listgen2():
return [random.randrange(-1000, 1000) for i in range(random.randrange(1, 999))]
def listgen3():
return [0 for i in range(random.randrange(1, 999))]
def listgen4():
return [9.9 for i in range(random.randrange(1, 999))]
def check(l):
try:
assert max(l) == maximum(l), f"Failed for input {l}"
except Exception as e:
print(f"{e}, {l}")
check([1, 2, 3])
check([3, 2, 1])
check([3, 1, 1])
check([3, 3, 1])
check([1])
for i in range(100):
check(listgen1())
check(listgen2())
check(listgen3())
check(listgen4())
3 לייקים
israel4001
def maximum(list_of_numbers, index, max):
if index == len(list_of_numbers):
return max
if list_of_numbers[index] > max:
max = list_of_numbers[index]
return maximum(list_of_numbers, index+1, max)
maximum(list_of_numbers, 0, list_of_numbers[0])
orpazf
4 לייקים
Yam
יפה, אבל זה לא מה שביקשו בשאלה
על הפונקציה להיות בעלת פרמטר אחד בלבד
טכנית כן, אהבתי את המקוריות
עכשיו בלי sort/sorted.
Yam
יפה! בניתי קצת בדיקות והפונקציה שלך עוברת את כולן. (מי שרוצה לבדוק שהפונקציה שלו עובדת מוזמן להריץ)
import random
def listgen1():
return [random.uniform(-1000, 1000) for i in range(random.randrange(999))]
def listgen2():
return [random.randrange(-1000, 1000) for i in range(random.randrange(999))]
def listgen3():
return [0 for i in range(random.randrange(1, 999))]
def listgen4():
return [9.9 for i in range(random.randrange(1, 999))]
def check(l):
assert max(l) == maximum(l)
for i in range(100):
l = listgen1()
check(l)
l = listgen2()
check(l)
l = listgen3()
check(l)
l = listgen4()
check(l)
l = [1]
check(l)
לייק 1
israel4001
פתרון נוסף
def maximum(list_of_numbers):
if len(list_of_numbers) == 1:
return list_of_numbers[0]
if list_of_numbers[0] > list_of_numbers[1]:
list_of_numbers.pop(1)
return maximum(list_of_numbers)
list_of_numbers.pop(0)
return maximum(list_of_numbers)
לייק 1
Yam
עבודה טובה, רק שים לב שאתה משנה את list_of_numbers וזה נחשב לא לגמרי מנומס (מי שהעביר לך רשימה מצפה שהיא תהיה אותה רשימה גם אחרי שהוא מריץ את הפונקציה שלך).
במקרה שלך:
לייק 1
orronai
לייק 1
yaromguy
מותר להשתמש במתודות של רשימות ובכלל בכל מה שלמדנו עד עכשיו חוץ מלולאות, כן?
Yam
כן. הוספתי עוד הגבלה: אין להשתמש ב־sorted/sort
yaromguy
def find_max(number_list):
if len(number_list) > 1:
if number_list[-1] > number_list[-2]:
number_list.pop(-2)
else:
number_list.pop(-1)
return find_max(number_list)
else:
return number_list[0]
yaromguy
איך עושים שזה יראה כמו קוד כאן עם הזחות?
Yam
מקשטים משני הצדדים ב־```
Yam
יפה מאוד! עבודה טובה
Yam
יופי!
אבל שים לב שאתה משנה את הרשימה המקורית, מה שנחשב פחות מנומס: