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

Python szukanie liczby w liście losowej

VPS Starter Arubacloud
0 głosów
367 wizyt
pytanie zadane 27 grudnia 2022 w Python przez mizerka Nowicjusz (240 p.)
import random 
liczby_losowe=random.randint(1,100)
tablica_losowych=[random.randint(1,51) for x in range(1,100)]
#print(tablica_losowych)
wartownik=int(input("Podaj interesującą Cię liczbę z zakresy od 1 do 50 : "))

 for i in tablica_losowych:
    if tablica_losowych[i]==wartownik:
        print("Znaleziono wartownika",i,"na pozycji",i)    
        
        
    

Cześć mam zrobić programik który szuka zmiennej wartownik w liscie,musi podac na miejsce pierwszego wystąpienia takiej liczby w liście i wypisac pozniej te liczby wszystkie.

Bardzo prosiłbym o sprawdzenie tego rozwiązania poniewaz nie działa,jest to apliacja treningowa bardzo bym prosił o jak najwięcej rad co do tego i innych programów w przyszlosci.       

       

   

 

2 odpowiedzi

+1 głos
odpowiedź 27 grudnia 2022 przez VBService Ekspert (251,210 p.)

Nie wykorzystujesz zmiennej liczby_losowe 

import random 
liczby_losowe=random.randint(1,100)
tablica_losowych=[random.randint(1,51) for x in range(1,100)]
print(tablica_losowych)
wartownik=int(input("Podaj interesującą Cię liczbę z zakresy od 1 do 50 : "))
 
for i in tablica_losowych:
    if tablica_losowych[i]==wartownik:
        print("Znaleziono wartownika",i,"na pozycji",i)    
         
         
    

 

python jest "czuły" na wszelkie spacje, tabulatory, ponieważ: Python Syntax with Examples 

import random 
liczby_losowe=random.randint(1,100)
tablica_losowych=[random.randint(1,51) for x in range(1,100)]
#print(tablica_losowych)
wartownik=int(input("Podaj interesującą Cię liczbę z zakresy od 1 do 50 : "))
 
 for i in tablica_losowych:
    if tablica_losowych[i]==wartownik:
        print("Znaleziono wartownika",i,"na pozycji",i)    
         
         
    

 

ten kod zwraca tylko indeks

...
 
for i in tablica_losowych:
    if tablica_losowych[i]==wartownik:
        print("Znaleziono wartownika",i,"na pozycji",i)

 

Aby zwrócić indeks i wartość elementu w pętli for w języku Python, można użyć funkcji enumerate(). Funkcja ta zwraca obiekt iterator-a, który zawiera indeks i wartość każdego elementu.

for index, value in enumerate(tablica_losowych):
    if tablica_losowych[index] == wartownik:
        print("Znaleziono wartownika", value, "na pozycji", index+1) 

dlaczego  index+1, bo listy indeksowane są od zera.

komentarz 27 grudnia 2022 przez mizerka Nowicjusz (240 p.)
ok sprawdze tą funkcje i będe pamietal takie rozwiązania na przyszlosc
komentarz 27 grudnia 2022 przez mizerka Nowicjusz (240 p.)

-Wypełnianie tablicy i przeszukiwanie jest realizowane w oddzielnych funkcjach / metodach. Funkcja przeszukująca zwraca indeks odnalezionego elementu.

jest to jeden z wymogów do inf 04. Ten sposób o ile rozumiem kwalifikuje się do metody?

chciałem z tego enumarate zrobić funkcje

import random 
def szukanie(x):
    for index, value in enumerate(x):
    if tablica_losowych[index] == wartownik:
        print("Znaleziono wartownika", value, "na pozycji", index+1)
        print(tablica_losowych)

liczby_losowe=random.randint(1,100)
tablica_losowych=[random.randint(1,51) for x in range(1,100)]
#print(tablica_losowych)
wartownik=int(input("Podaj interesującą Cię liczbę z zakresy od 1 do 50 : "))

