Liczba w której nie powtarzają się cyfry

Liczba w której nie powtarzają się cyfry
Florian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0

Cześć,
tak jak w temacie: chcę stworzyć liczbę składającą się z określonej ilości cyfr w której żadna się nie powtarza.
Mam taki kod:

Kopiuj
 import random

def losowanie(n):
    lista = [0, range(n)]
    liczba = ""
    for i in range(n):
        k = random.choice(lista)
        lista.remove(k)
        liczba += str(k)
    print liczba

losowanie(10)

Wywala mi taki błąd:

AttributeError: 'builtin_function_or_method' object has no attribute 'choice'
Nie mam pojęcia a co chodzi. Może ktoś pomóc?

zamiana znacznika <quote> na <code> - @furious programming

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Jaka jest idea tej instrukcji?

Kopiuj
lista = [0, range(n)]

Na pewno nie tworzy ona 10-elementowej listy liczb jednocyfrowych. Zamień na

Kopiuj
lista = range(n)
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
2
  1. tworzysz listę "0123456789"
  2. mieszasz ją
  3. pobierasz pierwsze N - elementów
Florian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0

Hmmm o czymś takim nie pomyślałem. A jest jakiś specjalny sposób na mieszanie list? Bo jeśli będę losował po kolei indeksy listy pierwszej i zapisywał liczby które kryją się pod tymi indeksami do listy drugiej to będzie to prawie to samo co próbuję zrobić w kodzie powyżej.

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

Metoda shuffle w module random.

Florian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0

Aha ok, w poleceniu mam "bez użycia funkcji shuffle z moduły random" :D

Shalom
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Space: the final frontier
  • Postów: 26433
0

I uznałeś że nie warto o tym wspomnieć na początku tego tematu? o_O

Florian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0

No w sumie tak;D myślałem że ktoś odniesie się raczej do moje kodu :)

bogdans
  • Rejestracja: dni
  • Ostatnio: dni
0

A funkcję sample z tego modułu możesz użyć?

Florian
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 106
0
bogdans napisał(a):

A funkcję sample z tego modułu możesz użyć?

Tak, nie jest napisane że nie można z niej korzystać:)

Dobra poradziłem sobie w ten sposób:

Kopiuj
 from random import *

def randperm(n):
    lista = range(n)
    liczba = []
    for i in range(n):
        while (True):
            a = randrange(0, n)
            if a in lista:
                liczba.append(str(a))
                lista.remove(a)
                break
    print liczba
_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

zamiast:

Kopiuj
while (True):
            a = randrange(0, n)
                        if a in lista:

wylosuj pos w zakresie 0..aktualny_rozmiar_listy-1]
ustaw a jako element listy o numerze pos

Wizzie
  • Rejestracja: dni
  • Ostatnio: dni
0
Kopiuj
from random import sample
def randperm(n):
    return sample(range(10), n)

robienie import * to zla praktyka.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.