تمرین برنامه نویسی : قیمت لپ تاپ ها

سلام
اگر ممکن هست این تمرین حل بشه بدون استفاده از کلاس

ه روز سیندخت و ایرسا در حال بحث در مورد قیمت لپ تاپ ها و کیفیت آنها بودند. سیندخت حدس میزنه هرچی یه لپ تاپ گرون تر باشه کیفیت بهتری هم داره. اما ایرسا ادعا می کنه می تونه ۲ تا لپ تاپ پیدا کنه که قیمت اولی از دومی کمتر باشه ولی کیفیتش از دومی بیشتر باشه و بتونه حدس سیندخت را رد کند. حالا شما باید با نوشتن یه برنامه به ایرسا کمک کنید ادعای خودش را بررسی کند.

مشخصات n لپ تاپ به شما داده میشه. خط اول ورودی شامل عدد n هست که تعداد لپ تاپ ها را نشان می دهد. هر یک از n خط بعدی شامل دو عدد می باشد که عدد اول قیمت لپ تاپ را نشان می دهد و عدد دوم کیفیت آن لپ تاپ را. اگه تونستید دو تا لپ تاپ پیدا کنید که شرایط گفته شده توسط ایرسا را داشته باشد چاپ کنید happy irsa در غیر این صورت چاپ کنید poor irsa (لطفا به کوچک بودن حروف توجه کنید تمامی حروف به صورت کوچک نوشته می شوند.)

ورودی نمونه:

2
1 10
7 3
خروجی نمونه:

happy irsa

در ورودی نمونه لپ تاپ اول قیمت ۱ را دارد و کیفیت ۱۰ (هرچه عدد بزرگتر باشد کیفیت بیشتر است) لپ تاپ دوم قیمت ۷ دارد و کیفیت ۳. خب ایرسا موفق شده است دو لپ تاپ پیدا کند که با اینکه قیمت دومی از قیمت اولی بیشتر است اما کیفیت دومی از کیفیت اولی کمتر است.

ورودی نمونه:

4
1 5
7 9
5 6
20 30
خروجی نمونه:

poor irsa

پاسخ ها

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش
count = int(input())

laptops = []
for i in range (count):
 inp = input()
 inp_list = inp.split(' ')
 laptops.append ((int(inp_list[0]), int(inp_list[1])))

found = False
for i in range (len(laptops)):
 for j in range (i+1, len(laptops)):
 if laptops[i][0] < laptops[j][0]:
 if laptops[i][1] > laptops[j][1]:
 found = True
 break
 if laptops[i][0] > laptops[j][0]:
 if laptops[i][1] < laptops[j][1]:
 found = True
 break
 if found:
 break

if found:
 print ("happy irsa")
else:
 print ("poor irsa")


 
sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

سپاسگزارم

sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

به نظرم به جای شرط های تو در تو میتونیم شرط ها رو با هم چک کنیم. مثلا قطعه کد بالا رو به صورت زیر تغییر بدیم.

for i in range (len(laptops)):
 for j in range (i+1, len(laptops)):
 if ((laptops[i][0] < laptops[j][0]) and (laptops[i][1] > laptops[j][1])) or ((laptops[i][0] > laptops[j][0]) and (laptops[i][1] < laptops[j][1])):
 found = True
 break
 
 if found:
 break
sokanacademy forum
کاربر سکان آکادمی 4 سال پیش

پاسخ @alibadparva0 میتونه به صورت زیر نوشته بشه تا به راحتی از nested loops با پیدا کردن پاسخ بیرون بیایم:

def is_irsa_happy(laptops):
 for i in range (len(laptops)):
 for j in range (i+1, len(laptops)):
 if ((laptops[i][0] < laptops[j][0]) and (laptops[i][1] > laptops[j][1])) or ((laptops[i][0] > laptops[j][0]) and (laptops[i][1] < laptops[j][1])):
 return True

 return False

count = int(input())

laptops = []
for i in range (count):
 inp = input()
 inp_list = inp.split(' ')
 laptops.append ((int(inp_list[0]), int(inp_list[1])))

if (is_irsa_happy(laptops)):
 print ("happy irsa")
else:
 print ("poor irsa")
online-support-icon