以下是我在Python 2.7中構建的一個簡單的Mils to Degrees轉換計算器的(半)完成版本,作爲學習練習。我是Python新手,仍然在努力解決問題。前提是,用戶選擇將mils轉換成度,反之亦然。用戶輸入所選單位的方位角並將其轉換爲另一個單位。如果用戶選擇一個無效的菜單選項,他會被通知。如果他輸入範圍之外的方位角(1-360度,密耳爲1-6400),他將被通知並且必須重新開始。問題是,如果用戶輸入一個無效的方位角,比如365度,他會被踢回菜單。 有沒有辦法返回到if/else循環中的上一步?我搜索了論壇和文檔,它似乎不可能。另外,由於我是Python的新手,如何使此代碼更高效? 我是否需要如果和elif語句在函數定義中,還是可以將它們組合在一起而不會產生錯誤或冗餘輸出?我沒有成功這樣做。所有的投入都歡迎和讚賞。Python轉換計算器循環/代碼效率
#Mil-Deg.py
#Simple Mils/Degrees Conversion Calculator
#6 JAN 2013
#Note: 6400 mils/360 degrees in a circle. 17.78 mils to one degree.
import sys
import math
import winsound
#Define menu function
def menu():
print
print " Mils/Degrees Conversion Calculator"
print "-" * 38
print
print "Options: "
print "1. Degrees to Mils"
print
print "2. Mils to Degrees"
print
print "3. Quit"
print "-" * 20
print
return input ("Choose your option: ")
print
#Define mils to degrees function
def m2d(a):
if a <= 6400 and a >= 1: #get user input within given range
b = 17.78
c = round((a/b),0) #convert and round to nearest degree
if c > 359 or c < 1: #change 0 degrees to 360
c = 360
#Output
print
print a, "mils =", int (c), "degrees"
else:
print
print a, "mils =", int (c), "degrees"
elif a > -1 and a < 1: #change 0 mils to 6400
a = 6400
b = 17.78
c = round((a/b), 0) #math, same as above
if c > 359 or c < 1: #0 to 360, same as above
c = 360
#Output
print
print 6400, "mils =", int (c), "degrees"
else:
print
print a, "mils =", int (c), "degrees"
else:
#warning, mulligan
winsound.Beep(440, 500)
print
print "*** There are only 6400 mils in a circle. Try again. ***"
print
print "-" * 38
print
#define degrees to mils function
def d2m(b):
if b <= 360 and b > 0: #get user input within given range
a = 17.78
c = round((b * a),0) #convert and round to nearest mil
if c >= 6400: #set limit to 6400 mils
c = 6400
#Output
print
print b, "degrees =", int (c), "mils"
else:
print
print b, "degrees =", int (c), "mils"
elif b > -1 and b < 1: #change 0 to 360 degrees
b = 360
a = 17.78
c = round((b * a),0) #math, same as above
if c >= 6400:
c = 6400
#Output
print
print 360, "degrees =", int (c), "mils"
else:
print
print b, "degrees =", int (c), "mils"
else:
#warning
winsound.Beep(440, 500)
print
print "*** There are only 360 degrees in a circle. Try again. ***"
print
print "-" * 38
print
#Begin program
loop = 1
choice = 0
while loop == 1:
choice = menu() #Menu function call
if choice == 1: #If user chooses degrees to mils:
#Output
print
print "Enter your azimuth in degrees (1 - 360)"
print
d2m(input("Degrees: ")) #function call
elif choice == 2: #If user chooses mils to degrees:
#Output
print
print "Enter your azimuth in mils (1 - 6400)"
print
m2d(input("Mils: ")) #function call
elif choice == 3: #If user chooses quit, exit program
loop = 0
elif choice != 1 and choice != 2 and choice != 3: #if user makes invalid menu choice:
#warning
winsound.Beep(440, 500)
print
print
print
print choice, "is not a valid choice."
print
print "Please choose from the available options."
print
print
print
print "-" * 38
print
print "Thank you for using Mil-Deg.py"
print
print
'如果-else'不是一個循環,嘗試'while'循環這裏。 –
你的'return'語句後面有'print',它永遠不會被執行。你還應該使用'raw_input',它比'input'安全得多。 'raw_input'將接受輸入並將其轉換爲一個字符串。 –
@AshwiniChaudhary,謝謝。我有一點C經驗。我應該意識到這一點。我嘗試過,但我把它放在函數定義而不是執行塊,它導致了一個無限循環。現在,我把它放在正確的地方,它按預期工作。謝謝。 – Betastate