Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 23, 2013 22:05:22

Informatikum
Зарегистрирован: 2013-12-11
Сообщения: 55
Репутация: +  -1  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

Пользователь вводит значение в диапазонге 1-12, программа выдает название сезона.

months = 13
while months:
	print('Enter the numonthsber of months (To exit, enter "0"): ')
	months = int(input())
	if (months == 12 or months == 1 or months == 2):
		print('Winter')
	elif (months == 3 or months == 4 or months == 5):
		print('Spring')
	elif (months == 6 or months == 7 or months == 8):
		print('Summer')
	elif (months == 9 or months == 10 or months == 11):
		print('Autumn')
	else:
		print('To exit, enter "0"')
		

Можно ли тоже самое решить с помощью списка или словоря?
Что-то вроде:
m = {[1,2,3] : "a", 2 : "b"}
Если при выборе первый элемент попадает в диапазон, то выдается один ответ.

Офлайн

#2 Дек. 23, 2013 23:01:35

bismigalis
Зарегистрирован: 2010-10-02
Сообщения: 449
Репутация: +  47  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

season_name = ['Winter', 'Spring', 'Summer', 'Autumn']
season_index = [0, 0, 1, 1, 1, 2, 2, 2, 3, 3, 3, 0]
season_name[season_index[num - 1]]

Отредактировано bismigalis (Дек. 23, 2013 23:09:28)

Офлайн

#3 Дек. 23, 2013 23:01:39

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

Офлайн

#4 Дек. 23, 2013 23:07:56

Informatikum
Зарегистрирован: 2013-12-11
Сообщения: 55
Репутация: +  -1  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

month = {12 : 'Winter', 1 : 'Winter', 2 : 'Winter',
	3 : 'Spring', 4 : 'Spring', 5 : 'Summer',
	6 : 'Summer', 7 : 'Summer', 8 : 'Summer',
	9 : 'Autumn', 10 : 'Autumn', 11 : 'Autumn'}
i = 13
while i:
	i = int(input())
	
	if ((i > 0) and (i < 13)):
		print(month[i])
	elif (i > 12):
		print('Такого месяца не существует. Для выхода из программы введите "0".')
	else:
		print('Программа завершена.')

Написал с использованием словоря. Возмно ли наоборот сделать. Чтобы в словаре указывал один раз только сезон, без повторов, а цифровое обозначение указать в диапазоне списком.

Офлайн

#5 Дек. 23, 2013 23:09:40

Informatikum
Зарегистрирован: 2013-12-11
Сообщения: 55
Репутация: +  -1  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

Singularity, спасибо!

Офлайн

#6 Дек. 23, 2013 23:31:24

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

Что-то я туплю. Так проще же

m = 1 
print ["Зима", "Весна", "Лето", "Осень"][(m % 12) // 3]

Отредактировано Singularity (Дек. 23, 2013 23:33:43)

Офлайн

#7 Дек. 23, 2013 23:39:43

Informatikum
Зарегистрирован: 2013-12-11
Сообщения: 55
Репутация: +  -1  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

Singularity, пошутил чотко! Однако работает. Вариант на хабре пока не удалось завести.

bismigalis, спасибо за пример.

Питон удивляет каждый день. Читаю Лутца, но пока вот о таких выкрутасах даже подумать не мог…

Офлайн

#8 Дек. 24, 2013 00:38:14

Singularity
Зарегистрирован: 2011-07-28
Сообщения: 1387
Репутация: +  75  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

Informatikum
так вроде ж работает. Или нет ?

Офлайн

#9 Дек. 24, 2013 11:42:39

Informatikum
Зарегистрирован: 2013-12-11
Сообщения: 55
Репутация: +  -1  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

Singularity, шайтан штука, работает
Конструкции разобрал. Без вас бы о таком чуде и не узнал бы…

С хабра правда пример пока не осилил. В целом, меня предыдущие варианты устраивают.

Офлайн

#10 Дек. 24, 2013 18:41:13

Master_Sergius
Зарегистрирован: 2013-09-12
Сообщения: 271
Репутация: +  7  -
Профиль   Отправить e-mail  

Если ответ выпадает в диапазоне, то выводить один ответ с помощью списка или словоря?

Как вариант под первое ваше пожелание, но хз красиво ли очень:

seasons = {(12, 1, 2):'winter', (3,4,5):'spring', (6,7,8):'summer', (9,10,11):'autumn'}
i = 3
for keys in seasons:
   if i in keys:
       print seasons[keys]
       break

Ну и это выведет - spring. Возможно, как-то можно улучшить. По крайней мере, 100% подходит под любое схожее задание, где просто так остатком от деления не получишь нужного результата )



———————————————————————————
Мой блог о семействе *nix: http://nixtravelling.blogspot.com/

Отредактировано Master_Sergius (Дек. 24, 2013 18:42:55)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version