Уведомления

Группа в Telegram: @pythonsu

#1 Апрель 19, 2012 13:12:39

Amazzzonka
Зарегистрирован: 2012-04-17
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Python детсадовского уровня (циклы, кортежи, списки)

Всем привет!
Начала изучать Python по учебнику Майкла Доусона “Прогрммируем на python (v.3.0.)”. Из опыта программирования - только уроки информатики в школе + курс матмоделирования в универе, но, думаю, это не проблема при сильном желании научиться (это так, предыстория).
Теперь, собсно, сабж: дошла до темы кортежи и списки (всего лишь) и столкнулась с заданиями:
1) создайте программу, которая будет выводить список слов в случайном порядке. На экране должны печататься без повторений все слова из представленного списка.
Ее попробовала реализовать. Прикол в том, что слова она местами меняет, но вот и печатает их по одной буковке. Почему так и как это можно исправить?

# Messed words
#Выводит список слов в случайном порядке.
#На экране печатаются без повторения все слова из представленного списка.
#
import random
new_script = []
script = ['life','mountain','spirit','reason','wind','guitar','eagle','rainbow']
print('\nNow I\'m going to print my list in correct order: ', script)
print('\nNow I\'m going to print this script in random order: ')
while script:
    position = random.randrange(len(script))
    new_script += script[position]
    script = script[:position] + script[(position + 1):]
    
print(new_script)
      
input('\n\nPress Enter to exit. ')

2) Напишите программу “Генератор персонажей” для ролевой игрыю Пользователю должно быть предоставлено 30 пунктов, которые можно распределить между 4мя характеристиками: Сила, Здоровье, Мудрость и Ловкость. Надо сделать так, чтобы пользователь мог не только брать эти пункты из общего “пула”, но и возвращать их туда из характеристик, которым он решит присвоить другие значения.
Тут вообще тупик - не знаю, с чего и начать(((
Тут такая просьба: я, конечно, понимаю, что проще код написать, чем натолкнуть человека на мысль так, чтобы он сам это сделал, но все же: подскажите, чему нужно уделить внимание и каким образом можно было бы реализовать. (я пока даже форму общения с пользователем придумать не могу)

Отредактировано Amazzzonka (Апрель 19, 2012 14:49:26)

Прикреплённый файлы:
attachment words_random_001.ex.py (724 байта)

Офлайн

#2 Апрель 19, 2012 14:25:58

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Python детсадовского уровня (циклы, кортежи, списки)

Ошибки в коде:

Во-первых код совсем неправильный, то есть делает не то, что Вы ожидаете.
То есть. По-символьно выводит из-за

new_script += script[position]
Надо использовать
new_script.append(script[position])

Во-вторых вместо ваших извращений со слайсами можно писать просто
del script[position]

В-третьих достаточно было бы использовать random.shuffle



Отредактировано cutwater (Апрель 19, 2012 14:30:46)

Офлайн

#3 Апрель 19, 2012 14:29:59

prius
Зарегистрирован: 2012-04-19
Сообщения: 2
Репутация: +  0  -
Профиль  

Python детсадовского уровня (циклы, кортежи, списки)

Потому что здесь

new_script += script[position]
script - строка (т.е. по сути список, состоящий из букв).
Пример тебе для размышления:
>>> a = []
>>> a += "some text"
>>> a
['s', 'o', 'm', 'e', ' ', 't', 'e', 'x', 't']
Замена выделенной строки в твоём скрипте на
new_script.append(script[position])
решит твою проблему
Успехов!

Офлайн

#4 Апрель 19, 2012 14:30:10

Amazzzonka
Зарегистрирован: 2012-04-17
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Python детсадовского уровня (циклы, кортежи, списки)

cutwater
Ошибки в коде:

Во-первых код совсем неправильный, то есть делает не то, что Вы ожидаете.
То есть. По-символьно выводит из-за
new_script += script[position]
Надо использовать
new_script.append(script[position])

Во-вторых достаточно было бы использовать random.shuffle

спасибо! я просто последнюю функцию не знаю)))) сейчас гляну в справке, как она применяется!

Офлайн

#5 Апрель 19, 2012 14:32:30

cutwater
От:
Зарегистрирован: 2009-01-08
Сообщения: 444
Репутация: +  19  -
Профиль   Отправить e-mail  

Python детсадовского уровня (циклы, кортежи, списки)

