Уведомления

Группа в Telegram: @pythonsu

#1 Март 28, 2010 13:22:34

sumrak_ss
От:
Зарегистрирован: 2009-11-21
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

инвентарь

from msvcrt import getch
import data

list_1=['[a]', '[b]', '[c]', '[d]', '[e]', '[f]', '[g]',\
'[h]', '[i]', '[j]', '[k]', '[l]', '[m]', '[n]',\
'[o]', '[p]', '[q]', '[r]', '[s]', '[t]', '[u]',\
'[v]', '[w]', '[x]', '[y]', '[z]']

list_2=[ u'ППШ-41', u'СКС', u'АК-47']

list_3=[data.ppsh, data.sks, data.ak]

print '\n'.join(["%s %-16s x%d" % item for item in zip(list_1, list_2, list_3)])

while 1:
c=getch()
if c=='a':
if list_2[0]==u'АК-47':
print u'Автомат Калашникова'

elif list_2[0]==u'ППШ-41':
print u'Пистолет-пулемёт Шпагина'

elif list_2[0]==u'СКС':
print u'Самозарядный карабин Симонова'

if c=='b':
if list_2[1]==u'АК-47':
print u'Автомат Калашникова'

elif list_2[1]==u'ППШ-41':
print u'Пистолет-пулемёт Шпагина'

elif list_2[1]==u'СКС':
print u'Самозарядный карабин Симонова'

if c=='c':
if list_2[2]==u'АК-47':
print u'Автомат Калашникова'

elif list_2[2]==u'ППШ-41':
print u'Пистолет-пулемёт Шпагина'

elif list_2[2]==u'СКС':
print u'Самозарядный карабин Симонова'
Пожалуйста, помогите упростить эту чудовищную конструкцию, учитывая что list_2 может быть в несколько раз длиннее. Или может вообще нужно пойти другим путем?? Это инвентарь в игре..



Отредактировано (Март 28, 2010 18:54:55)

Офлайн

#2 Март 28, 2010 13:33:50

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

инвентарь

может чета типа такого

obj = { u'АК-47':u'Автомат Калашникова', u'ППШ-41':u'Пистолет-пулемёт Шпагина' }
list_2 = { 'a':u'ППШ-41', 'b':u'АК-47' }

while 1:
print obj[ list_2[ getch() ] ]

Офлайн

#3 Март 28, 2010 13:48:16

sumrak_ss
От:
Зарегистрирован: 2009-11-21
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

инвентарь

o7412369815963
может чета типа такого
obj = { u'АК-47':u'Автомат Калашникова', u'ППШ-41':u'Пистолет-пулемёт Шпагина' }
list_2 = { 'a':u'ППШ-41', 'b':u'АК-47' }

while 1:
print obj[ list_2[ getch() ] ]
А как в этом случае изменить эту строку чтобы вывод оставался прежним?
print '\n'.join(["%s %-16s x%d" % item for item in zip(list_1, list_2, list_3)])



Офлайн

#4 Март 28, 2010 13:58:59

sumrak_ss
От:
Зарегистрирован: 2009-11-21
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

инвентарь

list_2 = { 'a':u'ППШ-41', 'b':u'АК-47' }
дело в том что предметы в инвентарь добавляются в произвольном порядке, поэтому нельзя ‘a’ присвоить ‘ППШ-41’ и т.д.



Офлайн

#5 Март 28, 2010 14:28:50

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

инвентарь

sumrak_ss
list_2 = { 'a':u'ППШ-41', 'b':u'АК-47' }
дело в том что предметы в инвентарь добавляются в произвольном порядке, поэтому нельзя ‘a’ присвоить ‘ППШ-41’ и т.д.
почему нельзя, нашел АК - повесил на кнопку А, нашел ППШ - повесил на кнопку Б и тд

а вообще все зависит от цели и начальных данных

Офлайн

#6 Март 28, 2010 15:01:37

sumrak_ss
От:
Зарегистрирован: 2009-11-21
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

инвентарь

o7412369815963
нашел АК - повесил на кнопку А, нашел ППШ - повесил на кнопку Б и тд
ты имеешь ввиду зарезервировать для каждого предмета свою букву-“кнопку”? нет, они должны быть независимы, первый столбец (“кнопки”) строго в алфавитном порядке.
вывод должен быть что-то вроде:

ППШ-41 х10
СКС х20
АК-47 х30

Нажатие на ‘а’, например, выводит описание ППШ, теперь если выбросить все ППШ (удалить list_2), то нажатие на ‘а’ будет выводить описание СКС:

СКС х20
АК-47 х30
(колличество предметов это значения переменных кот хранятся в data)



Отредактировано (Март 28, 2010 19:00:00)

Офлайн

#7 Март 28, 2010 15:27:40

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

инвентарь

вот терь уже попонятней чего надо

# coding: utf8

class Obj():
def __init__(self,name,col):
self.name = name
self.col = col
def __repr__(self):
return '%s x%d' % (self.name,self.col)

obj = { u'АК-47': Obj(u'Автомат Калашникова',10), u'ППШ-41': Obj(u'Пистолет-пулемёт Шпагина',20) }
list_2 = [u'ППШ-41', u'АК-47']

print '\n'.join( ['[%c] %s' % (ord('a')+i,obj[x]) for i,x in enumerate(list_2)] )

while 1:
c = raw_input('(a,b,... "-" = del):')
# c = getch()
if c == '-': list_2 = list_2[1:]
else:
n = ord(c[0]) - ord('a')
print obj[list_2[n]]
при вводе a,b,c… Выводит инфо по объекту который лежит в той ячейке
при вводе “-”, удаляет первую ячейку

Отредактировано (Март 28, 2010 15:29:44)

Офлайн

#8 Март 29, 2010 04:28:19

sumrak_ss
От:
Зарегистрирован: 2009-11-21
Сообщения: 46
Репутация: +  0  -
Профиль   Отправить e-mail  

инвентарь

вот что выдает:

Пистолет-пулемёт Шпагина x20
Автомат Калашникова x10
(a,b,… “-” = del):a
Traceback (most recent call last):
File “go.py”, line 21, in <module>
print obj[list_2]
UnicodeEncodeError: ‘ascii’ codec can't encode characters in position 0-7: ordinal not in range(128)



Офлайн

#9 Март 29, 2010 08:20:45

Griffon
От: Ukrain, Zaporozhie
Зарегистрирован: 2009-03-04
Сообщения: 324
Репутация: +  11  -
Профиль   Отправить e-mail  

инвентарь

Это на “с” что ли нажали? В любом случае надо проверять входит ли N в длину массива.



Офлайн

#10 Март 29, 2010 14:54:28

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

инвентарь

Griffon
Это на “с” что ли нажали? В любом случае надо проверять входит ли N в длину массива.
там наверно на русском языке ввели.

вообщем я примерную баз для развития дал

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version