এমন কোনও সফ্টওয়্যার রয়েছে যা আমাকে পর্যায়ক্রমে মানসিক গাণিতিক অনুশীলন করতে দেয়?


9

আমি আমার অলস প্রকৃতি সম্পর্কে সচেতন এবং সময়ে সময়ে নিজেকে কিছু প্রাথমিক মানসিক পাটিগণিত করার দিকে ধাক্কা দেওয়ার প্রয়োজন। অতএব, আমি এমন একটি সফ্টওয়্যার সন্ধান করছি যা পর্যায়ক্রমে আমাকে একটি সংক্ষিপ্ত মানসিক গাণিতিক অনুশীলন (প্লাস, বিয়োগ, গুণ, ভাগ) করতে বলে asks

নির্ণায়ক:

  • এটি আমার অন্তর সময় কাস্টমাইজ করার অনুমতি দেওয়া উচিত
  • এটি উবুন্টু ডেস্কটপগুলিতে একীভূত হওয়া উচিত, অর্থাত্ পটভূমিতে লুকিয়ে থাকা এবং অনুশীলনের সময় কেবলমাত্র পপ-আপ দেখাতে হবে

2
আমি সন্দেহ করি যে এই ধরনের সফ্টওয়্যার রয়েছে, তবে এটি খুব সহজেই শেল বা পাইথন স্ক্রিপ্টের সাহায্যে তৈরি করা যেতে পারে। আমি আগামীকাল কিছু রান্না করব, দয়া করে আমাকে মনে করিয়ে দিন
সের্গেই কলডিয়াজন্য

হ্যাঁ, বিএসডিগেমসের গাণিতিক এবং এরকম রয়েছে তবে আপনাকে পর্যায়ক্রমিক পপআপগুলি নিজেই স্বয়ংক্রিয় করতে হবে।
মিচিড

প্রিয় @ সার্জ, আমি আপনাকে রান্নার পরীক্ষার বিষয়ে দয়া করে মনে করিয়ে দিচ্ছি। :)
ওরশিরো

1
সুতরাং আমি একটি উত্তর-অগ্রগতি পোস্ট করেছি, যা আমি পাশাপাশি যাব সম্পাদনা করব। দয়া করে একবার দেখুন, আপনি কী ভাবেন, কোন কার্যকারিতা যুক্ত করতে বা সরাবেন তা আমাকে জানতে দিন। এখন পর্যন্ত এটি একটি কনসোল অ্যাপ্লিকেশন, তবে এটি শেষ পর্যন্ত একটি ছোট পপআপ উইন্ডোতে রূপান্তরিত হবে।
সের্গেই কোলোডিয়াজনি

2
কাজ করার জন্য একটি দুর্দান্ত প্রশ্ন হয়ে উঠেছে!
জ্যাকব Vlijm

উত্তর:


8

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()

ব্যবহারবিধি

  1. স্ক্রিপ্টটি খালি ফাইলে অনুলিপি করুন, এটি সংরক্ষণ করুন mindpractice.py
  2. এটি আর্গুমেন্ট হিসাবে অ্যাসাইনমেন্টের মধ্যে সর্বাধিক অনুমোদিত নম্বর এবং অন্তর সময় (সেকেন্ডে) দিয়ে চালান:

    python3 /path/to/mindpractice.py <max_number> <interval>

    যেমন

    python3 /path/to/mindpractice.py 1000 300

    1000অ্যাসাইনমেন্টের মধ্যে 5 মিনিটের বিরতি সহ, পরিসংখ্যান পর্যন্ত গণনা করতে ।

  3. যদি সমস্ত ঠিকঠাক কাজ করে তবে আপনি এটিকে প্রারম্ভিক অ্যাপ্লিকেশনগুলিতে স্বাভাবিক ভাবে যুক্ত করতে পারেন, বা টগল করার জন্য একটি লঞ্চার তৈরি করা যেতে পারে যা আমি পরে যুক্ত করতে পারি :)

