Strona główna Polish Python Coders Group
  Strona główna Pomoc Zaloguj się Rejestracja  
Witamy, Gość. Zaloguj się lub zarejestruj.
Czy dotarł do Ciebie email aktywacyjny?

Zaloguj się podając nazwę użytkownika, hasło i długość sesji

Aktualności: PyData Warsaw 2017, 19-20 października - konferencja Data Science
Szukaj Szukaj
  Pokaż wiadomości
Strony: [1] 2 3 ... 132
1  Wszystko o języku Python / Python od podstaw / Odp: jak zapisac do pliku liczby random : 02:03 09/08/16
Kod:
Dla małej ilości liczb można stworzyć liste wszystkich liczb

[code=python]numbers = range(1, 51)

Potem można ją "przetasować/przemieszać"

Kod
random.shuffle(numbers)

I już mamy listę z losowo poukładanymi liczbami.
Wystarczy teraz wybrać dowolne 5 liczb (choćby te na początku)
i na pewno nie będą się one powtarzać

Kod
draw = numbers[:5]

Powyższa wersja nie wymaga pętli Uśmiech

ps. `shuffle` nie zwraca nowej listy tylko modyfikuje pierwotną list
inaczje mówiąc modyfikuje "w miejscu" (ang. in-place)

Przy stu losowaniach wystarczy dodać pętle `for`
Kod
import random
 
numbers = range(1, 51)
 
for x in range(100):
    random.shuffle(numbers)
    print(numbers[:5])

---

Dla większej liczby przed dodaniem listy do `draw`
trzeba sprawdzić czy już takiej tam nie ma
i ewentualnie powtórzyć losowanie.
Taka wersja może wymagać dwóch pętli.
Mogą to być `while True` ale nie koniecznie

Kod
import random
 
draw = []
 
while len(draw) < 5:
 
   while True:
       number = random.randint(1, 50)
 
       if number not in draw:
           draw.append(number)
           break  
 
print(draw)

dla stu losowań można to umieścic w pętli `for`

Kod
import random
 
all_draws = []
 
for x in range(100):
 
   draw = []
 
   while len(draw) < 5:
 
       while True:
           number = random.randint(1, 50)
 
           if number not in draw:
               draw.append(number)
               break  
 
   print(draw)
 
   all_draws.append(draw)

---

Chodzi Ci chyba o zapisanie w plik u liczb a nie skryptu.

Masz do tego funkcje `open`, `write`, `close`.
Przy zapisywaniu do pliku należy liczby zamienić na tekst
Można użyć `join` aby połączyć w jeden tekst pięć liczb oddzielonych spacją lub przecinkiem.
`write` nie dodaje przejścia do nowej linii więc przy zapisie kilku linii trzeba samemu dodawć "\n"

Do odczytu potrzeba `open`, `read/readline/readlines`, `close`.
Odczytane linie trzeba podzielić na liczby za pomocą `split`
a następnie `string` zamieniać na liczby `int`

W sumie takie dane będą przypominać plik CSV więc można by wykorzystać modul `csv`.
Można też wykorzystać moduł `json` aby zapisać w formacie JSON i wtedy powinien
sam zamieniać liczby na tekst i tekst na liczby.

---
PS. przy edycji tekstu można użyć przycisk ze znakiem # aby kawałek tekstu oznaczyć jako kod Pythona
przez co będzie kolorowany i lepiej czytelny.[/code]
2  Wszystko o języku Python / Konferencje, szkolenia i warsztaty / Odp: [Darowny kurs] Introduction to Computer Science and Programming Using Python : 21:58 14/06/16
Tydzień temu (7 czerwca 2016) ponownie ruszył ten kurs.

Introduction to Computer Science and Programming Using Python
3  Wszystko o języku Python / Python od podstaw / Odp: Zapisywanie zawartości listy do pliku : 13:52 20/02/16
`replace` nie robi zmian "w miejscu" (ang. in-place)
tylko zwraca zmieniony tekst pozostawiajac oryginal nienaruszony

Trzeba wiec wynik przypisac do zmiennej - w Twoim przypadku moze to byc ta sama zmienna

Kod
for zmiana in zamiany:
   dane = dane.replace(zmiana, zamiany[zmiana])

---

Aby kod by bardziej czytelny mozna wykorzystac metode items()

Kod
for stary, nowy in zamiany.items():
   dane = dane.replace(stary, nowy)

---

ps. trzeba pamietac, ze slownik nie ma obowiazku zachowywac kolejnosci
wiec raz moze zamienic najpierw 'U001' a potem 'WE01.01'
a innym razem najpierw 'WE01.01'  a potem 'U001'
Jesli kolejnosc ma znaczenie to lepiej stworzyc liste

Kod
zamiany = [
 [ 'U001', result[0][0] ],
 [ 'WE01.01', result[0][1] ],
]
 
for stare, nowe in zamiany: # bez `items()`
   dane = dane.replace(stare, nowe)

