Я довольно новичок в программировании на Python, и я сделал простой скрипт, и я хочу добавить функцию, которая проверяет в фоновом режиме ввод с клавиатуры (в моем случае, когда вы нажимаете «r»), и когда его нажимаютон перезапускает программу или просто переходит в функцию main () (запускает программу заново с самого начала).это все, но я просто не могу понять это, поэтому я попробовал три вещи:
1. (Threading): поэтому он создает два потока, один - программа, а другой -проверка ввода с клавиатуры, но это работает странно, а также не работает в моем случае.
2. (многопроцессорная обработка): я также пытался использовать модуль многопроцессорной обработки, но я не понял этого.
3. (фоновый поток): и я также попробовал код фонового потока: (ссылка: http://sebastiandahlgren.se/2014/06/27/running-a-method-as-a-background-thread-in-python/), и в self.run сделал обнаружение клавиатуры для «r», но он также не работал
import threading
import keyboard
import time
from multiprocessing import Process
import os
from threading import Thread
print ("grab piece of paper to write down bmi")
print ("you can restart at any time by pressing (r)")
time.sleep(1)
def main():
running = True
while running:
global height
height= input("enter height (cm): ")
# here the code sometimes shows in python shell,
# just like it stopped, ended (it print out that: >> ),
# but it still continiues normally
try:
val = int(height)
while True:
global weight
weight = input("enter weight: ")
try:
val = int(weight)
if True:
global name
name = input("enter name: ")
print (" double check your inputs for the bmi")
print (" when you are sure it is correct press c")
print (" and if it's not press b")
import keyboard
a = 1
while a == 1:
if keyboard.is_pressed("c"):
main2()
elif keyboard.is_pressed("b"):
main()
else:
continue
except ValueError:
if True:
print(" this is not a number (int)")
print(" please enter a number")
continue
except ValueError:
if True:
print(" this is not a number")
print(" please enter a number")
continue
def main2():
result = (int(weight)) / ((int(height)) / 100)**2
print ("name: {}".format(name))
print ("bmi: {}".format(result))
print ("this person is:")
if (result) <= 18.5: print(" underweight")
elif (result) > 18.5 and (result) <= 25: print(" healthy")
elif (result) > 25 and (result) <= 30: print(" overweight")
elif (result) > 30 and (result) <= 35: print(" obese")
elif (result) > 35: print(" you are fat guy!")
print("after you write bmi press k to stop and quit the program ")
import keyboard
a = 1
while a == 1:
if keyboard.is_pressed("k"):
import sys
sys.exit(0)
else:
continue
def keyboard_detect():
while True:
if keyboard.is_pressed("r"):
main()
th1 = Thread(target=main)
th2 = Thread(target=keyboard_detect)
th1.start()
th2.start()
извините за вставку всего кода, но дело в том, что когда я попробовал более простые коды, которые работают, но с этим кодом он не хочет работать, программа иногда работает странно, но когда я нажимаю "r", ничего не происходит, он даже не отображает сообщение об ошибке, и, кстати, я использую Python 3.7.2 и в коде примера может быть проблема с использованием 4 пробелов и табуляции (если вы получаете ошибку: неожиданный eol во время синтаксического анализа)
такя все еще в туалетекороль для решения.если вы найдете решение, спасибо ** (в квадрате в Python :)), но в любом случае спасибо