Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > Python
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.04.2017, 15:09   #1
m-gray
Пользователь
 
Регистрация: 08.04.2017
Сообщений: 12
По умолчанию Модуль random - Python

Всем привет. Я изучаю питон по книге Эрик Метиз “Изучаем Python”. Есть такое упражнение:
9-14 . Кубики: модуль random содержит функции для генерирования случайных чисел раз-
ными способами . Функция randint() возвращает целое число в заданном диапазоне . Следу-
ющий код возвращает число от 1 до 6:
from random import randint
x = randint(1, 6)
Создайте класс Die с одним атрибутом с именем sides, который содержит значение по умол-
чанию 6 . Напишите метод roll_die() для вывода случайного числа от 1 до количества сторон
кубика . Создайте экземпляр, моделирующий 6-гранный кубик, и имитируйте 10 бросков .
Создайте модели 10- и 20-гранного кубика . Имитируйте 10 бросков каждого кубика .
Просидел два вечера, но решения удовлетворяющего не нашел. Может не внимательно изучал материал. Подскажите где ошибка или что я делаю не так?

Код:
def __init__(self):
self.sides = 6
def roll_die(self, x, y): 
self.x = x
self.y = self.sides
print(randint(self.x, self.y)) 
kub = Die() 
kub.roll_die(4)
______________________
Используйте тег [CODE] (кнопка с решеткой # в форме сообщения) при вставке кода на форум.

Последний раз редактировалось Alex11223; 08.04.2017 в 15:26.
m-gray вне форума Ответить с цитированием
Старый 09.04.2017, 11:11   #2
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

"Умирать" и "игральный кубик" в английском, вроде, по-разному пишутся...
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

from random import randint


# ====================================================
class Dice:

    def __init__( self, nSides=6 ):
        self.nSides = nSides


    def roll_dice( self ):
        return randint( 1, self.nSides )



# ====================================================
def main():

    nSides = [6, 10, 20]
    nRolls = 10

    for n in nSides:
        print "\nDice-" + str( n ) + ":"

        # An artifical if just to demonstrate using the constructor with default parameter(s)
        if n == 6:
           kub = Dice()
        else:
           kub = Dice( n )

        for i in range( nRolls ):
           print( "{:3d}".format( kub.roll_dice() ) )

           # If you wish to be a purist, you can call a destructor here (of course, after adding the Destructor itself to the class).

# ====================================================

main()
Питон 2. В качестве упражнения можете теперь добавить проверку на неположительное число граней в вызове конструктора.
Vago вне форума Ответить с цитированием
Старый 09.04.2017, 19:44   #3
m-gray
Пользователь
 
Регистрация: 08.04.2017
Сообщений: 12
По умолчанию

Спасибо большое, я изучаю питон 3, и пока не дошли еще до конструкций такого типа:
def main():

nSides = [6, 10, 20]
nRolls = 10
Я понял, что создается новая функция и в нее передаются аргументы class Dice
m-gray вне форума Ответить с цитированием
Старый 09.04.2017, 19:57   #4
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

main это просто обычная функция, без аргументов.

Как можно дойти до классов раньше функций?
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 09.04.2017, 20:25   #5
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Цитата:
Сообщение от m-gray Посмотреть сообщение
Спасибо большое, я изучаю питон 3, и пока не дошли еще до конструкций такого типа:
def main():
Если Вы начали изучать классы ДО изучения функций, то в вашей методике обучения что-то не так.

Цитата:
Сообщение от m-gray
nSides = [6, 10, 20]
Ладно, пусть будет проще:
Код:
#!/usr/bin/python
# -*- coding: cp1251 -*-

from random import randint


# ====================================================
class Dice:

    def __init__( self, nSides=6 ):
        self.nSides = nSides


    def roll_dice( self ):
        return randint( 1, self.nSides )



# ====================================================

print "Number of Dice's sides = ?",; nSides = input()
print "Number of rolls = ?",; nRolls = input()

kub = Dice( nSides )

for i in range( nRolls ):
     print( "{:3d}".format( kub.roll_dice() ) )
Цитата:
Сообщение от m-gray
nRolls = 10
Как Вы умудрились "не дойти" до "конструкции" под названием "оператор присваивания"?!

Цитата:
Сообщение от m-gray
Я понял, что создается новая функция и в нее передаются аргументы class
Нет. В первом варианте в ф-ии main() cоздаётся экземпляр класса Dice, а затем nRolls раз происходит вызов метода roll_dice() этого класса. Во втором варианте я задавил в себе сиониста и main() вообще убрал. Но суть работы с классом от этого не изменилась.
Vago вне форума Ответить с цитированием
Старый 11.04.2017, 17:32   #6
m-gray
Пользователь
 
Регистрация: 08.04.2017
Сообщений: 12
По умолчанию

Спасибо. Я учу все по порядку функции, классы и т.д. Автор дает задание соответствующее тому, что пройдено. У вас хорошее решение в 1 варианте. Я посидел, разобрался и все понял. Но второй вариант больше подходит по уровню пройденного материала. К сожалению быстрей чем могу (усвояемость материала), учиться не получается. Спасибо еще раз.
m-gray вне форума Ответить с цитированием
Старый 11.04.2017, 21:02   #7
Vago
Форумчанин
 
Регистрация: 15.01.2010
Сообщений: 948
По умолчанию

Не за что. Удачи!
Vago вне форума Ответить с цитированием
Старый 17.04.2017, 16:23   #8
m-gray
Пользователь
 
Регистрация: 08.04.2017
Сообщений: 12
По умолчанию

Добрый день, не могли бы Вы мне еще раз помочь, а именно:

10-4 . Гостевая книга: напишите цикл while, который в цикле запрашивает у пользователей
имена . При вводе каждого имени выведите на экран приветствие и добавьте строку с со-
общением в файл с именем guest_book .txt . Проследите за тем, чтобы каждое сообщение
размещалось в отдельной строке файла .


У меня получилось так:

Код:
greetings = {}
#Установка флага продолжения опроса.
name_active = True
while name_active:
    #Запрос имени и ответ пользователю.
    name = input("\nКак ваше имя? ")
    greeting = ("Добрый день, " + name.title() + '!')   
    print(greeting)
    #Ответ сохраняется в словаре:
    greetings[name] = greeting
    #Проверка продолжения опроса.
    repeat = input("Хотите продолжить? (y/n)")
    if repeat == 'n':
        name_active = False
        # Опрос завершен, вывести результаты.
        #print("\n--- Результаты опроса ---")
        for name, greeting in greetings.items():
            guest_text =(name + '\n\t' + greeting)
            print(guest_text)
#Запись в файл                
filename  = 'guest_book.txt'     
with open(filename, 'w') as file_object:
    file_object.write(guest_text)

#Чтение файла        
with open('guest_book.txt') as file_object:
    contents = file_object.read()
    print(contents)
Но в файл записывается только последний ответ, а требуется несколько, что не так?
Спасибо!
m-gray вне форума Ответить с цитированием
Старый 17.04.2017, 16:27   #9
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Так что записываете, то и записывается.
Вы ж только в самом конце программы это делаете.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.
Alex11223 вне форума Ответить с цитированием
Старый 17.04.2017, 17:32   #10
m-gray
Пользователь
 
Регистрация: 08.04.2017
Сообщений: 12
По умолчанию

Так я не могу сообразить как правильно записать!
m-gray вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Документации, учебники, уроки и полезные материалы по Python, PyQt, PySide pompiduskus Python 4 22.07.2022 10:16
В модуль поместить функции сортировки символьных и числовых массивов. Подключить созданный модуль и применить эти функции к вводим Tuns Помощь студентам 6 27.05.2014 15:07
Создать собственный модуль и программу, использующую этот модуль. Oraner Паскаль, Turbo Pascal, PascalABC.NET 2 02.12.2012 13:15
Модуль Graph или графический модуль Seferus Паскаль, Turbo Pascal, PascalABC.NET 0 11.12.2011 13:15
Типизированные файлы, модуль Crt, Модуль Graph Kate_Fleur Помощь студентам 1 06.05.2010 17:43