lub skorzystac ze slownika colections.OrderedDict
ktory zachowuje kolejnosc wstawianych tam elementow

https://docs.python.org/2/library/collections.html#collections.OrderedDict
4  Wszystko o języku Python / Python od podstaw / Odp: Konwertowanie ascii/unicode - jak ? : 16:27 16/02/16
Cytuj
Hehehe no to odkrywcze .... ale problemu nie rozwiązuje,

Odpowiedz jest stosowna do ilosci informacji jakie podales Uśmiech

Nie podales w jakiej systuacji blad sie pojawia
a to moze miec duzy wplyw na rodzaj rozwiazania.

W takiej sytuacji mozna jedynie ogolnie powiedziec,
ze musisz recznie uzyc encode() i zamienic UNICODE
na potrzebne Ci kodowanie - UTF-8, CP1250, ISO-8859-2, itp.

Jesli mowisz o stronie WWW to serwer powinnine wysylac
informacje, ze strona jest np. UTF-8 i wtedy przegladarka powinna
wprowadzone dane odsylac wlasnie w tym kodowaniu
a potem Framework moze sobie to konwertowac na UNICODE
i Tobie juz zostawic decyzje w jakim kodowaniu chcesz to
zapisac do pliku/bazy lub wypisac na konsoli.

Jesli Python/Framework nie wie jakie potrzebujesz kodowanie
to uzyje standardowo ASCII.
5  Wszystko o języku Python / Python od podstaw / Odp: Wycinanie fragmentów stringu : 23:02 13/02/16
Teraz kod wygląda nieźle - szkoda, że nie ma kolorowania kodu
bo łatwiej byłoby to ocenić.

Podobnie gdybyś stosował zamianę tabulatora na cztery spacje
przed wrzuceniem na forum to by nie robiło takich dużych wcięć.

---

To ustawienie wartości na wypadek jest często ptrzebne
ale w obecnje postaci już widać, że tu nie jest potrzebne Uśmiech
6  Wszystko o języku Python / Python od podstaw / Odp: Kolejne zadanie - Obżartuchy : 22:49 13/02/16
Mnie sie nie podoba dzielenie bo daje ci ułamki
a powiedziane jest, że obżartuch nie zaczyna ciastka
jeśli nie zdążygo dokończyć.
Możesz wię mieć potem sumę 1.5+1.5 = 3 a powinno być 1+1=2

---

To co wspomniał już sig to dziwna linia
Kod
 
suma = ciastko[0]

która kasuje Ci poprzednią sumę.
Przed `for` powinno być `suma = 0`

Nie widzę też powodu zapamiętywania danych na liście
skoro zaraz ją dodajesz do sumy
a nigdzie potem już ta lista nie jest Ci potrzebna

Swoją drogą tutaj zamiast `insert(i, ...)` mogło być `append(...)`
ale i tak lista `tab` i `ciastka` nie jest Ci potrzebna.

---

Zamiast `range(0,n,1)` możesz napisać `range(n)`

---

Zamiast trzech linii

Kod
k=0
while k<t:
  k+=1

wystarczy jedna linia

Kod
for _ in range(t):

---

Wartość DOBA można raz zadeklarować jeszcze przed `while`
7  Pozostałe / Offtopic / Odp: Dokumentacja w Pydoc : 03:02 12/02/16
Nie korzystałem z `pydoc` ale najpierw musisz mieć w kodzie
komentarze `docstring` (najlepiej ze specjalnymi znacznikami np. :param)
a potem chyba zostaje użyć w konsoli/terminalu/cmd.exe

Kod
pydoc -w docelowy_plik_html twoj_skrypt.py
8  Wszystko o języku Python / Python od podstaw / Odp: Wycinanie fragmentów stringu : 02:49 12/02/16
W `if` oraz w `else` masz kilka takich samych linii
więc można by je wyciągnąć przed `if` aby się nie powtarzały.

Jednocześnie niepotrzebne są linie

Kod
		number =''
streetname = ''

bo nie ma potrzeby nadawać zmiennym pustej wartości
jeśli na pewno potem zastąpisz ją inną wartością.

Byłoby to przydatne jako "wartość domyślna"
gdybyś w `if` nadpisywał zmienne a w `else` już nie (lub na odwrót),
a po wyjściu z `if/else` chciał pobierać z nich wartości.

---

Oznaczony kod w wypowiedzi jakoś nie koloruje Ci się
(może brak w oznaczeniu w jakim języku jest kod [ code=python ])
więc trudno wyłapać czy zmienna `x` jest potrzebna.

---

Zamiast `name.join` użyłbym `" ".join` aby było czytelniejsze.
Zdaje się, że i tak nie zamierzasz nic innego podstawiać w `name`.

---

W poniższym nie są potrzebne zewnętrzne nawiasy

Kod
code = ( "%s %s" % (pcode[:-3].strip(), pcode[-3:]) )

czyli może być

