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: PyStok #39, 20 marca 18:00, Białystok: AI w diagnostyce obrazowej i metaklasy
Szukaj Szukaj
Strony: [1]   Do dołu
Drukuj
Wątek: [Problem] Sterowanie pętlą przy pomocy klawiszy na klawiaturze  (Przeczytany 155 razy)
« : 17:02 13/04/19 »
xPawlo Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 5


Witam!

Mam problem z moim kodem, który ma za zadanie po kliknięciu klawisza "o" na klawiaturze uruchomić pętlę while, a po naciśnięciu klawisza "p" zatrzymać ją. Program poprawnie działa, lecz ostatnia pętla while, która powinna działać, gdy zmienna on == 1, nie włącza się.

Będę wdzięczny za wszelkie odpowiedzi Mrugnięcie

Kod
import keyboard
 
on = 0
 
def switch():
   global on
   if keyboard.is_pressed('o'):
       on = 1
   elif keyboard.is_pressed('p'):
       on = 0
 
while True:
   switch()
   print(on)
 
while on == 1:
   print('test') #ta petla nie aktywuje sie
 
Zapisane
« Odpowiedz #1 : 15:20 17/04/19 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 64
Płeć: Mężczyzna
Wiadomości: 467


Bo twoja pętla `while True:` nigdy się nie skończy, nie ma dla niej żadnego break'a. Ona sobie w nieskończoność będzie skakać po wartościach 1 i 0.
Jak chcesz aby drugi while się wykonywał podczas drugiego, to musisz go zagnieździć, innej opcji nie ma Uśmiech.
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
« Odpowiedz #2 : 15:27 17/04/19 »
xPawlo Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 5


A mógłbyś trochę wytłumaczyć jak powinienem to zrobić? Dopiero zaczynam się tym bawić i nie bardzo wiem gdzie umieścić tego breaka  Język
Zapisane
« Odpowiedz #3 : 15:34 17/04/19 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 64
Płeć: Mężczyzna
Wiadomości: 467


Kod
while True:
   switch()
   print(on)
 
   while on == 1:
       print('test') #ta petla nie aktywuje sie
 
To jest zagnieżdżenie.
A jak zrobić break? Piszesz go po prostu, nie wiem w jakiej konkretnie sytuacji oczekujesz przerwania pętli, więc nie mogę ci powiedzieć gdzie trzeba napisać aby była przerwana, wszystko zależy od twojego widzimisię Uśmiech. To programowanie, więc jest to twoja decyzja.


@Edit: Przykładowe użycie break
Kod
i = 0
while True:
   i+= 1
   if i > 100:
       break #~ Przerywamy pętle gdy i będzie większe od 100.
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
« Odpowiedz #4 : 15:47 17/04/19 »
xPawlo Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 5


To mniej więcej rozumiem, bardziej mi chodzi o to czy jest jakiś lepszy sposób na włączanie i wyłączanie pętli za pomocą przycisków na klawiaturze, bo nie wiem kiedy zatrzymać pętlę 'while True', aby następna się aktywowała i wyłączała.
Zapisane
« Odpowiedz #5 : 16:33 17/04/19 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 64
Płeć: Mężczyzna
Wiadomości: 467


To podejdźmy od innej strony, zapomnij o kodzie.

Co chcesz uzyskać tym programem? Bo to jest kluczowe pytanie
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
« Odpowiedz #6 : 18:30 17/04/19 »
xPawlo Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 5


No więc zrobiłem już pewien skrypt i on działa w pętli. Więc chciałem tą pętlę uruchamiać za pomocą jakiegoś przycisku na klawiaturze i wyłączać ją za pomocą innego, tzn. po naciśnięciu np. klawisza F3 pętla (a w niej skrypt) uruchamia się, a po naciśnięciu F4 - zatrzymuje się.

Czyli :

Jeśli nacisnę przycisk F3 - Pętla z moim skryptem uruchamia się
Jeśli nacisnę przycisk F4 - Pętla zatrzymuje się

i tak w kółko... Mrugnięcie
Zapisane
« Odpowiedz #7 : 22:50 17/04/19 »
Guaz Offline
Professional Python User

Zobacz profil
***

Reputacja: 64
Płeć: Mężczyzna
Wiadomości: 467


Spoko, to break ci jest niepotrzebny, bo twój program ma działać i oczekiwać na uruchomienie po zatrzymaniu, tak?

Więc jeśli dobrze rozumiem:
Kod
while True:
   switch()
   if on: #~Krótsza wersja od on == 1. Wszystkie liczby różne od zera, będą prawdą.
      print("Tu wykonaj swoje instrukcje w pętli")

Po prostu dwie pętle nie są ci potrzebne, a jakbyś bardzo usilnie chciał robić dwie pętle (co jest nieco bez sensu teraz, ale przy programowaniu asynchronicznym mogłoby mieć ;>).
Kod
while True:
   switch()
   while on:
      switch()
      print("Tu wykonaj swoje instrukcje w pętli")
Zapisane

Python 3.5+ / Mint

Daje wędkę zamiast ryby. Chyba że ktoś się chce czegoś nauczyć, wtedy chętnie pomogę każdemu.
Za rybę niestety trzeba zapłacić Z politowaniem.
« Odpowiedz #8 : 10:13 18/04/19 »
xPawlo Offline
Hello World!

Zobacz profil
*

Reputacja: 0
Wiadomości: 5


Wszystko działa! Wielkie dzięki za pomoc  Chichot
Zapisane
Strony: [1]   Do góry
Drukuj
Skocz do:  

© 2007 - 2019 Polish Python Coders Group
Powered by SMF 1.1.21 | SMF © 2006-2009, Simple Machines | Theme by PixelSlot