Авторизация



Голосование

Помогла ли представленная на сайте информация решению Вашей IT-задачи?
 
Главная страница IT Microsoft POWERSHELL Скрипт PowerShell в помощь для изучения английских слов
Скрипт PowerShell в помощь для изучения английских слов Печать

Возникло у меня желание облегчить себе задачу в изучении английского языка. В итоге, после некоторых раздумий, я написал PowerShell скрипт, призванный помочь в выучивании английских слов. Также скрипт прекрасно подходит для задач тестирования (и не только английского, т.к. база в текстовом формате и может содержать все что угодно)

Скачать архив со скриптом и начальной базой английских слов (ССЫЛКА (24.79 Кб) [скачано:1222 раз(а)])

Как пользоваться:

  1. Качаем архив по ссылке выше
  2. Распаковываем архив в удобное место на диске
  3. Запускаем из распаковавшейся папки ярлык English_Start-Test.lnk

* при первом запуске могут понадобиться повышенные административные права. Это связано с тем, что по-умолчанию PowerShell запрещает запускать любые скрипты из любого места и эту настройку нужно поменять (в Windows 7 и Windows 8 жмем правой кнопкой на ярлык English_Start-Test.lnk, в выпавшем списке выбираем пункт "Запуск от имени администратора")

Системные требования:

  • Windows 7 или Windows 8 или Windows XP (для XP должен быть установлен dotNET Framework 3.5 и Windows PowerShell 2.0)
  • PowerShell 2.0 и выше (по-умолчанию установлен на системах Windows 7 и Windows 8)

Другими словами

Если у Вас установлена операционная система Windows 7 или Windows 8 - то ничего дополнительно делать не нужно, кроме как три пункта из раздела "Как пользоваться" выше.

Если же у Вас установлена Windows XP и она автоматически не обновляется, то может потребоваться установка Windows PowerShell 2.0.

Код программы:

try {
    $private:a = $host.UI.RawUI
    $private:a.WindowTitle = "Тестирование знаний"
    $b = $a.BufferSize
    $b.Width = 120
    $b.Height = 25
    $a.BufferSize = $b
    $b = $a.WindowSize
    $b.Width = 120
    $b.Height = 25
    $a.WindowSize = $b
} finally {
    Remove-Variable a,b -ErrorAction SilentlyContinue
}

Clear-Host

$error.Clear | Out-Null
Write-Host  
Write-Host 'Original and comments: http://vam.in.ua/index.php/it/25-ms-powershell/165-powershell-learning-english.html' -ForegroundColor DarkCyan
Write-Host 'Feedback: http://vam.in.ua/index.php/contacts/2-admins/1-aleksey.html' -ForegroundColor DarkCyan
Write-Host  
Write-Host  

Function Private:Remove-Spaces ([string]$String) {
    while ($String.Substring(0,1) -eq ' ') {
        $String = $String.Substring(1,$String.Length - 1)
    }
    while ($String.Substring(($String.Length - 1),1) -eq ' ') {
        $String = $String.Substring(0, $String.Length - 1)
    }
    Return $String
}

Function Private:Get-Rank ([int32]$Percent) {
    [string]$Private:rank = 'Звание не определено!'
    if ($Percent -le 20) {$rank = 'Ни бе, ни ме, ни кукареку'}
    if (($Percent -gt 20) -and ($Percent -le 50)) {$rank = 'Простак'}
    if (($Percent -gt 50) -and ($Percent -le 80)) {$rank = 'Просветленный'}
    if (($Percent -gt 80) -and ($Percent -lt 95)) {$rank = 'Знаток'}
    if (($Percent -ge 95) -and ($Percent -le 99)) {$rank = 'Гуру'}
    if ($Percent -ge 100) {$rank = 'Гений'}
    Return $rank
}

[void]::($words = Get-Content .\base.txt -ErrorAction Stop)

$script:array = New-Object 'object[,]' $words.Count,2

$script:totalWords = 0
foreach ($word in $words) {
    if ($word.Length -gt 0) {
        try {
            [string]$private:eng = [regex]::Match($word,'.*(?=\t)')
            if ($eng.Length -gt 0) {
                $eng = Remove-Spaces -String $eng
                $array[$totalWords,1] = [regex]::Match($word,'(?<=\t).*')
                $array[$totalWords,0] = $eng
                $totalWords += 1
            }
            $eng = ''
        } finally {}
    }
}

[System.Collections.ArrayList]$numbArray = @(1..$totalWords)

$private:right = 0
$private:secondTry = 0
$private:mistakes = 0
$private:currentQ = 0

