1

プログラムでユーザーが入力できる内容を制限しようとしています。以下のコードから「インデントされたブロックが必要です」というエラーが返され続けます。

deliverydetails = input("Is your order for delivery?\n Press 1 for delivery. Press 2 for pickup")

if deliverydetails == "1":

##    def delivery ():

    print ("Order for Delivery")
    customerfirstname = " "
    while len(customerfirstname) <3 or len(customerfirstname)>30 or customerfirstname.isalpha() != True:
    customerfirstname = input("Customer First Name: ** must be 4 characters long  + " ")                         
    while len(customersurname) < 3 or len(customersurname) > 30 or     customerfirstname.isalpha() != True:                        
    customersurname = input("Customer Surname:" + " ")
    customerstreet = input("Street name:" + " ")
    customerstreetnumber = input("Street number:" + " ")
    customercity = input("City:" + " ")
    customersuburb = input("Suburb (If none, leave blank):" + " ")
    latestOrder.append(customerfirstname)
    latestOrder.append(customersurname)
    latestOrder.append(customerstreet)
    latestOrder.append(customerstreetnumber)
    latestOrder.append(customercity)
    latestOrder.append(customersuburb)
4

3 に答える 3

2

Python では、インデントを使用してコード ブロックをグループ化します。while ステートメントの後、while ループ内で実行する必要があるその下の行をインデントします。

その他の役立つヒントを次に示します。 - pylint を使用して構文を確認します。そうしないと実行時にしか見つからない多くのエラーが明らかになります。- スペースを使用してインデントします。タブを使用しないでください。それはPEP 8スタイルの推奨事項です

コードの修正版は次のとおりです。

deliverydetails = input("Is your order for delivery?\n Press 1 for delivery. Press 2 for pickup")

if deliverydetails == "1":
##    def delivery ():
    print ("Order for Delivery")
    customerfirstname = " "
    customersurname = " "

    while len(customerfirstname) <3 or len(customerfirstname)>30 or customerfirstname.isalpha() != True:
        customerfirstname = input("Customer First Name: ** must be 4 characters long  + " ")                         

    while len(customersurname) < 3 or len(customersurname) > 30 or     customerfirstname.isalpha() != True:                        
        customersurname = input("Customer Surname:" + " ")

    customerstreet = input("Street name:" + " ")
    customerstreetnumber = input("Street number:" + " ")
    customercity = input("City:" + " ")
    customersuburb = input("Suburb (If none, leave blank):" + " ")
    latestOrder.append(customerfirstname)
    latestOrder.append(customersurname)
    latestOrder.append(customerstreet)
    latestOrder.append(customerstreetnumber)
    latestOrder.append(customercity)
    latestOrder.append(customersuburb)
于 2012-10-16T04:10:03.807 に答える
1

Python は or の代わりに意図を使用する{}ためbegin/end、たとえば次の行

while len(customerfirstname) <3 or len(customerfirstname)>30 or customerfirstname.isalpha() != True:

インデントされたブロックが続く必要があります。インデントされたブロックは、1 行と同じくらい短くすることができます。通常、インデントする必要があるのは、while

余談ですが、その行を次のように書く方が明確かもしれません

while not (3 <= len(customerfirstname) <= 30 and customerfirstname.isalpha()):
于 2012-10-16T01:43:51.037 に答える
0

ループの一部である行を必ずインデントしてください。これが、ループしたい部分を Python が認識しなければならない唯一の方法です。

delivery_details = input("Is your order for delivery?\n Press 1 for delivery. Press 2 for pickup")

if delivery_details == "1":
    print "Order for Delivery"

    customer_first_name = ""
    while len(customer_first_name) < 3 or len(customer_first_name) > 30 or not customer_first_name.isalpha():
        customer_first_name = input("First name (must be 4 characters long): ")

    customer_surname       = input("Surname: ")
    customer_street        = input("Street name: ")
    customer_street_number = input("Street number: ")
    customer_city          = input("City: ")
    customer_suburb        = input("Suburb (If none, leave blank): ")

    latest_order.append(customer_first_name)
    latest_order.append(customer_surname)
    latest_order.append(customer_street)
    latest_order.append(customer_street_number)
    latest_order.append(customer_city)
    latest_order.append(customer_suburb)

価値があるのは、読みやすさのためにいくつかのスタイル上の変更を加えたことです。変数名に余分なスペース、空白行、およびアンダースコアを追加すると、すべてが少し見やすくなります。

于 2012-10-16T01:43:18.913 に答える