1. সোজা সংস্করণ
স্ক্রিপ্ট নিচে এলোমেলোভাবে বরাদ্দকরণ উত্পাদন করা হবে, + + , - , × এবং ÷ । স্ক্রিপ্টটি ব্যবহার করতে পারে এমন সর্বাধিক সংখ্যা আপনি সেট করতে পারেন (এবং হওয়া উচিত) পাশাপাশি অ্যাসাইনমেন্টের মধ্যে সময়ের ব্যবধানও।
অ্যাসাইনমেন্ট
অ্যাসাইনমেন্টগুলি জেনিটি এন্ট্রি উইন্ডোতে উপস্থাপন করা হয়েছে:
উত্তরটি যদি ভুল হয়:
উত্তরটি সঠিক হলে:
এই পান্ডুলিপি
#!/usr/bin/env python3
from random import randint
import sys
import subprocess
import time
# maximum number & interval
max_n = int(sys.argv[1]); pause = int(sys.argv[2])
def fix_float(n):
"""
if the assignment is a division, the script divides the random number by a
number (integer) it can be divided by. it looks up those numbers, and picks
one of them (at random). if the number is a prime number the assignment is
changed into another type
"""
try:
divs = [i for i in range(2, n) if n%i == 0]
pick = randint(1, len(divs))
div_by = divs[pick-1]
return [str(n)+" : "+str(div_by), int(n/div_by)]
except (ValueError, IndexError):
pass
def get_assignment():
"""
get a random number within the user defined range, make the assignment and
the textual presentation
"""
n1 = randint(2, max_n); n2 = randint(2, max_n)
assignments = [
[str(n1)+" + "+str(n2), n1+n2],
[str(n1)+" - "+str(n2), n1-n2],
[str(n1)+" x "+str(n2), n1*n2],
fix_float(n1),
]
# pick an assignment (type) at random
assignment = assignments[randint(0, 3)]
# if the random number is a prime number and the assignment a division...
assignment = assignment if assignment != None else assignments[1]
# run the interface job
try:
answer = int(subprocess.check_output(["/bin/bash", "-c",
'zenity --entry --title="Think hard:" --text='+'"'+assignment[0]+'"'
]).decode("utf-8"))
if answer == assignment[1]:
subprocess.Popen(["notify-send", "Coolcool"])
else:
subprocess.Popen([
"notify-send", "Oooops, "+assignment[0]+\
" = "+str(assignment[1])])
except (subprocess.CalledProcessError, ValueError):
pass
while True:
time.sleep(pause)
get_assignment()
ব্যবহারবিধি
- স্ক্রিপ্টটি খালি ফাইলে অনুলিপি করুন, এটি সংরক্ষণ করুন
mindpractice.py
এটি আর্গুমেন্ট হিসাবে অ্যাসাইনমেন্টের মধ্যে সর্বাধিক অনুমোদিত নম্বর এবং অন্তর সময় (সেকেন্ডে) দিয়ে চালান:
python3 /path/to/mindpractice.py <max_number> <interval>
যেমন
python3 /path/to/mindpractice.py 1000 300
1000
অ্যাসাইনমেন্টের মধ্যে 5 মিনিটের বিরতি সহ, পরিসংখ্যান পর্যন্ত গণনা করতে ।
যদি সমস্ত ঠিকঠাক কাজ করে তবে আপনি এটিকে প্রারম্ভিক অ্যাপ্লিকেশনগুলিতে স্বাভাবিক ভাবে যুক্ত করতে পারেন, বা টগল করার জন্য একটি লঞ্চার তৈরি করা যেতে পারে যা আমি পরে যুক্ত করতে পারি :)
বিঃদ্রঃ
- বিভাজক কিছু ব্যাখ্যা প্রয়োজন হতে পারে। আপনি সম্ভবত ফ্লোটে গণনা করতে পছন্দ করবেন না। অতএব, যদি অ্যাসাইনমেন্টটি একটি বিভাগ হয়, স্ক্রিপ্টটি ভাগ করে নেওয়া যায় এমন সংখ্যাগুলি দেখায় এবং একটিটিকে এলোমেলো করে (এলোমেলোভাবে)। যদি (প্রধান) নম্বরটি একটি মৌলিক সংখ্যা হিসাবে পরিণত হয়, তবে অ্যাসাইনমেন্টটি অন্য প্রকারে পরিবর্তিত হবে।
2. আরও বিকল্প
একবার আপনি গণনা শুরু করার পরে, আপনি খুঁজে পাবেন যে 100 এর পরিসংখ্যানগুলিতে বিভাজক করা যাক (ধরা যাক) 100 এর পরিসংখ্যানকে 100 এর গুণক করার চেয়ে অনেক সহজ ।
নীচের স্ক্রিপ্টটি দিয়ে আপনি অনুশীলনের ধরণের প্রতি সর্বাধিক সংখ্যা নির্ধারণ করতে পারেন (এবং হওয়া উচিত) (স্ক্রিপ্টের নীচে নির্দেশাবলী দেখুন)।
এই পান্ডুলিপি
#!/usr/bin/env python3
from random import randint
import sys
import subprocess
import time
levels = sys.argv[1:]
pause = [int(arg.replace("p:", "")) for arg in levels if "p:" in arg][0]
def fix_float(n):
"""
if the assignment is a division, the script divides the random number by a
number (integer) it can be divided by. it looks up those numbers, and picks
one of them (at random). if the number is a prime number the assignment is
changed into another type
"""
try:
divs = [i for i in range(2, n) if n%i == 0]
pick = randint(1, len(divs))
div_by = divs[pick-1]
return [str(n)+" : "+str(div_by), int(n/div_by)]
except (ValueError, IndexError):
pass
def get_assignment():
"""
get a random number within the user defined range, make the assignment and
the textual presentation
"""
# pick an assignment (type) at random
track = randint(0, 3)
arg = ["a:", "s:", "m:", "d:"][track]
max_n = [int(item.replace(arg, "")) for item in levels if arg in item][0]
n1 = randint(2, max_n); n2 = randint(2, max_n)
assignments = [
[str(n1)+" + "+str(n2), n1+n2],
[str(n1)+" - "+str(n2), n1-n2],
[str(n1)+" x "+str(n2), n1*n2],
fix_float(n1),
]
assignment = assignments[track]
# if the random number is a prime number and the assignment a division...
assignment = assignment if assignment != None else assignments[1]
# run the interface job
try:
answer = int(subprocess.check_output(["/bin/bash", "-c",
'zenity --entry --title="Think hard:" --text='+'"'+assignment[0]+'"'
]).decode("utf-8"))
if answer == assignment[1]:
subprocess.Popen(["notify-send", "Coolcool"])
else:
subprocess.Popen([
"notify-send", "Oooops, "+assignment[0]+\
" = "+str(assignment[1])])
except (subprocess.CalledProcessError, ValueError):
pass
while True:
time.sleep(pause)
get_assignment()
ব্যবহারবিধি
স্ক্রিপ্টটি ঠিক প্রথমটির মতো সেটআপ করুন তবে এটি যুক্তি দিয়ে চালান (কোনও ক্রমে স্ক্রিপ্টটি সঠিক আইটেমের সাথে ডান যুক্তি যুক্ত করবে):
p:
বিরতি দিন (কয়েক সেকেন্ডের মধ্যে অ্যাসাইনমেন্টের মধ্যে বিরতি)
s:
বিয়োগ (গণনা করার জন্য সর্বাধিক সংখ্যা)
a:
যোগ করুন (সর্বাধিক সংখ্যা)
m:
গুন (সর্বোচ্চ সংখ্যা)
d:
ভাগ (সর্বোচ্চ সংখ্যা)
উদাহরণ স্বরূপ:
python3 '/home/jacob/Desktop/num.py' a:10 d:100 s:10 m:10 p:300
প্রতি পাঁচ মিনিটে একটি অনুশীলন দেখানোর জন্য, ১০০ পর্যন্ত দশমিক সংখ্যা পর্যন্ত বিভাজন ব্যতীত 10 পর্যন্ত সংখ্যা।
3. আসুন কিছুটা বহন করা যাক
কিছু পরিসংখ্যান দেখতে সক্ষম হচ্ছে
নীচের সংস্করণটি প্রতি 10 অনুশীলনের পরে পরিসংখ্যান দেখায়:
অতিরিক্তভাবে (বাচ্চাদের জন্য ব্যবহারের ক্ষেত্রে দরকারী হতে পারে), আপনি দেখতে পারেন যে গত 100 টি ভুল উত্তর দেওয়া অনুশীলনে কী ভুল হয়েছে went একটি লুকানো ফাইলে, অ্যাসাইনমেন্ট এবং তাদের (ভুল) উত্তর দুটি লেখা থাকে:
এই লগফিলটি অবস্থিত:
~/.calculog
এই পান্ডুলিপি
#!/usr/bin/env python3
from random import randint
import sys
import subprocess
import time
import os
log = os.environ["HOME"]+"/.calculog"
levels = sys.argv[1:]
pause = [int(arg.replace("p:", "")) for arg in levels if "p:" in arg][0]
def fix_float(n):
"""
if the assignment is a division, the script divides the random number by a
number (integer) it can be divided by. it looks up those numbers, and picks
one of them (at random). if the number is a prime number the assignment is
changed into another type
"""
try:
divs = [i for i in range(2, n) if n%i == 0]
pick = randint(1, len(divs))
div_by = divs[pick-1]
return [str(n)+" : "+str(div_by), int(n/div_by)]
except (ValueError, IndexError):
pass
def get_assignment():
"""
get a random number within the user defined range, make the assignment and
the textual presentation
"""
# pick an assignment (type) at random
track = randint(0, 3)
arg = ["a:", "s:", "m:", "d:"][track]
max_n = [int(item.replace(arg, "")) for item in levels if arg in item][0]
n1 = randint(2, max_n); n2 = randint(2, max_n)
assignments = [
[str(n1)+" + "+str(n2), n1+n2],
[str(n1)+" - "+str(n2), n1-n2],
[str(n1)+" x "+str(n2), n1*n2],
fix_float(n1),
]
assignment = assignments[track]
# if the random number is a prime number and the assignment a division...
assignment = assignment if assignment != None else assignments[1]
# run the interface job
try:
answer = int(subprocess.check_output(["/bin/bash", "-c",
'zenity --entry --title="Think hard:" --text='+'"'+assignment[0]+'"'
]).decode("utf-8"))
if answer == assignment[1]:
subprocess.Popen(["notify-send", "Coolcool"])
return "ok"
else:
subprocess.Popen([
"notify-send", "Oooops, "+assignment[0]+\
" = "+str(assignment[1])])
open(log, "+a").write(assignment[0]+"\t\t"+str(answer)+"\n")
try:
history = open(log).read().splitlines()
open(log, "wt").write(("\n").join(history[-100:])+"\n")
except FileNotFoundError:
pass
return "mistake"
except (subprocess.CalledProcessError, ValueError):
return None
results = []
while True:
time.sleep(pause)
results.append(get_assignment())
if len(results) >= 10:
score = results.count("ok")
subprocess.call([
"zenity", "--info",
'--title=Latest scores',
'--text='+str(score)+' out of 10',
'--width=160',
])
results = []
ব্যবহারবিধি
ব্যবহারটি হুবহু বিকল্প 2 এর মতো, তবে আপনার লগফাইলটি পাওয়া যাবে এবং প্রতি 10 টি কার্যক্রমে স্কোর থাকবে।
৪. চূড়ান্ত সংস্করণ
নীচের সংস্করণটি বিকল্প 3 এর মতো (লগ ফাইল এবং প্রতিবেদন সহ) রয়েছে তবে এর অতিরিক্ত কিছু বৈশিষ্ট্য রয়েছে:
বর্গমূল গণনা যোগ করে
সর্বাধিক সেট করার পরিবর্তে সংখ্যাগুলির একটি ব্যাপ্তি ব্যবহার করে যুক্ত করে
- কেবলমাত্র নির্দিষ্ট গণনা প্রকারগুলি চালানোর জন্য বিকল্প যুক্ত করে (উদাহরণস্বরূপ কেবল বিভাজন এবং গুণ) ly
সর্বশেষবারের সাথে চালিত যুক্তিগুলি স্মরণ করে, যখন আর্গুমেন্ট ছাড়াই চালানো হয় (কেবলমাত্র প্রথমবার, যুক্তিগুলি সেট করতে হবে)। যদি প্রথম রানটিতে কোনও আর্গুমেন্ট সেট না করা থাকে, স্ক্রিপ্টটি একটি বার্তা প্রেরণ করে:
এই পান্ডুলিপি
#!/usr/bin/env python3
from random import randint
import sys
import subprocess
import time
import os
"""
Use this script to practice head count. Some explanation might be needed:
The script can be used for the following types of calculating:
Type argument example explanation
-------------------------------------------------------------------------------
add a:30-100 to add in numbers from 30-100
subtract s:10-100 to subtract in numbers from 10-100
multiply m:10-20 to multiply in numbers from 10-20
divide d:200-400 to divide in numbers from 200-400
square root r:1-1000 to find square root in numbers from 1-1000
N.B.
-------------------------------------------------------------------------------
- The argument p: (pause in seconds; break between the assignments) *must* be
set, for example: p:300 to launch an assignment every 5 minutes
- A calculation type will only run *if* the argument is set for the
corresponding type. An example: python3 /path/to/script p:60 s:30-60
will run a subtract- assignment every minute.
Miscellaneous information:
-------------------------------------------------------------------------------
- On first run, arguments *must* be set. After first run, when no arguments
are used the last set arguments will run, until the script is run with a new
set of arguments.
- A log file of the last 100 incorrectly answered questions is kept in
~/.calculog
- After 10 assignments, the score of the last 10 pops up.
"""
log = os.environ["HOME"]+"/.calculog"
prefs = os.environ["HOME"]+"/.calcuprefs"
levels = sys.argv[1:]
if levels:
open(prefs, "wt").write(str(levels))
else:
try:
levels = eval(open(prefs).read())
except FileNotFoundError:
subprocess.call([
"zenity", "--info",
'--title=Missing arguments',
'--text=On first run, the script needs to be run with arguments\n'
])
def fix_float(n):
"""
if the assignment is a division, the script divides the random number by a
number (integer) it can be divided by. it looks up those numbers, and picks
one of them (at random). if the number is a prime number the assignment is
changed into another type
"""
try:
divs = [i for i in range(2, n) if n%i == 0]
pick = randint(1, len(divs))
div_by = divs[pick-1]
return [str(n)+" : "+str(div_by), int(n/div_by)]
except (ValueError, IndexError):
pass
def fix_sqr(f1, f2):
"""
If the assignment is calculating a square root, this function finds the sets
of numbers (integers) that make a couple, within the given range.
"""
q = f1; r = q**(.5); sets = []
while q < f2:
r = q**(.5)
if r == int(r):
sets.append([int(r), int(q)])
q = q+1
if sets:
pick = sets[randint(0, len(sets)-1)]
return ["√"+str(pick[1]), pick[0]]
def get_assignment():
"""
get a random number within the user defined range, make the assignment and
the textual presentation
"""
args = ["a:", "s:", "m:", "d:", "r:"]
indc = []
for i, item in enumerate(args):
if item in str(levels):
indc.append(i)
index = indc[randint(0, len(indc)-1)]
name = args[index]
minmax = [
[int(n) for n in item.replace(name, "").split("-")] \
for item in levels if name in item][0]
assignment = None
# if the random number is a prime number *and* the assignment a division
# or a square root...
while assignment == None:
n1 = randint(minmax[0], minmax[1]); n2 = randint(minmax[0], minmax[1])
assignment = [
[str(n1)+" + "+str(n2), n1+n2],
[str(n1)+" - "+str(n2), n1-n2],
[str(n1)+" x "+str(n2), n1*n2],
fix_float(n1),
fix_sqr(minmax[0], minmax[1]),
][index]
# run the interface job
try:
answer = int(subprocess.check_output(["/bin/bash", "-c",
'zenity --entry --title="Think hard:" --text='+'"'+assignment[0]+'"'
]).decode("utf-8"))
if answer == assignment[1]:
subprocess.Popen(["notify-send", "Coolcool"])
return "ok"
else:
subprocess.Popen([
"notify-send", "Oooops, "+assignment[0]+\
" = "+str(assignment[1])])
open(log, "+a").write(assignment[0]+"\t\t"+str(answer)+"\n")
try:
history = open(log).read().splitlines()
open(log, "wt").write(("\n").join(history[-100:])+"\n")
except FileNotFoundError:
pass
return "mistake"
except (subprocess.CalledProcessError, ValueError):
return None
if levels:
pause = [int(arg.replace("p:", "")) for arg in levels if "p:" in arg][0]
[levels.remove(item) for item in levels if "p:" in item]
results = []
while True:
time.sleep(pause)
results.append(get_assignment())
if len(results) >= 10:
score = results.count("ok")
subprocess.call([
"zenity", "--info",
'--title=Latest scores',
'--text='+str(score)+' out of 10',
'--width=160',
])
results = []
ব্যবহারবিধি
স্ক্রিপ্টটি খালি ফাইলে অনুলিপি করুন, এটি (আবার) হিসাবে সংরক্ষণ করুন mindpractice.py
। নিম্নলিখিত বিকল্পগুলি দিয়ে এটি চালান (উদাহরণ হিসাবে)
সেট করা আবশ্যক:
p:300 to set the interval between assignments to 5 minutes
Ptionচ্ছিক (একটি নির্বাচন করুন):
a:30-100 to add in numbers from 30-100 (optional)
s:10-100 to subtract in numbers from 10-100
m:10-20 to multiply in numbers from 10-20
d:200-400 to divide in numbers from 200-400
r:1-1000 to find square root in numbers from 1-1000
উদাহরণ কমান্ড:
python3 '/path/to/mindpractice.py' p:300 d:10-100 s:10-30 r:300-600
নির্ধারণ করা:
p:300 to set the interval between assignments to 5 minutes
d:10-100 to divide in numbers from 10-100
s:10-30 to subtract in numbers from 10-30
r:300-600 to calculate square roots from 300-600
যোগ এবং গুণনের সময় ব্যবহৃত হয় না।
এরপরের সময়, যদি স্ক্রিপ্টটি দিয়ে চালিত হয়:
python3 '/path/to/mindpractice.py'
এটি সর্বশেষ ব্যবহৃত আর্গুমেন্ট মনে রাখবে
আপনার প্রয়োজনগুলি সর্বোত্তমভাবে সরবরাহ করে এমন সংস্করণটি ব্যবহার করুন ...