while ($numbArray.Count -gt 0) {
    
    $private:rndm = Get-Random -Minimum 0 -Maximum ($numbArray.Count)

    $private:item = $numbArray[$rndm]

    $numbArray.RemoveAt($rndm)

    $private:answer = Read-Host $array[($item - 1),1]

    if ($answer -ieq $array[($item - 1),0]) {
        $right += 1
        Write-Host 'Верно!' -ForegroundColor Green
    } else {
        Write-Host 'Не верно!' -ForegroundColor Yellow
        Write-Host  
        Write-Host 'Попробуем с подсказками:' -ForegroundColor DarkGray

        $private:variantsNum = 1
        [string]$private:variants = ''
        $private:rndm3 = Get-Random -Minimum 1 -Maximum 8
        while ($variantsNum -lt 8) {

            if ($rndm3 -eq $variantsNum) {
                $variants += ('[' + ($array[($item - 1),0]) + ']     ')
            } else {
                $private:rndm2 = Get-Random -Minimum 0 -Maximum ($totalWords)
                if (($array[$rndm2,0]) -eq ($array[($item - 1),0])) {
                    $variantsNum -= 1
                } else {
                    $variants += ('[' + ($array[$rndm2,0]) + "]     ")
                }
            }

            $variantsNum += 1
        }

        Write-Host $variants -ForegroundColor White
        Write-Host  
        
        $answer = Read-Host $array[($item - 1),1]

        if ($answer -ieq $array[($item - 1),0]) {
            $secondTry += 1
            Write-Host 'Таки да' -ForegroundColor Green
        } else {
            $mistakes += 1
            Write-Host 'Неа, не верно!' -ForegroundColor Red

            Write-Host  
            Write-Host  
            Write-Host "Правильный ответ:" -ForegroundColor DarkGray
            Write-Host $array[($item - 1),1] ": `t" $array[($item - 1),0] -ForegroundColor White
        }

    }

    $currentQ += 1

    Write-Host  
    [int32]$Private:percent = (($right + $secondTry + $mistakes) * 100 / $totalWords)
    Write-Host  '-------=============------- [' $currentQ '/' $totalWords ']  ' $percent '%' -ForegroundColor DarkGray
    Write-Host  
    Write-Host  

}

Write-Host  
Write-Host  
Write-Host "Всего вопросов: `t" $totalWords -ForegroundColor DarkCyan
Write-Host  
Write-Host "Верных ответов: `t" $right -ForegroundColor DarkCyan
Write-Host "Со второй попытки: `t" $secondTry -ForegroundColor DarkCyan
Write-Host "Ошибок: `t`t" $mistakes -ForegroundColor DarkCyan
$percent = ($right * 100 / $totalWords)
Write-Host  
Write-Host  
Write-Host "Точное знание: `t`t" $percent "%" -ForegroundColor Cyan
Write-Host  
$percent = $percent + (($secondTry * 100 / $totalWords) / 2)
$Private:finalRank = Get-Rank -Percent $percent
Write-Host "Ваш титул: `t`t" $finalRank -ForegroundColor Magenta
Write-Host  

Remove-Variable words,answer,array,numbArray,rndm,rndm2,rndm3,variants,variantsNum,percent,totalWords,finalRank,currentQ -ErrorAction SilentlyContinue

Write-Host  
Write-Host  
Write-Host "Для выхода нажмите ""Ctrl + C"" или закройте окно" -ForegroundColor DarkCyan
Start-Sleep -Seconds 65535

База скрипта

База должна храниться в текстовом файле base.txt в том же каталоге, что и сам скрипт.

Формат базы:

ответ{знак табуляции}вопрос

...

handрука, вручать

...

adjective	прилагательное, зависимый
bay	залив, отсек, лаять, облаять
beyond	вне, по ту сторону, после, сверх
bunch	связка, группа, пучок, связывать
care	заботиться, хотеть, уход
carpenter	плотник, изготовлять
chest	грудь, сундук, фонд
chill	холод, охлаждать
climb	лазить, взбираться, подъем
dew	роса
few	немногие, небольшое количество
hang	вешать, висеть
hug	обнимать
huge	огромный
knee	колено
lick	облизывать
mercury	ртуть, Меркурий
opinion	мнение
origin	происхождение, начало
shape	форма, лепить, сформировать
shirt	рубашка, футболка
shy	застенчивый, пугливый, стеснительный
sly	хитрый
suitcase	чемодан
towel	полотенце

Как дополнять базу:

Самый простой способ - использовать Microsoft Excel. Вносим на листе эксэля в один столбец необходимые ответы, а в соседний справа - соответствующие вопросы. Потом выделяем оба столбца, нажимаем "Копировать" и вставляем это в текстовую базу скрипта (base.txt).

 

Перенос базы с сайта LinguaLeo.com:

http://vam.in.ua/index.php/it/34-english-language/248-english-lingualeo-fetch-words.html

 
Главная страница IT Microsoft POWERSHELL Скрипт PowerShell в помощь для изучения английских слов