Kod
code = "%s %s" % (pcode[:-3].strip(), pcode[-3:])

Używam Python3 więc w przykładzie to były nawiasy wymagane przez `print()`

---

`strip(" ")` usuwa tylko spacje a `strip()` usuwa spacje, tabulatory i entery czyli tak zwane "białe znaki".
Usuwanie tabulatorów może być przydatne bo ktoś może wpisać tabulator zamiast spacji.
9  Wszystko o języku Python / Python od podstaw / Odp: Wycinanie fragmentów stringu : 17:10 11/02/16
A może najpierw obciąć 3 ostatnie znaki
i potem resztę oczyścić ze skrajnych spacji za pomocą `strip()`

Przy wypisywaniu dodałem | aby było widać, że nie ma tam spacji.

Kod
dane = [
   'M1 1AA',
   'M60 1NW',
   'CR2 6XH',
   'DN55 1PT',
   'W1A 1HQ',
   'EC1A 1BB',
   'AA11AA',
]
 
for x in dane:
   print( "|%s|%s|" % (x[:-3].strip(), x[-3:]) )
 
'''
|M1|1AA|
|M60|1NW|
|CR2|6XH|
|DN55|1PT|
|W1A|1HQ|
|EC1A|1BB|
|AA1|1AA|
'
''
10  Wszystko o języku Python / Aplikacje i usługi internetowe / Odp: FTP : 14:44 11/02/16
Wystarczyło zajrzeć do dokumentacji Uśmiech

Brakuje poprawnej komendy `STOR`

Kod
ftp.storbinary('STOR nazwa_pliku', f)
11  Wszystko o języku Python / Wasza twórczość / Odp: pyserial : 13:12 11/02/16
Znalazłem taki wątek gdzie wspomniany jest `/dev/ttyMCC`
i jeśli to jest to samo urządzenie to problem może być po ich stronie
i nie mieć nic wspólnego z Pythonem

https://github.com/UDOOboard/linux_kernel/issues/14
12  Wszystko o języku Python / Aplikacje i usługi internetowe / Odp: FTP : 12:49 11/02/16
Ja tu widzę dwa programy

- pierwszy tylko do wysyłania zadanych plików i podpięty do cron
aby wysyłać co ustaloną ilość minut lub o ustalonej godzinie
lub wstawiony w `.bash_logout` aby wysłać przed wylogowaniem z Linux.
Do wysyłania przed zamknięciem systemu to chyba trzeba by wykorzystać
pliki `/etc/rc[0-6].d`

- drugi z GUI tylko do wybierania plików i innych opcji
aby potem wykorzystać je w pierwszym programie.

---

Gdyby program miał działać tylko jak zwykły klient FTP
to chyba wolałbym zainstalować FileZille

---

Ale jak na razie zostaje wciąż problem z `Syntax error, command unrecognized` dla `storlines` Uśmiech
13  Wszystko o języku Python / Wasza twórczość / Odp: PySerial, "write(...)". : 12:40 11/02/16
@jell - faktycznie nie zauważyłem, że tam `K_DOWN` i `K_RIGHT` się powtarzają Uśmiech
14  Wszystko o języku Python / Python Web Frameworks / Odp: web2py i MySQL : 12:36 11/02/16
Baza musi być gdzieś zapisana .

Według dokumentacji jeśli użyjesz

Kod
db = DAL('sqlite://storage.db')

to wtedy `db.define_table` będzie korzystać z SQLite i zapisywać w pliku `storage.db`

ale jeśli użyjesz

Kod
db = DAL('mysql://username:password@localhost/test')

to wtedy `db.define_table` będzie korzystać z lokalnego serwera MySQL
i zapisywać w bazie o nazwie `test`


Tak więc wystarczy tylko zmienić `db` aby korzystać z innej bazy.


Można nawet korzystać z dwóch baz

Kod
db_sqlite = DAL('sqlite://storage.db')
 
db_mysql = DAL('mysql://username:password@localhost/test')
 
 
db_sqlite.define_table(...)
db_mysql.define_table(...)

I to bym wykorzystał do przerzucenia wszystkiego z obecnej bazy do MySQL
aby potem korzystać tylko z jednej a nie kombinować z dwoma.
15  Wszystko o języku Python / Python od podstaw / Odp: Domyślny argument funkcji : 12:02 11/02/16
Możesz zadeklarować w poniższy sposób
ale port trzeba podać z użyciem nazwy `port=` na końcu argumentów

Kod
def func1(*args, **kwarg):
 
   port = kwarg.get('port', 15000)
 
   print 'port:', port
   print 'args:', args
   print '----------------'
 
func1("Ala", "ma", "kota")
func1("Ala", "ma", "kota", port=8000)
 
'''
port: 15000
args: ('
Ala', 'ma', 'kota')
----------------
port: 8000
args: ('
Ala', 'ma', 'kota')
----------------
'
''
 

Strony: [1] 2 3 ... 132
© 2007 - 2017 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot