Понедельник, 09 Декабря 2019, 15:23

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 2
  • 1
  • 2
  • »
Форум игроделов » Программирование » Скриптовые языки программирования » Нахождение среднего значения и стандартного отклонения
Нахождение среднего значения и стандартного отклонения
granizaДата: Среда, 23 Января 2019, 18:41 | Сообщение # 1
GraNiza-DeveLoper
Сейчас нет на сайте
Помогите пожалуйста с программой. Задача такая: Напишите программу для нахождения среднего значения и стандартного отклонения оптимального счета в данном пасьянсе. Покажите, что число рассмотренных игр обеспечивает достоверность полученных статистических результатов. Подсчитайте также, если сумеете, среднее число ходов и среднее число точек принятия решения на пути к оптимальному результату. Единственный входной параметр программы — число пасьянсов, которые нужно разложить. Вывод обязательно должен содержать требуемую статистику, но иногда оказываются полезными и другие данные.
Как вариант, я думал сделать сначала пасьянс, а потом уже статистику. То есть две программы, но не знаю будет ли это правильно.
Если кто-то делал подобное, прошу объясните, как это все сделать, пожалуйста. Готов отблагодарить деньгами, сразу же отпишу в лс, если кто напишет хотя бы рабочий код, без объяснений. Желательно сегодня. Молю, прошу.
Код
from random import randint

# 52 deck of cards ranked 1-13
# shuffle the deck at game start
# board of 10 spots
# discard pile
# rank: ace=low k=high
# when placing card, every space to left is empty or lower rank
# every space to right is empty or higher rank
# loss = 6th discard
# win = at least one card on every spot on board

lossCount=0;
winCount=0;
# 10,000 play-thrus
for z in range(0,7):
    # new deck
    deck = list();
    # new discard pile
    discard = list();
    # 4 of each card
    for i in range(1,5):
        for x in range(1,14):
            deck.append(x);

    # shuffling the deck
    for z in range(0,51):
        w = randint(z,51)
        tempCard = deck[z];
        deck[z] = deck[w];
        deck[w] = tempCard;

    #print deck;
    #print len(deck);

    # Initializing the board
    board = [None]*10;
    # Automating card draws from the deck
    for i in range(0,51):
        #print board;
        card = deck.pop();

        # Place card in it's corresponding spot if game isn't over yet
        if (None in board) and (len(discard)<6):
            if len(board)>=card:
                board[card-1] = card;
            else:
                discard.append(card);

    # Loss conditions
    if len(discard)==6:
        lossCount +=1;
        print ("You lose! :(");
    # Win conditions
    if ((None in board) == False):
        winCount +=1;
        print ("You win! :)")

    print (board)
    print (discard)
print (winCount);
print ("wins: " + str((100*float(winCount)/float(10))) +"%");
print ("end!");

Нашел код пасьянса, не уверен что правильно.
И код статистики:
Код
#program to calculate the statistical mean, variance, and standard deviation from a text file with a number on each line
import statistics

#list to store all the students' scores
scores = []
scoreFile = open(C:\Users\Brandon\Documents\GradingStatistics\studentScores, 'r')
outputFile = open(C:\Users\Brandon\Documents\GradingStatistics\scoreStatistics, 'w')

for line in scoreFile.readlines():
    line = line.strip() #getting rid of the \n characters
    scores.append(line)

#writes a student's score line by line
def display_scores(scoreList)
    for score in scoreList:
        outputFile.write(score)
        outputFile.write("\n")

def display_average(scoreList)
    average = statistics.mean(scoreList)
    outputFile.write("Average score: %s", %average)
    outputFile.write("\n")
    
def display_variance(scoreList)
    variance = statistics.pvariance(scoreList)
    outputFile.write("Variance of the scores: %s", %variance)
    outputFile.write("\n")
    
def display_stdev(scoreList)
    stdev = statistics.stdev(scoreList)
    outputFile.write("Standard deviation of the scores: %s", %stdev)
    outputFile.write("\n")
    
display_average(scores)
display_stdev(scores)

scoreFile.close()
outputFile.close()

Как это объединить все в одну программу? Нужно сделать так, чтобы задание выполнялось.




Сообщение отредактировал graniza - Среда, 23 Января 2019, 18:42
DivESДата: Среда, 23 Января 2019, 20:39 | Сообщение # 2
заслуженный участник
Сейчас нет на сайте
graniza, ещё актуально? Какой именно пасьянс нужен?
В коде статистики импортируется statistics. Стандартная библиотека для Python? Если нет, то код бесполезный :)
granizaДата: Среда, 23 Января 2019, 21:48 | Сообщение # 3
GraNiza-DeveLoper
Сейчас нет на сайте
Цитата DivES ()
graniza, ещё актуально? Какой именно пасьянс нужен?
В коде статистики импортируется statistics. Стандартная библиотека для Python? Если нет, то код бесполезный

