Commit 3fe4731d by Patryk Czarnik

Rozwiązania zadań domowych z pierwszej serii

parent bb327577
print('Podaj wymiary pomieszczenia w metrach (np. 3.75 )')
a = float(input('długość : '))
b = float(input('szerokość: '))
h = float(input('wysokość : '))
obwod = 2*a + 2*b
pow_podlogi = a*b
pow_scian = obwod*h
suma = 0
wybor = input('Czy chcesz gipsować ściany? [T/N] ').strip().upper()
if wybor == 'T':
suma += pow_scian * 100
wybor = input('Czy chcesz malować ściany i sufit? [T/N] ').strip().upper()
if wybor == 'T':
suma += (pow_scian + pow_podlogi) * 30
wybor = input('Czy chcesz kłaść panele podłogowe? [T/N] ').strip().upper()
if wybor == 'T':
suma += pow_podlogi * 50
wybor = input('Czy chcesz kłaść listwy podłogowe? [T/N] ').strip().upper()
if wybor == 'T':
suma += obwod * 40
print(f'Łączny koszt prac wyniesie {suma:.2f} zł')
# W jednym miejscu zapisuję nazwy i ceny prac, ale w dalsej części programu i tak będę w różny sposób obliczał faktyczno koszt - wzory się różnią.
# Wyciągnięcie tych danych do oddzielnej definicji ma tylko ułatwić ewentualną zmianę cen.
# Struktura słownika: krótki_klucz: (opis, cena)
cennik = {
'gip': ('gipsowanie ścian', 100),
'mal': ('malowanie ścian i sufitów', 30),
'pan': ('panele podłogowe', 50),
'lis': ('listwy podłogowe', 40),
}
def pytanie_o_prace(opis: str, koszt: float) -> float:
wybor = input(f'Czy chcesz wykonać pracę "{opis}", której koszt wynosi {koszt:.2f} zł?\nT / N: ').strip().upper()
return koszt if wybor == 'T' else 0
def main():
print('Podaj wymiary pomieszczenia w metrach (np. 3.75 )')
a = float(input('długość : '))
b = float(input('szerokość: '))
h = float(input('wysokość : '))
obwod = 2*a + 2*b
pow_podlogi = a*b
pow_scian = obwod*h
suma = 0
suma += pytanie_o_prace(cennik["gip"][0], cennik["gip"][1] * pow_scian)
suma += pytanie_o_prace(cennik["mal"][0], cennik["mal"][1] * (pow_scian + pow_podlogi))
suma += pytanie_o_prace(cennik["pan"][0], cennik["pan"][1] * pow_podlogi)
suma += pytanie_o_prace(cennik["lis"][0], cennik["lis"][1] * obwod)
print(f'Łączny koszt prac wyniesie {suma:.2f} zł')
if __name__ == '__main__':
main()
print('Podaj wymiary pomieszczenia w metrach (np. 3.75 )')
a = float(input('długość : '))
b = float(input('szerokość: '))
h = float(input('wysokość : '))
obwod = 2*a + 2*b
pow_podlogi = a*b
pow_scian = obwod*h
prace = {
'gipsowanie': 100 * pow_scian,
'malowanie': 30 * (pow_scian + pow_podlogi),
'panele podłogowe': 50 * pow_podlogi,
'listwy podłogowe': 40 * obwod,
}
suma = 0
for praca, koszt in prace.items():
wybor = input(f'Czy chcesz wykonać pracę "{praca}", której koszt wynosi {koszt:.2f} zł?\nT / N: ').strip().upper()
if wybor == 'T':
suma += koszt
print('Koszt pracy doliczony')
elif wybor == 'N':
print('OK, nie liczę tej pracy')
else:
print('Niepoprawny wybór - tej pracy nie liczę.')
print(f'Łączny koszt prac wyniesie {suma:.2f} zł')
from random import randrange
# losuje liczbę od 0 do 9
# Przyjmuję, że (0,0) to lewy górny róg planszy
skarb_x = randrange(0, 10)
skarb_y = randrange(0, 10)
gracz_x = randrange(0, 10)
gracz_y = randrange(0, 10)
print(f'Pozycja skarbu: {skarb_x}, {skarb_y}')
while True:
print(f'Pozycja gracza: {gracz_x}, {gracz_y}')
ruch = input('Podaj ruch [wsad] lub [q] aby zakończyć: ').upper()
if ruch == 'Q':
print('Poddajesz się?')
break
elif ruch == 'W':
gracz_y -= 1
elif ruch == 'S':
gracz_y += 1
elif ruch == 'A':
gracz_x -= 1
elif ruch == 'D':
gracz_x += 1
else:
print('Nieprawidłowe polecenie')
continue
if gracz_x == skarb_x and gracz_y == skarb_y:
print('Wygrałeś, brawo!')
break
if gracz_x < 0 or gracz_x >= 10 or gracz_y < 0 or gracz_y >= 10:
print('Wypadłeś z planszy, porażka')
break
print()
print('papa')
from random import randrange
# losuje liczbę od 0 do 9
# Przyjmuję, że (0,0) to lewy górny róg planszy
skarb_x = randrange(0, 10)
skarb_y = randrange(0, 10)
gracz_x = randrange(0, 10)
gracz_y = randrange(0, 10)
print(f'Pozycja skarbu: {skarb_x}, {skarb_y}')
while True:
print(f'Pozycja gracza: {gracz_x}, {gracz_y}')
odleglosc_przed_ruchem = abs(gracz_x - skarb_x) + abs(gracz_y - skarb_y)
ruch = input('Podaj ruch [wsad] lub [q] aby zakończyć: ').upper()
if ruch == 'Q':
print('Poddajesz się?')
break
elif ruch == 'W':
gracz_y -= 1
elif ruch == 'S':
gracz_y += 1
elif ruch == 'A':
gracz_x -= 1
elif ruch == 'D':
gracz_x += 1
else:
print('Nieprawidłowe polecenie')
continue
if gracz_x == skarb_x and gracz_y == skarb_y:
print('Wygrałeś, brawo!')
break
if gracz_x < 0 or gracz_x >= 10 or gracz_y < 0 or gracz_y >= 10:
print('Wypadłeś z planszy, porażka')
break
odleglosc_po_ruchu = abs(gracz_x - skarb_x) + abs(gracz_y - skarb_y)
if odleglosc_po_ruchu < odleglosc_przed_ruchem:
print('Zbliżyłeś się do skarbu')
else:
print('Oddaliłeś się do skarbu')
print()
print('papa')
from random import randint, random
skarb_x = randint(1, 10)
skarb_y = randint(1, 10)
# Losujemy pozycję gracza tak, żeby nie pokrywała się z pozycją skarbu (losowanie do skutku)
gracz_x = skarb_x
gracz_y = skarb_y # takie ustawienie początkowych wartości, aby program wszedł do tej pętli choć jeden raz
while gracz_x == skarb_x and gracz_y == skarb_y:
gracz_x = randint(1, 10)
gracz_y = randint(1, 10)
# Przyjmuję, że (1,1) to lewy górny róg planszy
print(f'Pozycja skarbu: {skarb_x}, {skarb_y}')
odleglosc_na_poczatku = abs(gracz_x - skarb_x) + abs(gracz_y - skarb_y)
odleglosc_przed_ruchem = odleglosc_na_poczatku
wykonana_liczba_ruchow = 0
while True:
print(f'Pozycja gracza: {gracz_x}, {gracz_y}')
ruch = input('Podaj ruch [wsad] lub [q] aby zakończyć: ').upper()
if ruch == 'Q':
print('Poddajesz się?')
break
elif ruch == 'W':
gracz_y -= 1
elif ruch == 'S':
gracz_y += 1
elif ruch == 'A':
gracz_x -= 1
elif ruch == 'D':
gracz_x += 1
else:
print('Nieprawidłowe polecenie')
continue
wykonana_liczba_ruchow += 1
if gracz_x == skarb_x and gracz_y == skarb_y:
print(f'Wygrałeś, brawo! Wykorzystałeś {wykonana_liczba_ruchow} ruchów.')
break
if gracz_x < 1 or gracz_x > 10 or gracz_y < 1 or gracz_y > 10:
print('Wypadłeś z planszy, porażka')
break
if wykonana_liczba_ruchow > 2*odleglosc_na_poczatku:
# od nowa losujemy pozycję skarbu
skarb_x = randint(1, 10)
skarb_y = randint(1, 10)
print('Za długo szukasz, skarb został przeniesiony w inne miejsce')
print(f'Pozycja skarbu: {skarb_x}, {skarb_y}')
odleglosc_na_poczatku = abs(gracz_x - skarb_x) + abs(gracz_y - skarb_y)
odleglosc_przed_ruchem = odleglosc_na_poczatku
wykonana_liczba_ruchow = 0
else:
odleglosc_po_ruchu = abs(gracz_x - skarb_x) + abs(gracz_y - skarb_y)
if random() >= 0.2: # z prawdopodobieństwem 4/5 wypisujemy wskazówkę
if odleglosc_po_ruchu < odleglosc_przed_ruchem:
print('Zbliżyłeś się do skarbu')
else:
print('Oddaliłeś się do skarbu')
odleglosc_przed_ruchem = odleglosc_po_ruchu # odległość przed następnym ruchem jest równa odległości po tym ruchu
print()
print('papa')
from random import randint, random
def odleglosc_do_skarbu():
# Gdy funkcja ma tylko odczytać zmienne globalne, to nie musi ich deklarować jako global, i tak ma do nich dostęp.
return abs(gracz_x - skarb_x) + abs(gracz_y - skarb_y)
def wylosuj_pozycje_skarbu():
# To nie jest najładnieszy styl programowania, ale w tym konkretnym przypadku tak będzie najwygodniej:
# Funkcja modyfikuje zmienne globalne.
# Jeśli funkcja ustawia lub modyfikuje zmienne globalne, muszą być wymienione w deklaracji global
global skarb_x, skarb_y, odleglosc_na_poczatku, odleglosc_przed_ruchem, wykonana_liczba_ruchow
skarb_x = randint(1, 10)
skarb_y = randint(1, 10)
#print(f'Pozycja skarbu: {skarb_x}, {skarb_y}')
odleglosc_na_poczatku = odleglosc_do_skarbu()
odleglosc_przed_ruchem = odleglosc_na_poczatku
wykonana_liczba_ruchow = 0
# Początek programu
(gracz_x, gracz_y) = (randint(1, 10), randint(1, 10))
wylosuj_pozycje_skarbu()
while True:
#print(f'Pozycja gracza: {gracz_x}, {gracz_y}')
ruch = input('Podaj ruch [wsad] lub [q] aby zakończyć: ').upper()
if ruch == 'Q':
print('Poddajesz się?')
break
elif ruch == 'W':
gracz_y -= 1
elif ruch == 'S':
gracz_y += 1
elif ruch == 'A':
gracz_x -= 1
elif ruch == 'D':
gracz_x += 1
else:
print('Nieprawidłowe polecenie')
continue
wykonana_liczba_ruchow += 1
if (gracz_x, gracz_y) == (skarb_x, skarb_y):
print(f'Wygrałeś, brawo! Wykorzystałeś {wykonana_liczba_ruchow} ruchów.')
break
if gracz_x < 1 or gracz_x > 10 or gracz_y < 1 or gracz_y > 10:
print('Wypadłeś z planszy, porażka')
break
if wykonana_liczba_ruchow > 2*odleglosc_na_poczatku:
print('Za długo szukasz, skarb został przeniesiony w inne miejsce')
wylosuj_pozycje_skarbu()
else:
odleglosc_po_ruchu = odleglosc_do_skarbu()
if random() > 0.2: # z prawdopodobieńśtwem 4/5 wypisujemy wskazówkę
if odleglosc_po_ruchu < odleglosc_przed_ruchem:
print('Zbliżyłeś się do skarbu')
else:
print('Oddaliłeś się do skarbu')
odleglosc_przed_ruchem = odleglosc_po_ruchu # odległość przed następnym ruchem jest róna odległości po tym ruchu
print()
print('papa')
from random import randint, random
def odleglosc_do_skarbu():
# Gdy funkcja ma tylko odczytać zmienne globalne, to nie musi ich deklarować jako global, i tak ma do nich dostęp.
# Mimo, że nie jest to konieczne, zadeklarujemy te zmienne jako globalne dla zwiększenia czytelności.
global skarb_x, skarb_y, gracz_x, gracz_y
return abs(gracz_x - skarb_x) + abs(gracz_y - skarb_y)
def wylosuj_pozycje_gracza():
global gracz_x, gracz_y
gracz_x = randint(1, 10)
gracz_y = randint(1, 10)
def wylosuj_pozycje_skarbu():
# To nie jest najładnieszy styl programowania, ale w tym konkretnym przypadku tak będzie najwygodniej:
# Funkcja modyfikuje zmienne globalne.
# Jeśli funkcja ustawia lub modyfikuje zmienne globalne, muszą być wymienione w deklaracji global
global skarb_x, skarb_y, odleglosc_na_poczatku, odleglosc_przed_ruchem, wykonana_liczba_ruchow
skarb_x = randint(1, 10)
skarb_y = randint(1, 10)
#print(f'Pozycja skarbu: {skarb_x}, {skarb_y}')
odleglosc_na_poczatku = odleglosc_do_skarbu()
odleglosc_przed_ruchem = odleglosc_na_poczatku
wykonana_liczba_ruchow = 0
# Początek programu
# W tej wersji również treść programu mieścimy w funkcji - zgodnie z konwencją nazwiemy ją main()
# Informacyjnie: W C, C++, Java, C# trzeba tak robić. W Pythonie nie trzeba, ale niektórzy tak robią.
def main():
global skarb_x, skarb_y, gracz_x, gracz_y, odleglosc_na_poczatku, odleglosc_przed_ruchem, wykonana_liczba_ruchow
wylosuj_pozycje_gracza()
wylosuj_pozycje_skarbu()
while (gracz_x, gracz_y) != (skarb_x, skarb_y):
#print(f'Pozycja gracza: {gracz_x}, {gracz_y}')
ruch = input('Podaj ruch [wsad] lub [q] aby zakończyć: ').upper()
if ruch == 'Q':
print('Poddajesz się?')
break
elif ruch == 'W':
gracz_y -= 1
elif ruch == 'S':
gracz_y += 1
elif ruch == 'A':
gracz_x -= 1
elif ruch == 'D':
gracz_x += 1
else:
print('Nieprawidłowe polecenie')
continue
wykonana_liczba_ruchow += 1
if gracz_x < 1 or gracz_x > 10 or gracz_y < 1 or gracz_y > 10:
print('Wypadłeś z planszy, porażka')
break
if wykonana_liczba_ruchow > 2*odleglosc_na_poczatku:
print('Za długo szukasz, skarb został przeniesiony w inne miejsce')
wylosuj_pozycje_skarbu()
else:
odleglosc_po_ruchu = odleglosc_do_skarbu()
if random() > 0.2: # z prawdopodobieństwem 4/5 wypisujemy wskazówkę
if odleglosc_po_ruchu < odleglosc_przed_ruchem:
print('Zbliżyłeś się do skarbu')
else:
print('Oddaliłeś się do skarbu')
odleglosc_przed_ruchem = odleglosc_po_ruchu # odległość przed następnym ruchem jest róna odległości po tym ruchu
print()
else:
# else do pętli wykona się tylko wtedy, gdy pętla zakońćzy się w sposó normalny
# (w przypadku while: gdy warunek logiczny stanie się fałszywy)
# a nie wykona się, gdy pętla zostanie przerwana za pomocą break
print(f'Wygrałeś, brawo! Wykorzystałeś {wykonana_liczba_ruchow} ruchów.')
print('papa')
# Aby funkcja main się wykonała, trzeba ją wywołać
main()
from random import randint, random
class Gra:
MIN = 1
MAX = 10
DEBUG = True
def __init__(self):
self.wylosuj_pozycje_skarbu()
self.wylosuj_pozycje_gracza()
def odleglosc_do_skarbu(self):
return abs(self.gracz_x - self.skarb_x) + abs(self.gracz_y - self.skarb_y)
def wylosuj_pozycje_gracza(self):
self.gracz_x = randint(Gra.MIN, Gra.MAX)
self.gracz_y = randint(Gra.MIN, Gra.MAX)
def wylosuj_pozycje_skarbu(self):
self.skarb_x = randint(Gra.MIN, Gra.MAX)
self.skarb_y = randint(Gra.MIN, Gra.MAX)
if Gra.DEBUG:
print(f'Pozycja skarbu: {self.skarb_x}×{self.skarb_y}')
self.odleglosc_na_poczatku = self.odleglosc_do_skarbu()
self.wykonana_liczba_ruchow = 0
def skarb_znaleziony(self):
return (self.gracz_x, self.gracz_y) == (self.skarb_x, self.skarb_y)
def poza_plansza(self):
return self.gracz_x < Gra.MIN or self.gracz_x > Gra.MAX or self.gracz_y < Gra.MIN or self.gracz_y > Gra.MAX
def wczytaj_ruch(self):
ruch = input('Podaj ruch [wsad] lub [q] aby zakończyć: ').upper()
return ruch
def wykonaj_ruch(self, ruch):
if Gra.DEBUG:
print(f'Pozycja gracza: {self.gracz_x}×{self.gracz_y}')
if ruch == 'W':
self.gracz_y -= 1
elif ruch == 'S':
self.gracz_y += 1
elif ruch == 'A':
self.gracz_x -= 1
elif ruch == 'D':
self.gracz_x += 1
self.wykonana_liczba_ruchow += 1
def podpowiedz_albo_utrudnij(self, przed, po):
if self.wykonana_liczba_ruchow > 2 * self.odleglosc_na_poczatku:
print('Za długo szukasz, skarb został przeniesiony w inne miejsce')
self.wylosuj_pozycje_skarbu()
else:
if random() > 0.2: # z prawdopodobieństwem 4/5 wypisujemy wskazówkę
if po < przed:
print('Zbliżyłeś się do skarbu')
else:
print('Oddaliłeś się do skarbu')
def graj(self):
while not self.skarb_znaleziony():
odleglosc_przed_ruchem = self.odleglosc_do_skarbu()
ruch = self.wczytaj_ruch()
if ruch == 'Q':
print('Poddajesz się?')
break
elif ruch in 'WSAD':
self.wykonaj_ruch(ruch)
else:
print('Nieprawidłowe polecenie')
continue
if self.poza_plansza():
print('Wypadłeś z planszy, porażka')
break
odleglosc_po_ruchu = self.odleglosc_do_skarbu()
self.podpowiedz_albo_utrudnij(odleglosc_przed_ruchem, odleglosc_po_ruchu)
print()
else:
# else do pętli wykona się tylko wtedy, gdy pętla zakońćzy się w sposób normalny
print(f'Wygrałeś, brawo! Wykorzystałeś {self.wykonana_liczba_ruchow} ruchów na minimalne {self.odleglosc_na_poczatku}.')
print('papa')
gra = Gra()
gra.graj()
poczatek = int(input('Podaj nr dnia, kiedy buty są oddawane do naprawy: '))
czas_naprawy = int(input('Ile dni będzie trwać naprawa: '))
koniec = poczatek + czas_naprawy
while koniec > 7:
koniec -= 7
print('Buty do odbioru w dzień nr', koniec)
# taka seria if-ów nie pasuje do języka Python. Zob. kolejne wersje
if koniec == 1: print('To jest poniedziałek')
if koniec == 2: print('To jest wtorek')
if koniec == 3: print('To jest środa')
if koniec == 4: print('To jest czwartek')
if koniec == 5: print('To jest piątek')
if koniec == 6: print('To jest sobota')
if koniec == 7: print('To jest niedziela')
poczatek = int(input('Podaj nr dnia, kiedy buty są oddawane do naprawy: '))
czas_naprawy = int(input('Ile dni będzie trwać naprawa: '))
koniec = (poczatek + czas_naprawy) % 7
# wynik mieści się w zakresie 0-6, gdzie 0 oznacza niedzielę
tydzien = ['niedziela', 'poniedziałek', 'wtorek', 'środa', 'czwartek', 'piątek', 'sobota']
print('Buty do odbioru w dzień nr', koniec, 'czyli', tydzien[koniec])
poczatek = int(input('Podaj nr dnia, kiedy buty są oddawane do naprawy: '))
czas_naprawy = int(input('Ile dni będzie trwać naprawa: '))
koniec = (poczatek + czas_naprawy - 1) % 7 + 1
# wynik mieści się w zakresie 1-7, gdzie 1 oznacza poniedziałek, a 7 niedzielę
tydzien = {
1: 'poniedziałek',
2: 'wtorek',
3: 'środa',
4: 'czwartek',
5: 'piątek',
6: 'sobota',
7: 'niedziela',
}
print('Buty do odbioru w dzień nr', koniec, 'czyli', tydzien[koniec])
'''
Napisz program, który odczytuje trzy liczby, sprawdza czy liczby te mogą stanowić boki trójkąta (np. z 2, 2 i 5 nie da się ułożyć trójkąta, prawa?), a jeśli mogą, oblicza pole powierzchni trójkąta o takich bokach.
'''
import math
a = float(input('Podaj długość pierwszego boku: '))
b = float(input('Podaj długość drugiego boku : '))
c = float(input('Podaj długość trzeciego boku : '))
if a + b > c and b + c > a and c + a > b:
p = (a + b + c) / 2
pole = math.sqrt(p * (p - a) * (p - b) * (p - c))
print(f'To jest poprawny trójkąt, a jego pole wynosi {pole}')
else:
print('To nie jest poprawny trójkąt')
'''
Napisz program, który odczytuje trzy liczby, sprawdza czy liczby te mogą stanowić boki trójkąta (np. z 2, 2 i 5 nie da się ułożyć trójkąta, prawa?), a jeśli mogą, oblicza pole powierzchni trójkąta o takich bokach.
'''
boki = []
for i in range(3):
boki.append(float(input(f'Podaj długość boku nr {i+1}: ')))
p = sum(boki) / 2
if max(boki) > p:
print('To nie jest poprawny trójkąt')
else:
iloczyn = p
for x in (p - bok for bok in boki):
iloczyn *= x
pole = iloczyn**0.5
print(f'To jest poprawny trójkąt, a jego pole wynosi {pole}')
from random import randint
ZAKRES = 10
x = randint(1, ZAKRES)
y = randint(1, ZAKRES)
iloczyn = x * y
ile_prob = 0
while True:
ile_prob += 1
propozycja = int(input(f'Ile to jest {x}×{y}? '))
if propozycja == iloczyn:
break
print(f'Brawo, poprawny wynik to {iloczyn}. Udało Ci się w {ile_prob} próbie.')
from random import randint
ZAKRES = 10
x = randint(1, ZAKRES)
y = randint(1, ZAKRES)
iloczyn = x * y
ile_prob = 1
propozycja = int(input(f'Ile to jest {x}×{y}? '))
while propozycja != iloczyn:
ile_prob += 1
propozycja = int(input('Niepoprawny wynik. Spróbuj jeszcze raz: '))
print(f'Brawo, poprawny wynik to {iloczyn}. Udało Ci się w {ile_prob} próbie.')
from random import randrange
ZAKRES = 1000
liczba = randrange(ZAKRES)
ile_prob = 0
while True:
ile_prob += 1
propozycja = int(input(f'Podaj szukaną liczbę: '))
if propozycja < liczba:
print('Za mało. Szukana liczba jest większa.')
elif propozycja > liczba:
print('Za dużo. Szukana liczba jest mniejsza.')
else:
print(f'Brawo! Udało Ci się odgadnąć w {ile_prob} próbie.')
break
from random import randrange
ZAKRES = 1000
liczba = randrange(ZAKRES)
ile_prob = 1
propozycja = int(input(f'Podaj szukaną liczbę: '))
while propozycja != liczba:
ile_prob += 1
if propozycja < liczba:
print('Za mało. Podaj większą liczbę: ', end='')
if propozycja > liczba:
print('Za dużo. Podaj mniejszą liczbę: ', end='')
propozycja = int(input())
print(f'Brawo! Udało Ci się odgadnąć w {ile_prob} próbie.')
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment