僕の備忘録(PC、UN*X、ネットワーク関連が中心)なんです。
自分の書いたところは適当(な時とか)に書き換えますので御了承を。
リストは二つも要らないかも、という発想が浮かんだ。
大きいリストに小さいリストを併合して、排他的に
なるよう按排してみる。
#!/usr/bin/env python from __future__ import print_function from sys import argv try: last = int(argv[1]) + 1 except: print("No last number.") exit(2) list = ['buzz', False, 'fizz', False, False] for x in range(1, last): y = x % 3 + 2 z = x % 5 flag1, flag2 = True, True if list[y] == 'fizz': print(list[y], end='') flag1 = False if list[z] == 'buzz': print(list[z], end='') flag2 = False if flag1 and flag2: print(x, end='') print('')
なんとかバスの中で動作確認できた。
それにしてもflag を二つも設けるのはどう見ても変だ。
そのうちなんとかせねば。
ここまでくれば、単なる本末転倒。
リストの長さを3にしただけでは、
1 1 2 2 3 fizz 4 buzz 5 buzz 6 fizz 7 7 8 8 9 fizzbuzz 10 buzz 11 11 12 fizz 13 13 14 buzz 15 fizzbuzz 16 16
このように余計なものがいくつか出た。そこで
"14"とか
"29"とか
を省く処理(真偽判定に少々嵌った)を追記。
単に面倒になっただけという。
#!/usr/bin/env python from __future__ import print_function from sys import argv try: last = int(argv[1]) + 1 except: print("No last number.") exit(2) list = ['fizz',False,'buzz'] for x in range(1, last): y = x % 3 z = abs(x % 5 - 2) flag1, flag2 = True, True if list[y] == 'fizz': print(list[y], end='') flag1 = False if (list[z] == 'buzz') \ and (str(x).find('4')) \ and (str(x).find('9')): print(list[z], end='') flag2 = False if flag1 and flag2: print(x, end='') print('')
どこかをいじるとうまくいかなくなっていたが、
Webからコピペしなおすとちゃんと動くようだった。
リンクはご自由にどうぞ。でもURLや内容が変った場合はあしからず。