質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

2回答

2401閲覧

pythonのTypeErrorをどうにかしたい

mathpero

総合スコア11

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/07/17 02:11

###前提・実現したいこと
エラーを消したい

###発生している問題・エラーメッセージ







%5d
Traceback (most recent call last):
File "cal.py", line 16, in <module>
cal0(6,31)
File "cal.py", line 13, in cal0
print ("%5d")%x,
TypeError: unsupported operand type(s) for %: 'NoneType' and 'int'

###該当のソースコード

encoding: utf-8

wday=("sun","mon","tue","wed","thu","fri","sat")
def cal0(n,m):

cal0(n,m) は 1 つの月のカレンダーを作成する。

n は月の開始日の曜日を表す数字 (0 から 6) であり、

0 は日曜日を意味する。

m はその月の日数である。例えば 1 月は m=31 である。

従って 2000 年 1 月のカレンダーは cal0(6,31) で表示される。

for x in wday: print (" "),x, print for x in range(0, n): print (" ---"), for x in range(1, m+1): print ("%5d")%x, if (x+n)%7==0 : print print

cal0(6,31)

###試したこと

###補足情報(言語/FW/ツール等のバージョンなど)
初心者なので詳しく解説を書いてもらえると助かります。よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/07/17 02:20

Pythonはインデントが重要な言語ですので、投稿していただいたコードは他の人がそのまま実行できない状態になっています。 質問画面の"markdown"というところをクリックして、「コードを入力」のところの書きかたを見て質問を修正していただけますでしょうか。
guest

回答2

0

ベストアンサー

実際のインデントが判明していないので正確では無いかも知れませんが。

print ("%5d")%x,のところが色々とおかしいです。
まず、print()関数はカッコの後ろに何か書くことは通常ありません。
%x%は、文字列に対してフォーマットを行う演算子で、print()に対して指定するものではありません。
最後のカンマも要りません。
カンマは、おそらく改行しないで出力したいのだと思いますが、
Python3の場合は改行しないで出力するにはprint("出力する文字列", end="")のようにします。

別の書き方をすると、こうなります。

lang

1s = "%5d" % x 2print(s, end="")

これは、
まず"%5d" % xを評価して、スペース込みで5ケタの文字列を作り、それを変数sに代入し、
それをprint()に渡して改行なしで出力する、という意味です。

これを変数sを使わずに1行にまとめて書くと、

lang

1print("%5d" % x, end="")

になります。

あと、後ろの方のカッコなしprintは、Python3では正しく動作しません。
カッコをつけてください。

投稿2016/07/17 02:42

argius

総合スコア9390

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mathpero

2016/07/17 15:02

いつもわかりやすい回答ありがとうございます。printの()をつけてアドバイスの通り変更などをしたらうまくいきました。あと、質問の書き方が悪く失礼しました。以後気を付けます。
guest

0

質問文のコードを元に変更してみました。
質問文ではコードのインデントが表現されていないので、誤解があるかもしれません。

python

1$ python3 cal.py 2 sun mon tue wed thu fri sat 3 --- --- --- --- --- --- 1 4 2 3 4 5 6 7 8 5 9 10 11 12 13 14 15 6 16 17 18 19 20 21 22 7 23 24 25 26 27 28 29 8 30 31 9 sun mon tue wed thu fri sat 10 --- --- 1 2 3 4 5 11 6 7 8 9 10 11 12 12 13 14 15 16 17 18 19 13 20 21 22 23 24 25 26 14 27 28 29

実行例:

$ python3 cal.py sun mon tue wed thu fri sat --- --- --- --- --- --- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 sun mon tue wed thu fri sat --- --- 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29

投稿2016/07/17 10:38

katoy

総合スコア22324

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mathpero

2016/07/17 15:03

回答ありがとうございます。その実行結果になることを期待していました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問