print(szukanie(tablica_losowych))
    
        

expected a intended block

Nie wiem czy wogóle takie coś miało by prawo działać,był to mój pierwszt pomysł do zamknięcia tego w funkcji.Zrobiłem jakiś błąd czy wogóle takie rozwiązanie do podawania argumentu funkcji nie może miec miejsca?

 

komentarz 27 grudnia 2022 przez VBService Ekspert (251,210 p.)

Brakuje "wcięcia" dla if, które "mówi" python-owi, że jest to kod, który musi się wykonać w pętli

import random 
def szukanie(x):
    for index, value in enumerate(x):
        if tablica_losowych[index] == wartownik:
            print("Znaleziono wartownika", value, "na pozycji", index+1)
            print(tablica_losowych)

w ten sposób

import random 
def szukanie(x):
    for index, value in enumerate(x):

    if tablica_losowych[index] == wartownik:
        print("Znaleziono wartownika", value, "na pozycji", index+1)
        print(tablica_losowych)

kod zawarty w if wykonuje się poza pętlą. A python zgłasza błąd

expected a intended block, bo oczekuje kodu po

for index, value in enumerate(x):

którego nie ma bo if bez "wcięcia" nie jest traktowany jako kod wewnątrz pętli, tylko poza nią.

komentarz 27 grudnia 2022 przez VBService Ekspert (251,210 p.)
edycja 27 grudnia 2022 przez VBService

Jeżeli nie korzystasz z iteratora w pętli możesz go pominąć w tym konkretnym przypadku

tablica_losowych=[random.randint(1,51) for x in range(1,100)]

na

tablica_losowych=[random.randint(1,51) for _ in range(1,100)]

 

 Twoja definicja nic nie zwraca (nie ma return w kodzie)

wystarczy tak się do niej odwołać

szukanie(tablica_losowych)

zamiast

print(szukanie(tablica_losowych))

 

no i przekazujesz do definicji jako argument 

szukanie(tablica_losowych)

więc

def szukanie(x):
    for index, value in enumerate(x):
        if x[index] == wartownik:
            print("Znaleziono wartownika", value, "na pozycji", index+1)
            print(x)

 

Moim zdanie ten ostatni print powinien być poza if-em i pętlą

[ on-line ]

def szukanie(x):
    for index, value in enumerate(x):
        if x[index] == wartownik:
            print("Znaleziono wartownika", value, "na pozycji", index+1)
            
    print(x)

 

0 głosów
odpowiedź 27 grudnia 2022 przez mokrowski Mędrzec (155,460 p.)

Po połączeniu sugestii które już padły, oraz podejścia od strony idiomów języka Python, możesz rozważyć coś takiego:

#!/usr/bin/env python3

import random

def generate_random_list(max_elements = 100):
    return [random.randint(1, 51) for _ in range(1, max_elements)]

def search_value(value, lst):
    return [idx for idx, val in enumerate(lst) if val == value]

def input_value(min_value = 1, max_value = 10):
    value = 0;
    while True:
        try:
            value = int(input(f"Podaj interesującą Cię liczbę z zakresu [{min_value},{max_value}]: "))
        except ValueError as e:
            print("Nieprawidłowa wartość. Spróbuj jeszcze raz.")
        else:
            if min_value <= value <= max_value:
                break
            print("Wartość poza zakresem. Spróbuj jeszcze raz.")
    return value

if __name__ == '__main__':
    value = input_value(1, 50)
    lst = generate_random_list(100)
    print(f"Wartość {value} znajduje się pod indeksami: {search_value(value, lst)}")
    print(f"Przeszukiwana lista to:\n{lst}")

 

Podobne pytania

+1 głos
2 odpowiedzi 661 wizyt
+2 głosów
4 odpowiedzi 429 wizyt
0 głosów
2 odpowiedzi 156 wizyt
pytanie zadane 26 października 2016 w C i C++ przez neWWbie Początkujący (410 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 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!

...