grucha_88
grucha_88
#programowanie #python #podstawypodstawprogramowania #informatyka

Proszę napisać program, w którym znajdzie się lista, wypełniona liczbami z losowymi z przedziału 0 do 10000, i który >wyświetli liczbę liczb trzycyfrowych w liście. Lista ta powinna być generowana w funkcji. Jej rozmiar powinien wynosić 100.

wszystko jasne, ale jak zrobić to liczenie liczb 3 cyfrowych? Ktoś ma jakiś pomysł?
  • Najlepsze
  • Wszystkie komentarze
b3rly
b3rly
b3rly
4
@grucha_88 a jak python to tak :)

j = [4, 25, 6, 7, 10, 3, 7, 5]
number = sum(i > 5 and i<20 for i in j)
3denos
@b3rly: W sumie spoko, ale trzeba umieć się wytłumaczyć z faktu, że suma na booleanach daje Ci wartość liczbową (bool jako subklasa inta). Druga sprawa, jeśli już piszemy w Pythonie, to sum(5 < i < 20 for i in j) (działa chyba zarówno w 2.7 jak i 3).

A propos liczb losowych, tak mi się przypomniało:
b3rly
b3rly
b3rly
2
@grucha_88 pierwsza 3 cyfrowa to 100 a ostatnia 999( ͡~ ͜ʖ ͡°)
b3rly
b3rly
b3rly
2
przejdz po liscie i daj warunek:

int getnumberof3digits(array list10k) {
int number =0
for(int i=0, i<10000; i++) {
if(list10k[i]
b3rly
b3rly
b3rly
2
@MrGordon losowymi danymi tablice ma wypelniona
3denos
@daczka92: Po pierwsze, gdzie Ty tam chcesz wcisnąć regex? Po drugie, konwersja do stringa i sprawdzanie długości jest wolniejsze (nie żeby sam Python był demonem prędkości, ale nie uczmy złych nawyków).
Budek24
@3denos: Pamięć jest po to by ją wykorzystywać i nie ma kompletnie sensu optymalizować kodu wtedy gdy tego nie potrzebujesz.
M.....n
M.....n
@grucha_88: Przeinteruj po liście z zakresu 100:999 i wyświetl wynik. Napisz to rzecz jasna w osobnej funkcji.
M.....n
M.....n
@b3rly: To jest python. Rozpisz mu to w pętli foreach bo to mniej więcej robi for w pythonie.
@grucha_88: Ja bym tak zrobił.
daczka92
@grucha_88 regex, kazda do stringa i sprawdzic czy ma 3 znaki
Budek24
@grucha_88:

import random
from collections import Counter
rlist = random.sample(range(10000), 100)
counters = Counter(map(lambda x: len(str(x)), rlist))
print(counters.get(3, 0))
Budek24
W sumie tutaj nie ma potrzeby skorzystania w funkcji map. wystarczy list comprehension

counters = Counter([len(str(number)) for number in rlist])
grucha_88
grucha_88
grucha_88 Autor
0
@b3rly: ehhhhh xD ale jak to zrobić, nie śpie już 23h i słabo mi idzie myślenie xD
grucha_88
grucha_88
grucha_88 Autor
0
@MrGordon: for i in range(len(slynna_lista)): cos takiego?
grucha_88
grucha_88
grucha_88 Autor
0
@Budek24: c00mplu jesteś mistrzem w pytonowaniu plusik ʕ•ᴥ•ʔ
3denos
@Budek24: W zasadzie to nie wiem czy istnieje w ogóle przypadek gdzie nie da się użyć list comprehension zamiast map. Jakiś pomysł? :)

Btw. rozwiązanie dosyć czytelne i generalnie fajnie jest korzystać z biblioteki standardowej, ale:

- len(str(x)) - patrz odpowiedź wyżej,
- counters alokuje Ci pamięć na ilość liczebność KAŻDEJ długości liczb, baaaardzo nieładna praktyka bo w ogóle tego
3denos
@Budek24: W praktyce masz racje ("premature optimization is the root of all evil" + współczne maszyny naprawdę dużo zniosą + idea wytwarzania kodu już nie jest ta sama co 20 lat temu), jednak mam mieszane uczucia co do takich stwierdzeń gdy ktoś uczy się programowania.Choć możesz mieć rację, bo przynajmniej nie nauczy się niepotrzebnie optymalizować. Who knows. ;)