2016-11-21 10 views
-1

をアレント「場合」ので、私はイムはここに間違っているのかわからないんだけど、それは私は文がOK作業

if 1 == 2 
print("Works") 
elif 1 == 1 
print("There we go") 

それであれば自分のコードが自動的にexmapleのための「if」文の中で最初のものを選んでいます誤った値が入力されても最初のものが自動的に選択されます。

def troubleshoot(): 
print("Now we will try and help you with your iPhone.") 
print("") 
time.sleep(1) 
hardsoft = input(str("Is the issue a problem with hardware of software? Write n if you are not sure: ")) #ISSUE WITH IT SELECTING THE FIRST ONE NO MATER WHAT# 
if hardsoft == "Software" or "software" or "S" or "s" or "soft" or "Soft": 
    software() 
elif hardsoft == "Hardware" or "hardware" or "Hard" or "hard" or "h" or "H": 
    hardware() 
elif hardsoft == "Not sure" or "not" or "Not" or "NOT" or "not sure" or "n" or "N": 
    notsure() 
else: 
    print("Sorry, that command was not recognised") 
    print("Please try again") 
    troubleshoot() 
+3

最初のコードブロックには、コロンとインデントがありません。それはコピー貼りが間違っているのでしょうか、それともあなたのコードはまったく同じように見えますか? – Celeo

+1

'hardsoft == 'ソフトウェア'またはhardsoft == 'ソフトウェア'またはhardsoft == 'S' ....'または 'S' ==ハードソフト[:1] .upper(): ' –

答えて

0

if文には多くの論理部分が含まれています。ブール値に変換された各部分。空でない文字列はTrueに変換されます。

def troubleshoot(): 
print("Now we will try and help you with your iPhone.") 
print("") 
time.sleep(1) 
hardsoft = input(str("Is the issue a problem with hardware of software? Write n if you are not sure: ")) #ISSUE WITH IT SELECTING THE FIRST ONE NO MATER WHAT# 
if hardsoft == "Software" or hardsoft == "software" or hardsoft == "S" or hardsoft == "s" or hardsoft == "soft" or hardsoft == "Soft": 
    software() 
elif hardsoft == "Hardware" or hardsoft == "hardware" or hardsoft == "Hard" or hardsoft == "hard" or hardsoft == "h" or hardsoft == "H": 
    hardware() 
elif hardsoft == "Not sure" or hardsoft == "not" or hardsoft == "Not" or hardsoft == "NOT" or hardsoft == "not sure" or hardsoft == "n" or hardsoft == "N": 
    notsure() 
else: 
    print("Sorry, that command was not recognised") 
    print("Please try again") 
    troubleshoot() 

また、あなたがそのような長いIFSから注意して、このコードを最適化する必要があります。私はあなたがこのような何かをしたかった提案することができたよう 。

+0

ありがとうそんなにこれは、これは私が探していたものです。どのように私はそれを最適化するだろうか? –

+0

すべてのケースを配列で事前定義することができます。sw = ["Software"、 "Software"、 "S"、 "soft"、 "Soft"]、sw.index [hardsoft]> = 0 – Nosyara

1

最初のコードブロックには、インデントとコロンがありません。これは次のようになります。

if 1 == 2: 
    print("Works") 
elif 1 == 1: 
    print("There we go") 

このようにしても、期待どおりの結果が得られます。

2番目の部分の場合:if hardsoft == "Software" or "software" or "S" or "s" or "soft" or "Soft":は有効な状態ではありません。少なくとも、あなたがすると思われることはしていません。すべての文字列はブール値に変換され、空でない文字列も真と解釈されます。したがって、if "Software"のような条件は常に真です。正しい条件は次のようになります。

if hardsoft == "Software" or hardsoft == "software" or hardsoft == "S" or hardsoft == "s" or hardsoft == "soft" or hardsoft == "Soft": 
    ... and so on 
+0

ありがとうございました –

+0

私の提案 - '' softsoft.lower()in "ソフトウェア"、 "s"、 "soft"]: ' –

+0

本当にありがとう、ありがとう –

関連する問題