Актуально. Вообще обычный пасьянс. Игра кончается, когда не остается ни одного допустимого хода и ни одну карту нельзя положить в счетную стопку. Счет игры равен суммарному числу карт в счетных стопках.


DivESДата: Среда, 23 Января 2019, 22:33 | Сообщение # 4
заслуженный участник
Сейчас нет на сайте
graniza, хорошо. Пасьянс работает, насколько я могу судить. В статистике что нужно? Только развёрнуто. То есть, что подразумевается под средним значением и стандартным отклонением? Так как, как я уже сказал, код статистики в принципе бесполезен :D

Добавлено (23 Января 2019, 22:35)
---------------------------------------------
Хотя нет, стоп. Ошибаюсь. Увидел statistics. В чём сложность связать эти два файла?

granizaДата: Среда, 23 Января 2019, 22:38 | Сообщение # 5
GraNiza-DeveLoper
Сейчас нет на сайте
Цитата DivES ()
graniza, хорошо. Пасьянс работает, насколько я могу судить. В статистике что нужно? Только развёрнуто. То есть, что подразумевается под средним значением и стандартным отклонением? Так как, как я уже сказал, код статистики в принципе бесполезен

Во первых в этом пасьянсе нельзя вводить число пасьянсов, которые нужно разложить. Просто по заданию это необходимо. По поводу статистики, среднее значение оптимального счета, стандартное отклонение от оптимального счета (такие вещи так и называются, они высчитываются по формулам), среднее число ходов и среднее число точек принятия решения на пути к оптимальному результату. Два последних не обязательно, но по возможности, если получится, было бы круто.
Помимо этого, код этого пасьянса не выдает счет. Соответственно и статистики никакой не будет.




Сообщение отредактировал graniza - Среда, 23 Января 2019, 22:46
DivESДата: Среда, 23 Января 2019, 22:47 | Сообщение # 6
заслуженный участник
Сейчас нет на сайте
graniza, а счёт - это число карт в списке board? (то есть 10 для победного кейса)
Или же сумма всех карт в том же списке? (то есть 55 в случае победы)
granizaДата: Среда, 23 Января 2019, 22:55 | Сообщение # 7
GraNiza-DeveLoper
Сейчас нет на сайте
Цитата DivES ()
graniza, а счёт - это число карт в списке board? (то есть 10 для победного кейса)
Или же сумма всех карт в том же списке? (то есть 55 в случае победы)

Сумма всех карт

Добавлено (23 Января 2019, 23:15)
---------------------------------------------
Для того чтобы найти оптимальный результат, реализуем на базе этих процедур стратегию поиска. После сдачи карт получаем некоторую начальную позицию. Стратегия поиска состоит в выполнении для каждой позиции, получающейся в ходе игры, следующих действий:

Подсчитать, сколько возможных ходов имеется для данной позиции. Их всегда не более семи.

Если возможных ходов нет, то данная последовательность ходов закончена, и можно записать ее счет. Установить новую текущую позицию, взяв верхний элемент со стека позиций, и возвратиться к началу цикла. Если стек позиций пуст, то закончить поиск.
Если есть только один ход, то выполнить его и вернуться к началу цикла.
Счет игры равен суммарному числу карт в счетных стопках

Надеюсь это как-то поможет в решении.




Сообщение отредактировал graniza - Среда, 23 Января 2019, 23:16
DivESДата: Среда, 23 Января 2019, 23:34 | Сообщение # 8
заслуженный участник
Сейчас нет на сайте
graniza, оперируешь такими терминами и не можешь решить такую простецкую задачу :(
Счёт и ввод количества пасьянсов сделал.
Статистику не сделал - у меня отсутствует та самая statistics, о которою я уже трижды запнулся :D
Сегодня уже не закончу. Могу попробовать завтра, если ещё поздно не будет)


Сообщение отредактировал DivES - Среда, 23 Января 2019, 23:34
granizaДата: Среда, 23 Января 2019, 23:42 | Сообщение # 9
GraNiza-DeveLoper
Сейчас нет на сайте
Цитата DivES ()
graniza, оперируешь такими терминами и не можешь решить такую простецкую задачу
Счёт и ввод количества пасьянсов сделал.
Статистику не сделал - у меня отсутствует та самая statistics, о которою я уже трижды запнулся
Сегодня уже не закончу. Могу попробовать завтра, если ещё поздно не будет)