বিঃদ্রঃ

  • বিভাজক কিছু ব্যাখ্যা প্রয়োজন হতে পারে। আপনি সম্ভবত ফ্লোটে গণনা করতে পছন্দ করবেন না। অতএব, যদি অ্যাসাইনমেন্টটি একটি বিভাগ হয়, স্ক্রিপ্টটি ভাগ করে নেওয়া যায় এমন সংখ্যাগুলি দেখায় এবং একটিটিকে এলোমেলো করে (এলোমেলোভাবে)। যদি (প্রধান) নম্বরটি একটি মৌলিক সংখ্যা হিসাবে পরিণত হয়, তবে অ্যাসাইনমেন্টটি অন্য প্রকারে পরিবর্তিত হবে।

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'

এটি সর্বশেষ ব্যবহৃত আর্গুমেন্ট মনে রাখবে


আপনার প্রয়োজনগুলি সর্বোত্তমভাবে সরবরাহ করে এমন সংস্করণটি ব্যবহার করুন ...



এই সংস্করণটি এখন পর্যন্ত দুর্দান্ত কাজ করছে। তোমাকে অনেক ধন্যবাদ!
orschiro

1
@orschiro অসুবিধা পার্থক্য করতে একটি বর্ধিত সংস্করণ যুক্ত করেছে।
জ্যাকব Vlijm

লগ ফাইলটি খুব সুন্দর ধারণা! আমি বর্তমানে তিন অঙ্কের কয়েকটি গুণ ও বিভাগের কয়েকটি সম্পর্কে মাথা পেতে চেষ্টা করছি। তারা এত সোজা না। :)
orschiro

কেবলমাত্র একটি ধারণা: মাঝে মাঝে আমি কাজের প্রতি এতটাই মনোযোগী হয়েছি যে কাজটি Think Hardশেষ করার জন্য আমি উইন্ডোটি উপেক্ষা করি (উদাহরণস্বরূপ একটি বাক্য লেখা শেষ করুন)। আমি তখন উইন্ডোটি ভুলে যাই। এটা কি সম্ভব যে 5 মিনিটের পরে, Think Hardউইন্ডোটি স্বয়ংক্রিয়ভাবে ফোকাস ফিরে পায়?
orschiro

1
@orschiro একেবারে! আমি এখনও সম্পূর্ণ জিইউআই-সংস্করণে চিবানো ছিলাম ( কমান্ড লাইন থেকে কোনও কিছু সেট করার দরকার নেই , এমনকি প্রথম রানও নয়), তবে আমি নিশ্চিত নই যে তারা আমাদের
উত্তরটিতে

3

পরিচিতি:

নিম্নলিখিত অ্যাপ্লিকেশনটি ব্যবহারকারী দ্বারা মূল্যায়ন করার জন্য এলোমেলো পূর্ণসংখ্যার ভাব প্রকাশ করে। এলোমেলোভাবে উত্পন্ন এক্সপ্রেশনগুলির পরিসর মূল পপআপ উইন্ডোতে ব্যবহারকারীর সেটিংসের উপর নির্ভর করে। Lets Beginবোতামটি ক্লিক করার পরে , ব্যবহারকারী বাতিল বোতামটি হিট না করা পর্যন্ত সেশনটি অনির্দিষ্টকালের জন্য শুরু হয়।

এখানে চিত্র বর্ণনা লিখুন

এখানে চিত্র বর্ণনা লিখুন

সোর্স কোড:

#!/usr/bin/env python

# Author: Serg Kolo
# Date: Jan 30,2016
# Purpose: A graphical utility for practicing
#          random arithmetic operations
# Written for: http://askubuntu.com/q/725287/295286

#    Copyright: Serg Kolo , 2016
#    This program is free software: you can redistribute it and/or modify
#    it under the terms of the GNU General Public License as published by
#    the Free Software Foundation, either version 3 of the License, or
#    (at your option) any later version.
#
#    This program is distributed in the hope that it will be useful,
#    but WITHOUT ANY WARRANTY; without even the implied warranty of
#    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
#    GNU General Public License for more details.
#
#    You should have received a copy of the GNU General Public License
#    along with this program.  If not, see <http://www.gnu.org/licenses/>.

import sys
import time
import random
from PyQt4 import QtGui


