
pythonの課題なのですが、初心者なのでよく分かりません。分かる方教えていただけないでしょうか?
【以下、課題内容】
プログラムを開始すると、ユーザに1~20の整数の中からランダムに5個の数値を入力してもらう。
1~20以外の数値が含まれていた場合は、その数値の入力をやり直してもらう。正しく入力が完了したら、バイナリーサーチを実行するために、バブルソートで昇順(小さい順)に整列を行う。
整列後、バイナリーサーチで、入力された数値の中に、「10」がないかを調べる。あった場合は、
「Found」と画面に表示させ、なかった場合は「Not Found」を表示させたい。
①フローチャートを作成しなさい。
②pythonでプログラムを作成しなさい。また、各行に日本語で簡潔にコメントも書きなさい。
No.1ベストアンサー
- 回答日時:
① メンド臭いんでパス。
#ハッキリ言うけど、現代の、構造化プログラミング以降に於いてフローチャートは必要ないと思う。要フローチャートはgoto塗れの古のプログラミングスタイルで必要だっただけ。
# いきなりプログラムを書き下せる人はフローチャートを書けるけど、フローチャートをいくら練習したトコでプログラミングが出来るようにはならない。よって書くだけ無駄。「フローチャートを書ければ・・・」ってのは単なる神話でしかないと思う(そんな無駄な時間があるなら人が書いたコードを読む、とか写経した方がマシ)。
# よってこの問題は正直、愚問以上の何物でもない。goto塗れの初期のBASICじゃねぇんだから。
# 先生、バカだろ?
②
#!/usr/bin/env python3
def foo():
while True:
val = int(input())
if val > 0 and val < 21:
return val
def bubbleSort(A):
# Python には組み込みの sorted 関数があるのに
# 生徒にわざわざバカな事やらせるんじゃない
# あと、各行にコメントを書くなんつーアホな愚行もやらせるな(逆にコードが読みづれぇよ・怒)
for i in range(len(A) - 1):
for j in range(1, len(A) - i):
if A[j] < A[j-1]:
A[j], A[j-1] = A[j-1], A[j]
return A
def find(val, xa):
def ifind(minnum, maxnum):
if maxnum < minnum:
return False
else:
c = minnum + (maxnum - minnum) // 2
if xa[c] > val:
return ifind(minnum, c - 1)
elif xa[c] < val:
return ifind(c + 1, maxnum)
else:
return c
val = ifind(0, len(xa) - 1)
if val:
print("Found")
else:
print("Not Found")
if __name__ == '__main__':
find(10, bubbleSort([foo() for i in range(5)]))
No.2
- 回答日時:
# ② の別解
#!/usr/bin/env python3
def foo(n):
i = 0
while i < n:
val = int(input())
if val > 0 and val < 21:
i += 1
yield val
def bubbleSort(A):
# アホなフラグ付きコードだが、古典的なバブルソートの記述法である
while True:
swapped = False
for i in range(1, len(A)):
if A[i-1] > A[i]:
A[i-1], A[i] = A[i], A[i-1]
swapped = True
if not swapped:
break
return A
def binary_search(A, T):
L, R = 0, len(A) - 1
while L <= R:
m = (L + R) // 2
if A[m] < T:
L = m + 1
elif A[m] > T:
R = m - 1
else:
return m
return False
if __name__ == '__main__':
val = binary_search(bubbleSort(list(foo(5))), 10)
print("Found" if val else "Not Found")
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
フローチャートの菱形が狭い。。。
-
VBAで仕様書は書きますか?
-
正しい五十音順について
-
VBAで関数をつくる
-
あるプログラムのコマンドライ...
-
65536は2の何乗なのでしょうか?
-
GPIB制御
-
Excelで4096点以上のFFTの方法
-
PICアセンブラを出来る方、教え...
-
PICマイコンのコピー(クローン...
-
OS入ってる機器のソフト・アプ...
-
ファイルの開き方
-
VC++コンソールアプリでウイン...
-
Bluestacks内でダウンロードし...
-
matlabで計算終了
-
排他的論理和 BCC(水平パリテ...
-
brotherのマシニングセンタとP...
-
VBAにてメール作成した際、一部...
-
VBAの再計算が反映されない件に...
-
スレッド処理からダイアログを...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
フローチャートの菱形が狭い。。。
-
フローチャートで 変数に代入す...
-
学校でフローチャートって教わ...
-
フローチャートで。
-
Fortranの素数のプログラム
-
サブルーチンのフローチャート...
-
fortran errorについて
-
FORTRAN★DO WHILE★の問題
-
フローチャートは作っていますか?
-
フローチャートが書けません
-
fortran 配列実行結果
-
65536は2の何乗なのでしょうか?
-
正しい五十音順について
-
あるプログラムのコマンドライ...
-
VBAで仕様書は書きますか?
-
ファイルの開き方
-
C++ で、「)」が必要 というエ...
-
Excelで4096点以上のFFTの方法
-
自分の声が遅れて聞こえてくる...
-
VBAにてメール作成した際、一部...
おすすめ情報