А завтра примерно во сколько? Спасибо большое за твое неравнодушие. Отблагодарю. Термины такие, потому что курсовая это) В связи с тем, что болел долго + уезжал далеко, так получилось, что ну не смог я это сделать. Да еще и дали курсач на 3 недели. Я общие вещи знаю, но такое не могу написать сам. Сдача уже завтра вечером. Такие дела. Еще раз огромное спасибо




Сообщение отредактировал graniza - Среда, 23 Января 2019, 23:43
DivESДата: Среда, 23 Января 2019, 23:48 | Сообщение # 10
заслуженный участник
Сейчас нет на сайте
graniza, вечером? Я только с работы вечером вернусь :(
Попробую сейчас дописать, что смогу. Не отвечай, я просто дополню сообщение!

Добавлено (24 Января 2019, 00:13)
---------------------------------------------
Тут старый код:


Добавлено (24 Января 2019, 00:14)
---------------------------------------------
Первые две строчки можешь удалить, они для работы кириллицы в Linux.
И да, не забывай про важность табуляций в Python ^_^
Можешь успеть спросить что-нибудь, пока я не ушёл)

Добавлено (24 Января 2019, 00:53)
---------------------------------------------
Код
from random import randint
from statistics import mean, stdev, pvariance

# 52 deck of cards ranked 1-13
# shuffle the deck at game start
# board of 10 spots
# discard pile
# rank: ace=low k=high
# when placing card, every space to left is empty or lower rank
# every space to right is empty or higher rank
# loss = 6th discard
# win = at least one card on every spot on board

lossCount = 0;
winCount = 0;

#Список полученных результатов (очков):
scoresList = list();

#Даём пользователю возможность ввести количество пасьянсов
#(без каких-либо проверок: ожидаем, что пользователь не дурак и введёт число)
solitaireCount = input("Введите количество пасьянсов: ");

for z in range(0, solitaireCount):
    # new deck
    deck = list();
    # new discard pile
    discard = list();
    # 4 of each card
    for i in range(1,5):
  for x in range(1,14):
   deck.append(x);

    # shuffling the deck
    for z in range(0,51):
  w = randint(z,51)
  tempCard = deck[z];
  deck[z] = deck[w];
  deck[w] = tempCard;

    #print deck;
    #print len(deck);

    # Initializing the board
    board = [None]*10;
    # Automating card draws from the deck
    for i in range(0,51):
  #print board;
  card = deck.pop();

  # Place card in it's corresponding spot if game isn't over yet
  if (None in board) and (len(discard)<6):
   if len(board)>=card:
    board[card-1] = card;
   else:
    discard.append(card);

    # Loss conditions
    if len(discard)==6:
  lossCount +=1;
  print ("Поражение!");

    # Win conditions
    if ((None in board) == False):
  winCount +=1;
  print ("Победа! :)");

    #Записываем результат в список:
    score = 0;
    for curCard in board:
  if (None != curCard):
   score += curCard;
    scoresList.append(score);

    print (board)
    print (discard)
print (winCount);
print ("% побед: " + str((100*float(winCount)/float(solitaireCount))) +"%\n");

#Записываем результаты в файл:
print ("Записываем результаты в текстовый файл... \n");
with open("scores_out.txt", "w") as file:
    for line in scoresList:
  file.write(str(line) + "\n")
    file.close();

#Считываем результаты из файла в список:
print ("Считываем результаты из текстового файла... \n");
scoresFromFile = [];
with open("scores_out.txt", "r") as file:
    for line in file:
  scoresFromFile.append(line.strip());
    file.close();

print ("Работаем со статистикой... \n");
mean = mean(scoresList);
pvariance = pvariance(scoresList);
stdev = stdev(scoresList);

#Записываем полученную статистику в файл:
print ("Записываем полученную статистику в конец файла... \n");
with open("scores_out.txt", "a") as file:
    file.write("Mean = " + str(mean) + "\n");
    file.write("Pvariance = " + str(pvariance) + "\n");
    file.write("Stdev = " + str(stdev) + "\n");
    file.close();

А вот и новый вариант с действующей статистикой (надеюсь, я всё сделал правильно :D ) и с записью/чтением файла. Пусть и без тех дополнительных данных.
Парочка моментов:
1. Будет ругаться на кириллицу - замени все слова на русском (в том числе комменты) на английские.
2. По поводу многострадального statistics. Скачивай прямиком с гит-хаба, если у тебя ещё нет этого модуля.
Переходишь сюда, открывается .py файл.
Сохраняешь его (ПКМ -> "Сохранить как") прямо в папку со своим "проектом". Должен сохраниться как "statistics.py".
Ну, вроде бы всё)
Успехов тебе завтра! B)


