Comments 126
«Пайтон» — это Питон (Python)?
-10
лол
-12
«Пайтон» — это «Пайтон» (в честь Летающего Цирка Монти Пайтона), а питон — змея.
+9
UFO just landed and posted this here
Я очень уважаю русский язык. Только вот тот факт, что название языка «Пайтон» звучит так же как змея «пайтон» — не более чем совпадение. К змее это слово отношения не имеет.
Кстати, называете ли в «Руби» «Рубином», «Си» — «Вэ», а «Бейсик» — «Базисным»?
Кстати, называете ли в «Руби» «Рубином», «Си» — «Вэ», а «Бейсик» — «Базисным»?
+12
UFO just landed and posted this here
Вы не поверите, но змею «пайтон» по-русски зовут «питон».
А остров «Джава» по-русски зовут «Ява».
Ну так тут принято.
А остров «Джава» по-русски зовут «Ява».
Ну так тут принято.
-3
Змею — да. А тут «Пайтон» — фамилия.
+8
Тогда уж «Пайсн». Еще, кстати, обратите внимание на логотип на python.org
+13
Как представлю, Исаак Азимов, Георгий Кустин, Федор Ртутный. Сразу начинаю гордиться за свою страну.
+2
Во-первых, Азимова по его российским документам действительно звали Исааком.
Во-вторых, последний-то Фредди, а не Тедди — так что Фёдор мимо.
Во-вторых, последний-то Фредди, а не Тедди — так что Фёдор мимо.
+4
Георгий Кустин, Федор Ртутный
— Кто все эти люди?
— Кто все эти люди?
+3
Давайте сразу Иван Севастьянович Ручьёв
+6
«К змее это слово отношения не имеет»
тем не менее, присутствие в символике языка изображений змей говорит о том, что такое совпадение не только не игнорируется сообществом, но и приветствуется им. поэтому не вижу причин отказываться от русской альтернативы названия языка.
тем не менее, присутствие в символике языка изображений змей говорит о том, что такое совпадение не только не игнорируется сообществом, но и приветствуется им. поэтому не вижу причин отказываться от русской альтернативы названия языка.
+6
UFO just landed and posted this here
Мы из пятой колонны. Выучили нас на свою голову, что теперь делать.
0
Я питонщик и считаю, что в русском языке нужно говорить «Питон». Вы же не говорите «Зирокс» и «Мэк оу-эс тэн»?
+14
Блин, если вы питонщик, то должны знать, что холивор здесь не про произношение английских слов по английски в русской речи, а в том, что имя языка — это имя персонажа (человека). А имена в русской речи не переводятся и произносятся как есть.
Претензия имеет все основания на существование.
Поэтому в писменной речи я стараюсь употреблять Python, и пусть все читают как хотят. А в устной по русски я говорю «Питон» просто потому что.
Другие торговые марки, которые содержат в себе имена, воспринимаются нормально и произносятся как по-английски — Hewlett-Packard, Johnson&Johnsons, Ford и другие.
Претензия имеет все основания на существование.
Поэтому в писменной речи я стараюсь употреблять Python, и пусть все читают как хотят. А в устной по русски я говорю «Питон» просто потому что.
Другие торговые марки, которые содержат в себе имена, воспринимаются нормально и произносятся как по-английски — Hewlett-Packard, Johnson&Johnsons, Ford и другие.
+8
А имена в русской речи не переводятся и произносятся как есть.
Ну да, Джордж Уошингтон и Айзек Нью́тон одобряют ваше утверждение.
+3
А Айзек Азимов, Джордж Буш, Фредди Меркюри — ваше.
То, что в русском языке принято коверкать некоторые имена (например, безграмотное «Фрейд» вместо «Фройд» или «Вашингтон» вместо «Уошинтон»), это не значит, что каждый русскоговорящий обязан коверкать все иностранные имена.
PS К иностранцам всегда представляюсь «Андрей», а не «Эндрю».
То, что в русском языке принято коверкать некоторые имена (например, безграмотное «Фрейд» вместо «Фройд» или «Вашингтон» вместо «Уошинтон»), это не значит, что каждый русскоговорящий обязан коверкать все иностранные имена.
PS К иностранцам всегда представляюсь «Андрей», а не «Эндрю».
+4
UFO just landed and posted this here
Ну я бы не стал называть это «коверканием». Есть «устоявшиеся» интерпретации имён и названий. Ну, вот к примеру, мы же не говорим «Хамбург», хотя правильно именно так. Этот город всю жизнь был Гамбургом. А вот название Хайдельберг употребляется, равно как и Гейдельберг. Также и с Питон/Пайтон. Язык постоянно развивается, а уж что приживётся — время покажет. Пайтон пока что режет слух, честно говоря.
+1
Эдак можно и до Уотсона/Ватсона дойти.
+1
Давайте тогда на основании того, что название города Москва (Moscow) основано на названии реки Москва (Moskva) требовать, что бы иностранцы использовали перевод названия реки в качестве перевода названия города.
0
Джек Ландон, Исаак Азимов.
Честно, мне самому не нравится, что так сильно (я не беру во внимание, что в русском и английском одинаковых звуков не так уж много) транскрипция и написание меняется, но не вижу повода для холивара. Это общепринято, не только в русском языке. Да и нашли повод, чтоб ругаться
Честно, мне самому не нравится, что так сильно (я не беру во внимание, что в русском и английском одинаковых звуков не так уж много) транскрипция и написание меняется, но не вижу повода для холивара. Это общепринято, не только в русском языке. Да и нашли повод, чтоб ругаться
+1
Ну почему же «любого»? Мой друг-питонщик в шутку называет свой любимый язык «Пятон» и иногда «Пятончег». :)
+2
И на логотипе тоже 2 господина Монти нарисованы?
Я не сомневаюсь, что Гвидо назвал язык в честь персонажа, но по русски это режет слух. Надеюсь вы не говорите «ПиЭйчПи», «ЭйчТиЭмЭл», «СиПласПлас».
UPD на ваш комментарий выше: На логотипе нарисованы 2 питона. Так что отношение имеет.
Я не сомневаюсь, что Гвидо назвал язык в честь персонажа, но по русски это режет слух. Надеюсь вы не говорите «ПиЭйчПи», «ЭйчТиЭмЭл», «СиПласПлас».
UPD на ваш комментарий выше: На логотипе нарисованы 2 питона. Так что отношение имеет.
+30
Да уж обсудили сто раз логотип-то. Все знают, что Гвидо смирился с неграмотностью и выбрал змей.
-9
Надеюсь, вы не говорите «сэ-плюс-плюс»?
0
Хм… Мы со знакомыми говорим именно «пи-эйч-пи» и «эйч-ти-эм-эл». «Си-плас-плас» — уже перебор, конечно. Как и «цэ-плюс-плюс».
Это всё исключительно дело привычки. Спор на пустом месте.
Это всё исключительно дело привычки. Спор на пустом месте.
+7
как java-разработчику, мне больно смотреть на этот стереотип…
+12
К большому сожалению это не стереотип. Еще хватает людей кто придерживается подобного стиля.
+9
Это Java-EE.
+2
А вы говорите «ява» или «джава»? :)
-3
Все варианты неэффективны — по меньшей мере одно лишнее сравнение
+18
BTW, это первая задача Эйлера.
-4
А это какой Пайтон?
[['FizzBuzz', 'Fizz', 'Buzz'][max(enumerate([not num % 15, not num % 3, not num % 5]), key=lambda x:x[1])[0]] if sum([not num % 15, not num % 3, not num % 5]) else num for num in xrange(1, 101)]
+8
Перлово-хакерский, нет?
+6
Перловый.
+11
А принта нет. Не получается однострочник.
+1
Я вот такой придумал, только не знаю что это за стиль :)
def fizzbuzz(number):
return {
0: number,
number % 3: 'Fizz',
number % 5: 'Buzz',
number % 15: 'FizzBuzz',
}[0]
for number in range(1, 101):
print fizzbuzz(number)
+34
Гениальный :)
Хотя использование диктов для реализации Switch Statement рекомендовано как раз в питоне.
Хотя использование диктов для реализации Switch Statement рекомендовано как раз в питоне.
0
Тут не совсем они. Обычно словари используются для выборки по индексу, а тут дело в том, что при срабатывании индекс затирается :)
+4
{…}[case]
— у вас просто ключ всегда равен нулю — да, switch происходит на стадии формирования дикта. Блин, как клево! :)+6
А гарантируется такое поведение словаря?
+1
Что затираться будет? Сейчас это так, по крайней мере.
Но да, полагаться на такое, наверное, неправильно. Но можно добавить пару строчек и делать апдейт словаря по ключу в нужном нам порядке.
Но да, полагаться на такое, наверное, неправильно. Но можно добавить пару строчек и делать апдейт словаря по ключу в нужном нам порядке.
+1
Вот это (принудительно гарантировать порядок) и будет правильным решением для нормального кода. Иначе, в будущем это место может стать источником трудноуловимых багов. Может отличаться работа на разгых версиях Питон или на разных архитектурах, или разных системных библиотеках.
+1
Порядок гарантирован:
. То же самое написано в документации для Python 3.4.0. Так что нормальный способ. Только учтите, что вычисляться будут все выражения. Без lambda это ни в коем случае не замена switch.
If a comma-separated sequence of key/datum pairs is given, they are evaluated from left to right to define the entries of the dictionary: each key object is used as a key into the dictionary to store the corresponding datum. This means that you can specify the same key multiple times in the key/datum list, and the final dictionary’s value for that key will be the last one given.
. То же самое написано в документации для Python 3.4.0. Так что нормальный способ. Только учтите, что вычисляться будут все выражения. Без lambda это ни в коем случае не замена switch.
+3
Ради интереса проверил, как работает
{1: 1, 1: 2, 1: 3}
не в CPython. PyPy-2.0.2 и jython-2.5.3-r3 выдают {1: 3}
.+1
Спасибо за то, что нашли в доках. Я поленился копаться.
Ну тогда, конечно, пользоваться можно. Хотя лично мое мнение, что для решения олимпиадной задачи ну или вопроса на интервью такой метод работы со словарем подходит неплохо, но в продакшен коде — ни в коем случае.
Ну тогда, конечно, пользоваться можно. Хотя лично мое мнение, что для решения олимпиадной задачи ну или вопроса на интервью такой метод работы со словарем подходит неплохо, но в продакшен коде — ни в коем случае.
+1
А теперь представим ситуацию, если бы питоновский интерпретатор создавал элементы словаря не в том порядке, в каком они записаны в коде, а в каком-нибудь другом.
Хранит же он их в довольно произвольном порядке:
Какой-то Race-Condition-driven development может получиться.
Хранит же он их в довольно произвольном порядке:
>>> {x*x:x*x*x for x in range(1,11)}
{16: 64, 1: 1, 4: 8, 49: 343, 81: 729, 9: 27, 64: 512, 25: 125, 100: 1000, 36: 216}
>>> {x*x+1:x*x*x for x in range(1,11)}
{17: 64, 2: 1, 50: 343, 82: 729, 5: 8, 65: 512, 26: 125, 101: 1000, 10: 27, 37: 216}
Какой-то Race-Condition-driven development может получиться.
+3
Минуту врубался… Очень круто, спасибо :)
+5
Очень круто! Вот только вместо
{…}[0]
наверное лучше сделать {…}.get(0)
, так логичнее, и читать проще…+1
А я такой придумал. Тоже затрудняюсь сказать какой это стиль.
True/False переводятся в числа, складываются по основанию два и этой суммой индексируется массив выходных значений.
True/False переводятся в числа, складываются по основанию два и этой суммой индексируется массив выходных значений.
fizzbuzz = [None, 'Fizz', 'Buzz', 'FizzBuzz']
for number in range(1, 101):
print fizzbuzz[(number % 3 == 0) + (number % 5 == 0) * 2] or number
+6
Больше всего понравился вариант с генератором:
fizzbuzz = ((not x % 3) * 'Fizz' + (not x % 5) * 'Buzz' or x for x in range(1, 101))
for x in fizzbuzz:
print(x)
+7
Кто сделает реализацию в 30 строк на чистом JavaScript?
+5
for(var i=1; i<101; i++){if ((!(i%15))) {console.log("FizzBuzz")} else if(!(i%3)) {console.log("Fizz")} else if (!(i%5)) {console.log("Buzz")} else {console.log(i)}}
Одна строка
Проверяем на 15 потому, что если число делиться и на 3 и на 5, то оно автоматом делиться на 3*5 = 15
0
в одну строку каждый сможет. нужно в 30.
+17
Ну, если благородный дон настаивает:
То не вижу, почему бы другому благородному дону не сделать это
var i=1;
var flag=true;
while (flag)
{
if (!(i%15))
{
console.log("FizzBuzz");
}
else
{
if (!(i%3))
{
console.log("Fizz");
}
else
{
if (!(i%5))
{
console.log("Buzz");
}
else
{
console.log(i);
}
}
}
i++;
if (i > 100)
{ flag = false}
}
+7
А еще
Спасибо, немного размялся
golang
package main
import "fmt"
func main() {
var i int
for i < 101 {
flag := true
if i%3 == 0 {
fmt.Printf("Fizz")
flag = false
}
if i%5 == 0 {
fmt.Printf("Buzz")
flag = false
}
if flag {
fmt.Printf("%v", i)
}
fmt.Printf("\n")
i++
}
}
ruby
puts (1..100).map{|i| s = ""; s += "Fizz" if (i % 3 == 0); s += "Buzz" if (i % 5 ==0); s = i.to_s if s.empty?; s; }.join(" ")
Собственно питон
for i in range(1,101): print(((not i%3)*'Fizz' +(not i%5)*'Buzz') or i)
PHP
<?php foreach(range(1,100) as $i){if($i%15 == 0){echo "FizzBuzz";}else{if($i%3 == 0){echo "Fizz";}else if($i%5 == 0){echo "Buzz";}else{echo $i;}};echo "\n";} ?>
Спасибо, немного размялся
+3
for(var i = 1, s = ''; i < 101; i++) (s = (i % 3 ? '' : 'Fizz') + (i % 5 ? '' : 'Buzz')) && console.log(s);
+1
А как насчет Scala Пайтона:
from fn import F, _
from operator import add, mul
# F(f, *args) means partial application
# same as functools.partial but returns fn.F instance
assert F(add, 1)(10) == 11
# F << F means functions composition,
# so (F(f) << g)(x) == f(g(x))
f = F(add, 1) << F(mul, 100)
assert list(map(f, [0, 1, 2])) == [1, 101, 201]
assert list(map(F() << str << (_ ** 2) << (_ + 1), range(3))) == ["1", "4", "9"]
+5
Сишный у вас получился какой-то несишный :)
Откуда в Си операторы elif?
Тут switch направшивается.
Откуда в Си операторы elif?
Тут switch направшивается.
+2
JS Python:
Жаль, синтаксис не позволяет обернуть всё это в самовызывающуюся лямбду.
n = 0
while n - 100:
n = -~n
print (not n % 3 and 'Fizz' or '') + (not n % 5 and 'Buzz' or '') or n
Жаль, синтаксис не позволяет обернуть всё это в самовызывающуюся лямбду.
+2
Не нашел самой простой и быстрой реализации, она, ИМХО, должна быть такая:
i = 1
while True:
print i,; i += 1 # 1
print i,; i += 1 # 2
print "Fizz",; i += 1 # 3
print i,; i += 1 # 4
print "Buzz",; i += 1 # 5
print "Fizz",; i += 1 # 6
print i,; i += 1 # 7
print i,; i += 1 # 8
print "Fizz",; i += 1 # 9
print "Buzz",; i += 1 # 10
if i > 100:
break
print i,; i += 1 # 11
print "Fizz",; i += 1 # 12
print i,; i += 1 # 13
print i,; i += 1 # 14
print "FizzBuzz",; i += 1 # 15
+9
Раз вы используете Python 2, то должно быть while 1, не while True.
+2
Про простую Вы пошутили?
Я всегда считал, что «просто» — это когда человек, не знающий языка, все равно поймет, что происходит.
Я всегда считал, что «просто» — это когда человек, не знающий языка, все равно поймет, что происходит.
+2
Пардон, а что непонятно? Трудно догадаться, какая исходно была поставлена задача из текста программы? Возможно. Это же фактически таблица. Реализация-то простая и легко можно реализовать любую логику. А поставленную задачу при такой реализации, думаю нужно писать в комментах. Как раз тот случай, когда комменты уместны.
+1
Ну лично мне не ясен смысл рядом стоящих ,;
И поскольку Вы пишнте инкремент в одной строчке с выводом, не совсем ясно, является ли точка с запятой разделителем или ",;" — это оператор отдельный.
А насчет комментариев согласен, но стоило хотя бы сверху написать, что все выводится группами по 15, тогда бы подобных сомнений не возникло.
Разумеется, я понял смысл кода, но, каюсь, не без труда
И поскольку Вы пишнте инкремент в одной строчке с выводом, не совсем ясно, является ли точка с запятой разделителем или ",;" — это оператор отдельный.
А насчет комментариев согласен, но стоило хотя бы сверху написать, что все выводится группами по 15, тогда бы подобных сомнений не возникло.
Разумеется, я понял смысл кода, но, каюсь, не без труда
+1
А, запятая! :) Пардон, нужно было при печати убрать. Она для смысла не имеет значения. Моя вина.
Это для того, чтобы print не добавлял при печати перевод строки, и печатал подряд а не столбиком. Я проверял в ipython notebook и хотел, чтобы было видно сразу все 100 выводов, а если столбиком печатать, влезает мало.
Точка с запятой это разделитель.
Еще раз извиняюсь.
Это для того, чтобы print не добавлял при печати перевод строки, и печатал подряд а не столбиком. Я проверял в ipython notebook и хотел, чтобы было видно сразу все 100 выводов, а если столбиком печатать, влезает мало.
Точка с запятой это разделитель.
Еще раз извиняюсь.
+3
Насчет реализаций, я б сделал с помощью массива:
a = [i for i in range(101)] # лишний элемент для удобства
for i in range(3, 100, 3):
a[i] = "Fizz"
for i in range(5, 101, 5):
a[i] = "Buzz"
for i in range(15, 101, 15):
a[i] = "FizzBuzz"
a.pop(0)
print(*a)
+4
Или такая. Это правда не пайтон, а REXX, но тоже без выяснения остатка от деления. Оно-же, с нормальной подсветкой на pastebin.com
/* REXX */
collector3 = 3
collector5 = 5
fizz. = 0
buzz. = 0
fizz.3 = collector3
buzz.5 = collector5
DO count=1 TO 100
SELECT
WHEN count = fizz.count & count = buzz.count THEN
DO
say 'FizzBuzz'
collector3 = collector3 + 3
collector5 = collector5 + 5
fizz.collector3 = collector3
buzz.collector5 = collector5
END
WHEN count = fizz.count THEN
DO
say 'Fizz'
collector3 = collector3 + 3
fizz.collector3 = collector3
END
WHEN count = buzz.count THEN
DO
say 'Buzz'
collector5 = collector5 + 5
buzz.collector5 = collector5
END
OTHERWISE
say count
END
END
+1
Вчера неплохую команду узнал для Bash'а
:~$ factor 105
105: 3 5 7
-4
Немного олдскульного ABAPа:
OldSchool ABAP FizzBuzz
*&---------------------------------------------------------------------*
*& Report ZFIZZBUZZ
*&
*&---------------------------------------------------------------------*
*&
*&
*&---------------------------------------------------------------------*
REPORT zfizzbuzz.
DATA: lv_text TYPE string.
DO 100 TIMES.
PERFORM fizzbuzz USING sy-index
CHANGING lv_text.
WRITE / lv_text.
ENDDO.
*&---------------------------------------------------------------------*
*& Form fizzbuzz
*&---------------------------------------------------------------------*
* text
*----------------------------------------------------------------------*
* -->IV_INDEX text
* -->CV_TEXT text
*----------------------------------------------------------------------*
FORM fizzbuzz USING iv_index
CHANGING cv_text.
DATA lv_rem TYPE i.
CLEAR cv_text.
COMPUTE lv_rem = iv_index mod 3.
IF lv_rem EQ 0.
COMPUTE cv_text = 'Fizz'.
ENDIF.
COMPUTE lv_rem = iv_index mod 5.
IF lv_rem EQ 0.
CONCATENATE cv_text 'Buzz' INTO cv_text.
ENDIF.
IF cv_text EQ ''.
COMPUTE cv_text = iv_index.
ENDIF.
ENDFORM. "fizzbuzz
+2
Кстати, эта (и много других интересных задач) есть здесь: checkio.org. Осторожно, затягивает.
+3
Подумал еще немного. Не хватает КМК, еще одного варианта, с логикой, зашитой не в код, а в данные, вот, набросал наскоро, думаю идея понятна. Думаю, это более «промышленный» вариант:
Жду оценок.
MAX = 100
MIN_LOGIC = 15
arr_1 = [0,3,6,9,12]
arr_2 = [0,5,10]
logic = {(1,0):"Fizz",(0,1):"Buzz",(1,1):"FizzBuzz"}
for i in range(1,MAX + 1):
j = i % MIN_LOGIC
var_1 = j in arr_1
var_2 = j in arr_2
key = (var_1,var_2)
try:
out = logic[key]
except KeyError:
out = i
print out,
Жду оценок.
0
Из комментариев в личку со сторонних сайтов:
Здравствуйте, Анатолий! Хотел бы прокомментировать Ваш пост:
habrahabr.ru/post/218981/
Конечно, самое правильное решение там уже предложили:
for i in xrange(1,101): print ((not i%3)*'Fizz'+(not i%5)*'Buzz') or i
Я, просто чтобы показать другой (и весьма кривой) алгоритм, извратился так:
from itertools import cycle, izip, chain S = 1, 3, 5, 15 W = xrange(1,101), ['Fizz'], ['Buzz'], ['FizzBuzz'] print dict(chain(*(izip(xrange(s,101,s), cycle(w)) for (s,w) in izip(S,W)))).values()
Мой ник на Хабре — adugin
+1
>number % 3 == 0 and number % 5 == 0
number % 3 == number % 5 == 0
+2
Enumerable.Range(1, 100).Select(x => x%15 == 0 ? "FizzBuzz" : x%3 == 0 ? "Fizz" : x%5 == 0 ? "Buzz" : x.ToString()).ToList().ForEach(Console.WriteLine);
+1
Вообще говоря, все предложенные решения могут оказаться неверными. В задаче не сказано, что нужно для каждого числа вывести только одну строчку. Для числа 15 их вполне может быть три, причем это только один из вариантов (т.к. требуемый порядок вывода в данном случае тоже неизвестен):
Fizz
Buzz
FizzBuzz
Fizz
Buzz
FizzBuzz
0
Если оно делится как на 3, так и 5, выведите FizzBuzz.
Из этого следует, что для такого числа должна быть выведена только эта строка. Вполне однозначно следует, что для каждого числа выводится только одна строка. Можно придираться к формулировке, но она достаточно четкая, чтобы придирки так и остались необоснованными.
+1
Не вижу, с чего бы это должно следовать. Из этого следует только, что должна быть выведена эта строка. То, что остальные не должны — вопрос открытый. Чисто интуитивно, на уровне обычной разговорной речи, я конечно склоняюсь к мысли, что все три варианта взаимоисключающие, но формально в условии этого не сказано.
0
Sign up to leave a comment.
Непайтоновый Пайтон