プログラミング入門I
1月20日の提出状況
Back to index page
- 目次
- 前回の確認テストについて
1
タイムプレッシャーがかかるテストでは相変わらずエラーになるものの提出が多いですね.以下のように7人出てきました.基本の基本が分かっていないためにエラーになっている人がほとんどで,やはりそれも実力の表れかと思います.
実行時エラー: b2407 b2428 b2430 b2432 b2446 b2456 b2459
前回の課題?: b2457
演習問題の提出: b2446
以下は例によって問題のあるプログラムの例です.参考にしてください.
st = (shimane university)
|
上のような文字列を引用符 ' ' でくくって定義するという基本を知らない人が数名いました.未定義の変数を使用すると当然エラーになります.
print('Original:', st)
print('Sorted: ',''.join(sorted(st)))
|
勝手に出力表現を変えない!
st1 = 'shimane'
st2 = 'university'
|
2つのオブジェクトに分ける必要は無いですね.後でも出てくるのですが,スペースを含んだ文字列のソートを行うのが今回の課題です.問題文の出力例をよく見てほしいのですが,ソートされたものは先頭にスペースが入っていますね.文字コードではスペースは 32 なので,アルファベットより前です.
original_string = "shimane university"
sorted_string = ''.join(sorted(original_string))
reversed_string = ''.join(sorted(original_string, reverse=True))
|
逆順表示は必要ないですが?
s = 'shimane university'
char_list = []
for char in s:
if char != ' ':
char_list.append(char)
sorted_s = ''.join(sorted(char_list))
|
今回学習した内容をまったく無視していますね.
print(f'Name: shimane university')
st =sorted('shimane university')
print(f"Sort: {''.join(st)}")
|
このパターンも結構見られました.なぜ文字列 st を使いまわししないのでしょうか?
name = 'shimaneuniversity'
print(f'Name: shimane university')
print(f'Sort:', '' .join(sorted (name)))
|
なぜスペースを抜いた文字列を作るのでしょうかねえ.その結果,下のようにソートしても先頭にスペースが来ません.
Name: shimane university
Sort: aeehiiimnnrsstuvy
|
print(f'Name: {st}')
print(f'Sort:',''.join(sorted(st)))
|
上の print 文のコロン : の後に余分にスペースが入っているので,下のように先頭が揃って表示されます.
Name: shimane university
Sort: aeehiiimnnrsstuvy
|
print('Name: shimane university')
print('Sort: sort(shimaneuniversity)')
|
文字列のソートが分かっていないので,結局下のようになりますよね.
Name: shimane university
Sort: sort(shimaneuniversity)
|
print('Name: shimane university')
print(f'Sort: {''.join(sorted('shimaneuniversity'))}')
|
何度も同じ文字を入力しなくても済むように文字列を値に持つ変数(オブジェクト)を作るのが今回のポイントでしたが.
filtered_string = input_string.replace(" ", "")
|
sorted_name = ''.join(sorted(name.replace(" ", "")))
|
上の2つの例のように replace を使ってスペースを除去している人がそこそこいました.スペースも含めてのソートなのに.
print(f'Sort:' ''.join(sorted(name)))
|
これはやっかいな間違いですね.print のカッコの中の一つ目の f 文字列と2つ目のソートされた文字列の間にカンマがありません.カンマがあると2つのオブジェクトを出力するのですが,カンマがないと大変ややこしい動作になります.結果としては下のように表示されるのですが,何をやっているかというと,まず Sort: を出力して次にソートした結果の a が出力されます.そして,また Sort: が出力され他後に次にソートされた e が来るという順番に総当たりで出力されるという動作です.ややこしいですね.
Sort:aSort:eSort:eSort:hSort:iSort:iSort:iSort:mSort:nSort:nSort:rSort:sSort:sSort:tSort:uSort:vSort:y
|
前回の宿題について
今回は提出数が少なかったのが驚きです.今回提出が無かったために総合得点が合格基準を満足しないことになり不可となった学生さんが複数人います.残念です.
以下は例によって問題のあるプログラムの例です.今後の参考にしてください.
今回もなぜか最初の数値を乱数でなく決め打ちしている人がいました.不思議です.
for _ in range(100):
num1 = ''.join(sorted(st))
rt = int(num1)
num1_re = ''.join(sorted(st, reverse = True))
rt_re = int(num1_re)
after = rt_re - rt
print(f'{rt_re} - {rt} = {after}')
if after == before:
break
else:
before = 0
before += after
st = str(after)
else:
print()
|
上のように for 文で作っている人が数人いました.繰り返す回数が決まっていない処理は while 文が原則ですし,その方が簡単に書けます.解答例を参考にして,今後は使い方をマスターしてください.
num1 = int(''.join(sorted(st,reverse = True)))
num2 = int(''.join(sorted(st)))
num3 = num1 - num2
while n != num3:
print(f'{num1:4} -{num2:5} ={num3:5}')
n = num3
st = str(n)
num1 = int(''.join(sorted(st,reverse = True)))
num2 = int(''.join(sorted(st)))
num3 = num1 - num2
else:
print(f'{num1:4} -{num2:5} ={num3:5}')
|
while 文の中で行う並べ替え処理を1回だけループの前で行っています.無駄な処理です.
print(f" {descending} - {ascending} = {num}")
|
最後まで表示する文字数の幅をそろえて綺麗に見せることができない人がいました.それも複数です.結果の表示を見やすくすることは重要ですので,ちゃんとそこも意識してください.
Start from 3529
9532 - 2359 = 7173
7731 - 1377 = 6354
6543 - 3456 = 3087
8730 - 378 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
|
print(f'{n2:4}-{n3:5}={n4:5}')
|
上の例は桁数の指定はしているのですが,演算記号との間隔のところで下のように変なことになってしまっています.そこも注意しましょう.
Start from 1335
5331- 1335= 3996
9963- 3699= 6264
6642- 2466= 4176
7641- 1467= 6174
7641- 1467= 6174
|
while base!=random:
num1=sorted([int(digit) for digit in str(random)])
num1_a=int(''.join(map(str,num1)))
num2=sorted([int(digit) for digit in str(random)],reverse=True)
num2_a=int(''.join(map(str,num2)))
num3=num2_a-num1_a
print(f'{num2_a}-{num1_a}={num3}')
if num3==random:
random=base
else:
num3=random
a+=1
if a==5:
break
|
訳の分からない処理をしていますが,結局は5回実行したら終わるというもので,下のように意味のないことをやっています.
Start from 6115
6511-1156=5355
6511-1156=5355
6511-1156=5355
6511-1156=5355
6511-1156=5355
|
目次ページに戻る