class mathApp(QtGui.QWidget):
   def __init__(self):
       super(mathApp,self).__init__()
       self.mainMenu()

   def mainMenu(self):
      self.setGeometry(300, 300, 400, 200)

      self.btn = QtGui.QPushButton("Let's begin",self)
      self.btn.move(20,150)
      self.btn.clicked.connect(self.askQuestions)

      self.lbl1 = QtGui.QLabel(self)
      self.lbl1.move(20,25)
      self.lbl1.setText("Numbers From")


      self.lbl2 = QtGui.QLabel(self)
      self.lbl2.move(20,55)
      self.lbl2.setText("Numbers To")

      self.lbl2 = QtGui.QLabel(self)
      self.lbl2.move(20,85)
      self.lbl2.setText("Repeat (seconds)")

      self.le1 = QtGui.QLineEdit(self)
      self.le1.move(150,20)

      self.le2 = QtGui.QLineEdit(self)
      self.le2.move(150,50)

      self.le3 = QtGui.QLineEdit(self)
      self.le3.move(150,80)

      self.lbl3 = QtGui.QLabel(self)
      self.lbl3.move(20,105)

      self.setWindowTitle('Random Integer Arithmetic')

      self.show()

   def askQuestions(self):
       rangeStart = int(self.le1.text())
       rangeEnd = int(self.le2.text())
       sleepTime = int(self.le3.text())
       done=False
       while not done:
          self.show()
          expression = self.generateOperation(rangeStart,rangeEnd)
          correctAnswer = eval(expression)

          prompt = QtGui.QInputDialog() 
          text,ok = prompt.getText(self,"Don't think too hard",expression) 
          if ok:
             if int(text) == correctAnswer:                
                self.showAnswer("CORRECT,YOU ROCK !")
             else :
                self.showAnswer("Nope");
          else:
              done=True

          if done==True:
              self.close()
          time.sleep(sleepTime)


   def generateOperation(self,start,end):
      a = random.randint(start,end)
      b = random.randint(start,end)
      oplist = ['+','-','/','*']
      op = oplist[random.randint(0,3)]
      expr = str(a) + op + str(b) + ''
      return expr

   def showAnswer(self,result):
       popup = QtGui.QMessageBox()
       popup.setText(result)
       popup.exec_()


def main():
   root = QtGui.QApplication(sys.argv)
   app = mathApp()
   sys.exit(root.exec_())

if __name__ == '__main__':
   main()

প্রিয় @ সার্জ, আমি আপনার প্রসারিত জিইউআই সংস্করণের জন্য ব্যক্তিগতভাবে আপনাকেও ধন্যবাদ জানাতে চাই। একটি প্রশ্ন, আমি শুধু অনুশীলন ছিল 15/14 = 1। এ জাতীয় অনুশীলন কতটা কার্যকর তা আমি নিশ্চিত নই। আপনি কি মনে করেন?
orschiro

@orschiro এই হয় integer arithmetic। এর অর্থ ফলাফল কেবল পুরো অংশ, কোনও অবশিষ্ট নেই। আপনি যদি চান, আমিও decimalপাটিগণিত প্রয়োগ করার চেষ্টা করতে পারে । এছাড়াও, দয়া করে আমাকে কী ধরনের অন্যান্য বিকল্পগুলি প্রয়োগ করতে এবং যুক্ত করতে চান তা আমাকে জানান। বর্তমানে, আমি agile developmentপদ্ধতিটি অনুশীলন করার চেষ্টা করছি এবং ক্লায়েন্টের সাথে যোগাযোগ এ জাতীয় পদ্ধতির মূল বিষয়। আমাকে বুঝতে দাও.
সের্গেই কলডিয়াজন্য

এটা শুনে খুব খুশি হলাম! আমি আপনাকে আরও প্রতিক্রিয়া সরবরাহ করতে চাই, যেমন উবুন্টু ডেস্কটপের সাথে আরও ভাল সংহতকরণ (পটভূমিতে আরও স্ক্রিপ্ট চালান, অর্থাত্ ব্যবহারকারী ইনপুট পরে ছোট করুন)। কীভাবে আমি আপনাকে আরও প্রতিক্রিয়া জানাতে পারি?
orschiro
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.