1

ユーザーに色の入力を求めるプログラムを作成しようとしています。ユーザーが選択した色に応じて、python はそれを数値に変換してその数値を出力します。

これが私のコードです:

def main():
brown1 = 5
red1 = 6
orange1 = 3 
color1 = input("Color on resistor? (separated by comma) : ")
if color1 == "Brown" or "brown":
    color1 = brown1
    if color1 == "Red" or "red":
        color1 = red1   
        if color1 == "Orange" or "orange":
            color1 = orange1
print(color1)
main()

問題は、Python が最後の色、つまり 3 しか返さないことです。プログラミングを始めたばかりで、このコードを機能させるために他に何をすればよいかわかりません。助言がありますか?ありがとう。

4

4 に答える 4

4

問題は、ifステートメントがネストされるべきではないときにネストされていることです。if外側の条件が true の場合にのみ内側に到達します

dict を使用することもできます。

colors = {'brown': brown1, 'red': red1, 'orange': orange1}
color1 = colors[color1.lower()]
于 2013-09-12T21:22:48.333 に答える
3

ifコードの問題は、 other の中に入れたことですif。したがって、最初の条件が満たされている場合は、2 番目の条件のみがチェックされます。また、空でない文字列のブール値は であるためcolor1 == "Brown" or "brown"、これは常に返されます。次のようにする必要があります。TrueTrue

def main():
    brown1 = 5
    red1 = 6
    orange1 = 3 
    color1 = input("Color on resistor? (separated by comma) : ")
    if color1 == "Brown" or color1 == "brown":
        color1 = brown1
    elif color1 == "Red" or color1 == "red":
        color1 = red1   
    elif color1 == "Orange" or color1 == "orange":
        color1 = orange1
    print(color1)
main()

より良い解決策は、辞書を使用することです。

color_dict = {'brown':5, 'red':6 ,'orange':3}
color1 = input("Color on resistor? (separated by comma) : ")
print color_dict[color1.lower()]
于 2013-09-12T21:20:52.703 に答える
0

コードの問題は、ifステートメントが次のようになることです。

if color1 == "Brown" or color1 == "brown":
    ...

これは、「brown」が空でない文字列であるためです。これは、条件が常に trueTrueであることを意味します。ifそのため、最後のステートメントに到達するまで if ステートメントを入力し続けます。

この特定の間違いを修正する方法は次のとおりです。

1. brown1 = 5
2. red1 = 6
3. orange1 = 3 
4. color1 = input("Color on resistor? (separated by comma) : ")
5. if color1 == "Brown" or color1 == "brown":
6.     color1 = brown1
7.     if color1 == "Red" or color1 == "red":
8.         color1 = red1   
9.         if color1 == "Orange" or color1 == "orange":
10.             color1 = orange1
11. print(color1)

このプログラムをドライランしてみましょう (手動で 1 行ずつ行って、何が起こっているかを確認してください)。その場合は、行にステートメントをcolor1 = "brown"入力します。次に行に行きます。この意味は現在 5 と定義されています。したがって、「赤」または「赤」になることはありません。さらに、「茶色」または「茶色」でない場合は、同じインデントまたはで次の行に移動します。つまり、赤とオレンジをチェックしません。if56color1color1color111

あなたが達成したいことは、次のように行うことができます:

if color1 == "brown" or color1 == "Brown":
    color = 5
if color1 == "brown" or color1 == "Brown":
    color1 = 6
if color1 == "brown" or color1 == "Brown":
    color1 = 3

ここで問題になるのは、行 2 または行 4 で color1 の値を変更すると、残りの条件をもう一度確認したくなくても true になる可能性があることです (たとえばif color==1: color=2; if color==2: color=1、2 番目の条件がもう一度 true になります)。elifこれが、またはelse ifが推奨される理由であり、新しいプログラムを作成します。

if color1 == "brown" or color1 == "Brown":
    color = 5
elif color1 == "brown" or color1 == "Brown":
    color1 = 6
elif color1 == "brown" or color1 == "Brown":
    color1 = 3
于 2013-09-12T21:28:29.383 に答える