Saya menulis program python yang menghasilkan string matematika acak, seperti "2+3**4/3" dan "3**3**50-2", dan kemudian menggunakan eval() untuk menghitungnya.

Menghitung "2+3**4/3" akan berfungsi dengan baik, tetapi mengevaluasi "3**3**50-2" akan memakan waktu terlalu lama karena jumlahnya akan sangat besar. Saya perlu memeriksa apakah daya akan terlalu besar untuk dihitung sebelum mencoba, atau saya perlu menghentikan fungsi setelah jangka waktu tertentu.

Karena fungsi ini perlu dijalankan puluhan ribu kali, efisiensi sangat penting

Saya sudah mencoba menggunakan perpustakaan "multiprosesor" dan "threading" untuk menghentikan utas jika membutuhkan waktu lebih dari satu detik, tetapi solusi ini terlalu memperlambat program.

Ada saran? Saya benar-benar bingung dengan yang satu ini. Terima kasih.

-3
Titan 19 November 2020, 21:59

1 menjawab

Jawaban Terbaik

Saya menemukan solusi cepat dan sederhana untuk masalah ini:

try:
    eval("math.pow(a,b)")
except:
    print("too long to compute")

Alih-alih menggunakan ** saya menggunakan math.pow sehingga mengembalikan kesalahan overflow jika 'a' dan 'b' terlalu besar. Kemudian pengecualian dapat ditangani dengan pernyataan try-except.

0
Titan 22 November 2020, 18:59