Python 6.00.1x MiTx

0

Cześć, wczoraj miałem pytanie cd. zadania z wielokątem, dziś coś dla mnie cięższego, liczę na Waszą pomoc i wskazówki, dodaje że się uczę na własną rękę i nie wszytko wychodzi :) także oto treść zadania:

6441178055761254300911.jpg

Do tej pory napisałem coś co nie mam sensu, ale wiem że nie mam póki co wiedzy w jaki sposób ugryźć to inaczej, nadrabiam ten kurs książką jeszcze, ale łapcie :

rder = str(raw_input("Your order please: "))
salad = 'salad'
hamburger = 'hamburger'
water = 'water'

def item_order(order):

count_salad = 0
count_hamb = 0
count_water = 0

if salad in order:
    count_salad = salad
    return count_salad

if hamburger in order:
    count_hamb = + 1
    return count_hamb

if water in water:
    count_water = +1
    return count_water
print "salad:", count_salad , "hamburger:", count_hamb, "water:", count_water

Tak wiem, nie działa, nie powinno działać, bo nie ma sensu, ale pracuje nad tym, grunt to sie nie poddawać :)

1

Mały tip:

  1. raw_input w pythonie 2 z zasady jest str, więc konwersja zbędna,
  2. przy zastosowaniu listy (array) oraz w budowanych w język metod kod zajmie kilka linijek.
1

A jeśli nie możesz użyć listy oraz metody count:

if salad in order:
count_salad = salad
return count_salad

wywal ten return, wartość count_salad zwiększ o 1, a samo salad umieść w cudzysłowie itd.

ps. przy zwiększaniu +zwykle umieszcza się przed znakiem = , zmienna += wartość_o_jaką_zmieniamy.

0

Obawiam się, że listy i count wykraczając poza moją wiedzę, póki co i wolałbym to zrobić 'na chłopski rozum'

order = raw_input("Your order please: ")
def item_order(order):
count_salad = 0
count_hamb = 0
count_water = 0

if 'salad' in order:
    count_salad +=1


if 'hamburger' in order:
    count_hamb += 1


if 'water' in order:
    count_water += 1

print "salad:", count_salad , "hamburger:", count_hamb, "water:", count_water

Posłuchałem rady, czegoś nadal mi brakuje

1

Listy nie są takie złe.
Bez używania count:

  1. Podziel zamówienie (order) za pomocą metody split().
  2. Zastosuj pętlę:
    for coś_tam in podzielone_zamówienie:
    if coś_tam jest równe 'któryś_z_szukanych_posiłków':
    liczba posiłku jest zwiększana o 1

No i nie zapomnij o wywołaniu funkcji na koniec.

0

Dzięki Ci!

order = raw_input("give me ur order: ")
order2 = order.split()
salad = 0
water = 0
hamburger = 0

for count_salad in order2:
if count_salad == 'salad':
salad += 1

for count_water in order2:
if count_water == 'water':
water += 1

for count_hamburger in order2:
if count_hamburger == 'hamburger':
hamburger += 1

print "salad:", salad, "hamburger:", hamburger, "water:", water

0

Dobra, program działa, jestem szczęśliwy. Również jestem generalnie głupi, bo na edX w teście programu wyskakuje error bo nie użyłem 'def', a kiedy dodam na początku 'def item_order(order)' funkcja nie pobiera niczego i jest ogólnie kupa.

1

A po co robisz trzy pętle jak wystarczy jedna?
for i in order2:
#btw. ten order2 możesz wywalić i napisać for i in order.split()
if i == 'salad':
salad += 1
itd. pozostałe dwa ify

definicję dodaj po deklaracji zmiennej order, a nie przed.

order = ...
def def item_order(order):
ciało funkcji

0

Jeszcze jedno - argumenty funkcji mają być pobierane przez raw_input, czy wpisywane przy uruchamianiu funkcji? Bo o to też może sprawdzarka się burzyć.

order = raw_input():
def item_oder(order):
ciało funkcji

item_order(order)

def item_oder(order):
ciało funkcji (bez input)

item_order('salad water').

0

Okej, dzięki po raz kolejny :) Dzięki Twojej pomocy mój program staje się coraz mniej upośledzony :)

0

Mają być pobierane przez raw_input

a teraz dla odmiany wyskakuje:
Traceback (most recent call last):
File "submission.py", line 2, in <module>
order = raw_input("give me ur order: ")
EOFError: EOF when reading a line

A generalnie program działa tak jak powinien

0

A mógłbyś wrzucić kod?

0

order = raw_input("give me ur order: ")

def item_order(order):
salad = 0
water = 0
hamburger = 0

for i in order.split():
    if i == 'salad':
        salad += 1
    if i == 'hamburger':
        hamburger += 1
    if i == 'water':
        water += 1

    print "salad:", salad, "hamburger:", hamburger, "water:", water

item_order(order)

1

Po przepuszczeniu kodu przez interpreter (zarówno online jak i stacjonarny) funkcja wykonuje się prawidłowo.
Jedyne co mi przychodzi teraz na myśl to wygooglowanie samego błędu.

0

Dzięki za pomoc, pewnie z biegiem kursu będę miał więcej problemów, które tu wrzucę :))

0

Moim zdaniem słabe podejście, tu aż się prosi użyć słownika (dict)

2

Takie proste rozwiązanie:


def count_item(order):
    # stworz sobie dictionary, w ktorym trzymasz liczniki dla poszczegolnych przedmiotow
    products = {
        "hamburger": 0,
        "salad": 0,
        "water": 0
    }

    result = ""
    # uzupelniasz slownik poprawnymi wartosciami 
    for element in products.keys():
        products[element] = order.count(element)
        result += "{}: {} ".format(element, products[element])

    print(result)

    
count_item("salad salad hamburger")
# water:0 salad: 2 hamburger: 0

Jeżeli chcesz mieć ustaloną kolejność elementów to warto pomyśleć o OrderedDict zamiast o zwykłym słowniku.

1 użytkowników online, w tym zalogowanych: 0, gości: 1