И еще совет. Поменьше экспрессии. Писать 32м шрифтом не значит подчеркивать свою важность. Скорее наоборот, раздражать читающих.



Офлайн

#6 Апрель 19, 2012 14:42:41

Amazzzonka
Зарегистрирован: 2012-04-17
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Python детсадовского уровня (циклы, кортежи, списки)

cutwater
И еще совет. Поменьше экспрессии. Писать 32м шрифтом не значит подчеркивать свою важность. Скорее наоборот, раздражать читающих.
оке, просто тут в редакторе сообщений только 2 опции: big and small. я ж не думала, что до такой степени big!)

Офлайн

#7 Апрель 19, 2012 16:36:44

beelze
Зарегистрирован: 2012-04-11
Сообщения: 104
Репутация: +  3  -
Профиль   Отправить e-mail  

Python детсадовского уровня (циклы, кортежи, списки)

>Тут вообще тупик - не знаю, с чего и начать(((
оказывается, кто-то все же выполняет все эти задания в книжках
По-хорошему, для _достойного_ выполнения этого «задания» нужно нечто гуевое, что, в свою очередь, требует осознанного выбора используемой GUI библиотеки и соответствующих навыков. Поэтому я бы на данном этапе предложил Вам реализовать интерфейс этого задания по-минимуму (ввод/вывод на консоль) и сосредоточиться на собственно программной логике.

Офлайн

#8 Апрель 19, 2012 18:01:54

Kane
Зарегистрирован: 2012-04-19
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Python детсадовского уровня (циклы, кортежи, списки)

Хм, тоже по этой книжке учу пайтон.
Первую задачку решил так:

import random
words = ('зажигалка', 'ножницы', 'стул', 'кресло', 'руль', 'чашка', 'диск', 'копилка', 'люстра', 'жалюзи')
count = 0
wordsPrint = []
wordsLen = len(words)
#print('в кортеже words', wordsLen, 'элементов') #проверка
while count < wordsLen:
    numberRandom = random.randint(0, wordsLen - 1) #генерируется случайное число
    #print('случайное число:', numberRandom) #проверка
    wordRandom = words[numberRandom] #берётся слово, номер которого - сгенерированное выше случайное число
    #print('случайное слово:', wordRandom) #проверка
    if wordRandom not in wordsPrint:
        wordsPrint.append(wordRandom) # слово выше добавляется в список
        #print('Слова в списке :', wordsPrint) #проверка
        print(wordsPrint[count])
        count += 1

Вторую задачку начинал, форму общения с пользователем взял из “переводчика” (в моём издании стр. 156), но отчего-то забросил, сделал только прибавление пунктов к характеристике

Отредактировано Kane (Апрель 19, 2012 18:12:19)

Офлайн

#9 Апрель 19, 2012 18:31:39

Amazzzonka
Зарегистрирован: 2012-04-17
Сообщения: 11
Репутация: +  1  -
Профиль   Отправить e-mail  

Python детсадовского уровня (циклы, кортежи, списки)


Вторую задачку начинал, форму общения с пользователем взял из “переводчика” (в моём издании стр. 156), но отчего-то забросил, сделал только прибавление пунктов к характеристике

т.е. ты создавал не список с вложением, а словарь? я думала сделать по аналогии с рекордами, но пока не хватает понимания, как использовать уже знакомые элементы для реализации этой проги, а тем более с вариантом “возвращения” поинтов.
а предыдущая неожиданно реализована!

Офлайн

#10 Апрель 19, 2012 18:57:41

Kane
Зарегистрирован: 2012-04-19
Сообщения: 17
Репутация: +  0  -
Профиль   Отправить e-mail  

Python детсадовского уровня (циклы, кортежи, списки)

Я простой список использовал (lists который). Переводчик упомянул, когда начал листать книжку в поиске этих задачек, она первая и попалась. Я оттуда только меню и подсмотрел. В рекордах оно кажется такое же по сути. В общем, у меня идея была такая: показать меню, 1 это сила, 2 здоровье и т.д. Обратиться к списку по адресу

список[введённое_число - 1]
(- 1 т.к. первое значение в списке под нулём ). В списке я хранил 4 значения, эти самые характеристики. Потом пользователю предлагалось ввести, на сколько изменится выбранная хар-ка, и править её прям в нужном списке. Этот ввод писать в переменную, и вычитать эту переменную из кол-ва очков.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version