• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Suma stringów

Object Storage Arubacloud
+1 głos
871 wizyt
pytanie zadane 13 listopada 2021 w Python przez magda_19 Gaduła (3,080 p.)

Witam,

Piszę funkcję, która powinna przyjmować string jako argument. Funkcja ma liczyć sumę wszystkich liczb w stringu, ignorując litery. Tak więc dla sum_of_digits("a1w3") powinnam dostać: 

The sum of digits operation performs 1+3

The extracted non-digits are: [’a’, ’w’]

Mój program liczy sumę, ale nie wyswietla tych dwóch zdań.

def sum_of_digits(s):
  l = []
  sum = 0
  for i in s:
    if i.isdigit():
      sum += int(i)
  if s.isalpha() and s.isdigit():
      l.append(s)
      print("The sum of digits operation performs {}". format(l))
      print("The extracted non-digits are: {} ". format(l), end="\n\n")
  print(sum)
     
sum_of_digits("1aw3")  

 

komentarz 13 listopada 2021 przez overcq Pasjonat (21,650 p.)
Ma liczyć sumę liczb czy cyfr?

Co ma policzyć dla tekstu "a12w3"?
komentarz 13 listopada 2021 przez magda_19 Gaduła (3,080 p.)
sumę cyfr oraz wpisać litery do listy i też wypisać. Dla tego przykładu powinnam mieć taki output:

The sum of digits operation performs 1+3

The extracted non-digits are: [’a’, ’w’]

4
komentarz 13 listopada 2021 przez Oscar Nałogowiec (29,290 p.)

@magda_19, Trzeba rozbić ten wejściowy string na dwa - jeden zawierający tylko cyfry i drugi resztę. Wtedy będziesz mogła wygenerować takie wyniki jak zaprezentowane. Nie wiem, czy kolejność pozostaje ważna. Pewnie łatwiej będzie ją zachować.

komentarz 13 listopada 2021 przez magda_19 Gaduła (3,080 p.)
Powinnam więc mieć dwie listy, jedną z liczbami, drugą z literami?
komentarz 13 listopada 2021 przez magda_19 Gaduła (3,080 p.)

@Oscar

Mam teraz tak, prawie dobrze, tylko nie wiem jak mam teraz wydrukować 1+ 4

def sum_of_digits(s):
  letters = []
  numbers = []

  for i in s:
    if i.isalpha():
     letters.append(i)
    elif i.isdigit():
      numbers.append(i)
  print("The extracted non-digits are: {} ". format(letters), end="\n\n")    
  print("The sum of digits operation performs {}". format(numbers))

sum_of_digits("1aw4") 

 

komentarz 13 listopada 2021 przez overcq Pasjonat (21,650 p.)

Jeśli w wyniku ma być:

The sum of di­gi­ts ope­ra­tion pe­r­for­ms 1+3

a nie suma cyfr (tylko lista), to tak.

Jeśli w wyniku miałoby być:

The sum of di­gi­ts ope­ra­tion pe­r­for­ms 4

to nie.

komentarz 13 listopada 2021 przez magda_19 Gaduła (3,080 p.)
Teraz mam to w outpucie:

1The sum of digits operation performs 4

Uzylam print("The sum of digits operation performs ", .join(numbers))

1 odpowiedź

0 głosów
odpowiedź 13 listopada 2021 przez VBService Ekspert (252,740 p.)
wybrane 14 listopada 2021 przez magda_19
 
Najlepsza
def sum_of_digits(s):
  letters = []
  numbers = []
 
  for i in s:
    if i.isalpha():
     letters.append(i)
    elif i.isdigit():
      numbers.append(i)
  print("The extracted non-digits are: {} ". format(letters), end="\n\n")    
  print("The sum of digits operation performs {}". format(numbers))
 
sum_of_digits("1aw4")

 

możesz to wykonać bez "używania" pętli for i 2 list, można użyć filter i map.

 

przykład

[ on-line ]

def sum_of_digits(s):
    only_numbers = "+".join(filter(lambda x: x.isdigit(), s))       
    only_letters = "".join(filter(lambda x: not x.isdigit(), s))
    
    total_numbers = sum(tuple(map(int, only_numbers.split('+'))))
      
    print(f"The extracted non-digits are: {only_letters}", end="\n\n")    
    print(f"The sum of digits operation performs {only_numbers} = {total_numbers}")
 
sum_of_digits("e12aw4")

 

1
komentarz 14 listopada 2021 przez magda_19 Gaduła (3,080 p.)
Dzięki za podpowiedź i nowy kod!

Podobne pytania

+1 głos
1 odpowiedź 2,041 wizyt
+2 głosów
1 odpowiedź 1,505 wizyt
pytanie zadane 19 października 2021 w Python przez magda_19 Gaduła (3,080 p.)
0 głosów
1 odpowiedź 212 wizyt
pytanie zadane 5 marca 2021 w Python przez TeaCup Obywatel (1,370 p.)

92,555 zapytań

141,400 odpowiedzi

319,537 komentarzy

61,938 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...