dap: (Default)

Знатоков python можно найти в конференции welinux@conference.jabber.ru. Спасибо им за помощь и терпение =)  

Программа с с разметкой и здесь:
#!/usr/bin/env python
# -*- coding: utf-8 -*-
#Указывается язык и кодировка.

from random import uniform
from random import triangular
from math import sqrt
#Импорт модулей генерации случайных чисел с симметричным и нессиметричным распределением и квадратного корня.

print 'Generation of numbers with a prescribed maximum, minimum and maximum RSD.'
print '-----------'
max = input("Enter maximum number: ")
min = input("Enter minimum number: ")
n = input("Enter quantity of numbers: ")
referance = input("Enter maximum RSD in percents: ")
#Приветствие, ввод верхней и нижней границ интервала генерирования и значения предельного относительного стандартного отклонения.

value = []
for i in range(0,n):
value.append(uniform(min, max))
#Создание пустого списка и заполнение его случайными числами из заданного интервала.

rsd = referance + 1
while rsd > referance:
#Изначально rsd задаётся больше допустимого, чтобы программа вошла в цикл.

mean = 0
for i in range(0,n):
mean = mean + (value[i] / n)
#Рассчёт среднего значения.

sum = 0
deviation = []
for i in range(0,n):
deviation.append((value[i] - mean) ** 2)
sum = sum + deviation[i]
#Рассчёт квадратичных отклонений и их суммы, отклонения записываются в список, потому что пригодятся далее.

rsd = 100 * (sqrt(sum / (n - 1))) / mean
#Рассчёт относительного стандартного отклонения.

if rsd > referance:
#Если рассчитанное значение больше заданного предела, то...

if min > max:
i = min
min = max
max = i
#Если при вводе были перепутаны минимальное и максимальное значения, то они меняются местами. Ранее это не имело значения.

valmin = max + 1
valmax = min - 1
maxdev = -1
#Задаются невозможные изначальные значения максимального и минимального чисел и максимального отклонения.

for i in range(0,n):
if value[i] < valmin:
valmin = value[i]
if deviation[i] > maxdev:
maxdev = deviation[i]
extreme = i
if value[i] > valmax:
valmax = value[i]
if deviation[i] > maxdev:
maxdev = deviation[i]
extreme = i
#Если какое-либо число в списке меньше минимального или больше максимального значения, то записывается новое значение и проверяется отклонение числа. Если оно больше максимального значения, то записывается новое значение и его позиция в списке.

value[extreme] = triangular(valmin, valmax, mean)
#Экстремальное значение заменяется на случайное из интервала от максимального до минимального с асимметричным распределением: чем ближе число к среднему, тем больше вероятность его генерирования. Возвращение в начала цикла.
print '-----------'
for i in range(0,n):
print(value[i])
print '-----------'
print("RSD: "'%.4f' % rsd)
#Вывод разделителей, значений, относительного стандартного отклонения, округлённого до четырёх знаков после запятой.
raw_input("Enter to exit...")
#Программа ожидает ввода. Можно скопировать значения. Необходимо, если программа запускается не в эмуляторе терминала.
#-----------
#NB! Запуск в Windows с выводом на русском языке невозможен из-за зоопарка архаичных кодировок!

January 2016

S M T W T F S
     12
34567 89
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jan. 16th, 2026 01:54 pm
Powered by Dreamwidth Studios