Сообщение отредактировал DivES - Четверг, 24 Января 2019, 00:56
granizaДата: Четверг, 24 Января 2019, 01:35 | Сообщение # 11
GraNiza-DeveLoper
Сейчас нет на сайте
Цитата DivES ()
А вот и новый вариант с действующей статистикой (надеюсь, я всё сделал правильно ) и с записью/чтением файла. Пусть и без тех дополнительных данных.
Парочка моментов:
1. Будет ругаться на кириллицу - замени все слова на русском (в том числе комменты) на английские.
2. По поводу многострадального statistics. Скачивай прямиком с гит-хаба, если у тебя ещё нет этого модуля.
Переходишь сюда, открывается .py файл.
Сохраняешь его (ПКМ -> "Сохранить как") прямо в папку со своим "проектом". Должен сохраниться как "statistics.py".
Ну, вроде бы всё)
Успехов тебе завтра!


В каком редакторе работали? ошибку выдает. Я так понял это связано с расположением. Когда передвигаю часть кода, ошибка пропадает, но начинается конфликт с нижней и так далее.




Сообщение отредактировал graniza - Четверг, 24 Января 2019, 02:00
drcrackДата: Четверг, 24 Января 2019, 03:12 | Сообщение # 12
старожил
Сейчас нет на сайте
Цитата
ошибку выдает.

я так понимаю оно еще ctrl+c ctrl+v блокирует и ошибку скопировать не получается, так что приходится словами обьяснять, да?
DivESДата: Четверг, 24 Января 2019, 10:58 | Сообщение # 13
заслуженный участник
Сейчас нет на сайте
graniza, в Geany, это обычный блокнот.
Нужно чётко выставить расположение блоков с помощью табуляций, заменив ими (табуляциями) появившиеся после копирования пробелы.
Сам столкнулся с этим, когда копировал код отсюда :o

Добавлено (24 Января 2019, 11:10)
---------------------------------------------
drcrack, ошибка "unindent does not match any outer indentation level", проверяй :D

IrbisДата: Четверг, 24 Января 2019, 11:25 | Сообщение # 14
почетный гость
Сейчас нет на сайте
graniza, ды тут вроде даже человеку не знакомому с языком невооруженным взглядом видно, что просто код поехал. Например

И так далее) Видимо парсер форума на Python не рассчитан. Уж табы то сами расставьте :D
DivESДата: Четверг, 24 Января 2019, 11:43 | Сообщение # 15
заслуженный участник
Сейчас нет на сайте
Irbis, блин, а ведь точно! Не обратил внимания на то что на форуме отступы съехали. Посмотрел, что синтаксис подсветился и отправил :D
Сейчас должно быть правильно:


Сообщение отредактировал DivES - Четверг, 24 Января 2019, 11:47
granizaДата: Четверг, 24 Января 2019, 12:14 | Сообщение # 16
GraNiza-DeveLoper
Сейчас нет на сайте
Цитата DivES ()
Irbis, блин, а ведь точно! Не обратил внимания на то что на форуме отступы съехали. Посмотрел, что синтаксис подсветился и отправил
Сейчас должно быть правильно:


Через PyCharm все идеально запустилось. Спасибо большое. А среднее число ходов можно найти через Average от discard и среднее число точек принятия решения через median ?


DivESДата: Четверг, 24 Января 2019, 12:22 | Сообщение # 17
заслуженный участник
Сейчас нет на сайте
С числом ходов да, скорее всего от discard. А для среднего числа точек принятия решения я бы ввёл новую переменную в этом if-е:
Код
# Place card in it's corresponding spot if game isn't over yet
        if (None in board) and (len(discard)<6):

Ведь по идее именно тут происходит принятие решения. Или я не прав?


Сообщение отредактировал DivES - Четверг, 24 Января 2019, 12:23
granizaДата: Четверг, 24 Января 2019, 13:14 | Сообщение # 18
GraNiza-DeveLoper
Сейчас нет на сайте
Цитата DivES ()
Ведь по идее именно тут происходит принятие решения. Или я не прав?

Да, точно


DivESДата: Четверг, 24 Января 2019, 14:53 | Сообщение # 19
заслуженный участник
Сейчас нет на сайте
graniza, трудности с добавлением этих двух параметров?
granizaДата: Четверг, 24 Января 2019, 15:25 | Сообщение # 20
GraNiza-DeveLoper
Сейчас нет на сайте
Цитата DivES ()
graniza, трудности с добавлением этих двух параметров?

Не понимаю, он не то выдает то что нужно


Форум игроделов » Программирование » Скриптовые языки программирования » Нахождение среднего значения и стандартного отклонения
  • Страница 1 из 2
  • 1
  • 2
  • »
Поиск:

Все права сохранены. GcUp.ru © 2008-2019 Рейтинг