2

私は Python のフランス語初心者で、時間 (文字列 "日、時間、分、秒") が間違っている (たとえば、83 秒) ときに警告するプログラムをコーディングしたいと考えています。私はこのプログラムを行いました:

t=input("Put day,hours,minutes,seconds: ")
t="j,h,m,s"
if int(t[6])<=0 or int(t[6])>=59:
    print("Seconds wrong")
if int(t[4])<=0 or int(t[4])>=59:
    print("Minutes wrong")
if int(t[2])<=0 or int(t[2])>=24:
    print("Hours wrong")
if int(t[0])<=0 or int(t[0])>=31:
    print("days wrong")
else: 
    print("OK")

しかし、私はこのエラーがあります:

  if t[6]<=0 or t[6]>=59:
TypeError: unorderable types: str() <= int()

だから私はどこにでも「int」を置いた(のように"int(t[X])<=0")しかし、私はこのエラーがあります:

  if int(t[6])<=0 or int(t[6])>=59:
ValueError: invalid literal for int() with base 10: 's'
4

2 に答える 2

2

この文字列には数字がありません:

t="j,h,m,s"

そのため、何をしようとしてもint(t[anything])失敗します。などの実際の整数の文字列表現が文字列に含まれていない限り、文字列を整数に変換することはできませんt = "1234"

さらに、 のようなものがあったとしても、t = "31,11,22,45"int(t[6])の表現はインデックス 9 と 10 になるため、秒数はわかりませんt = int(t[9:11])。その場合は必要になります。

このようなものがあなたが探しているものです:

#!/usr/bin/python

t = "31,11,22,45"
(day, hour, min, sec) = [int(elem) for elem in t.split(',')]

if not 0 <= sec <= 59:
    print("Seconds wrong")
elif not 0 <= min <= 59:
    print("Minutes wrong")
elif not 0 <= hour <= 23:
    print("Hours wrong")
elif not 1 <= day <= 31:
    print("days wrong")
else:
    print("OK")

if最初のものを除くすべてを に変更する必要があることに注意してくださいelif。そうしないと、 が正しいが他のすべてが間違っている"OK"場合dayに出力されます。または、何かが間違っている場合は、別の変数を保存して保存する必要があります。次のように終了します。

#!/usr/bin/python

t = "31,11,22,45"
(day, hour, min, sec) = [int(elem) for elem in t.split(',')]
time_ok = True

if not 0 <= sec <= 59:
    print("Seconds wrong")
    time_ok = False

if not 0 <= min <= 59:
    print("Minutes wrong")
    time_ok = False

if not 0 <= hour <= 23:
    print("Hours wrong")
    time_ok = False

if not 1 <= day <= 31:
    print("Days wrong")
    time_ok = False

if time_ok:
    print("Time is OK")
于 2013-10-27T13:21:56.140 に答える
2

すばらしい努力ですが、2 行目に注意してください。

t = "j,h,m,s"

これにより、ユーザー入力が上書きされ、代わりに割り当て"j,h,m,s"られtます。それを除く!

また、を使用して比較することはできませんorint(t[6]) > 59十分かどうかを確認してください。

if int(t[6]) > 59:
    print("seconds wrong") 

コンマ区切りの数値を取得するより良い方法は、string.split()メソッドを使用することです。

t = t.split(',') #split the string in the commas

これで、コンマの数を気にする必要がなくなりました。曜日はt[0]、時間は などになりt[1]ます。

あ、あともう一つ。if ステートメントを繰り返し使用する必要はありません。初めて使用し、elifステートメントで次のものを変更します。

完全な固定コード:

t = input("Put day,hours,minutes,seconds: ")
if int(t[6])>59:
    print("Seconds wrong")
elif int(t[4]) < 0 or int(t[4]) > 59: 
    print("Minutes wrong")
elif int(t[2]) < 0 or int(t[2]) > 24:
    print("Hours wrong")
elif int(t[0]) < 0 or int(t[0]) > 31:
    print("days wrong")
else: 
    print("OK")

正直なところ、Paul が述べたように、入力が 1 桁を超える場合、これはまだ機能しません。

string.split()これを達成するために使用する必要があります。

t = input("Put day,hours,minutes,seconds: ").split(",")

if int(t[3])>59:
    print("Seconds wrong")
elif int(t[2]) < 0 or int(t[2]) > 59: 
    print("Minutes wrong")
elif int(t[1]) < 0 or int(t[1]) > 24:
    print("Hours wrong")
elif int(t[0]) < 0 or int(t[0]) > 31:
    print("days wrong")
else: 
    print("OK")
于 2013-10-27T13:23:38.717 に答える