2014-01-20 69 views
0

該程序正常工作,但每個if語句中必須重複time =「%s:%s」%(小時,分鐘)。我已將它放在所有其他範圍和地點,但我無法弄清楚它爲什麼必須重複,而不是在if語句或其他位置之外宣佈它。不必要的重複聲明

def minutesToHours(): 
    hour = 0 
    entry = input("How many minutes? I will convert it to hours...") 

    if 0 <= entry < 60: 
     minute = entry 
     time = "%s:%s" % (hour, minute) 
     print time 
    elif entry >= 60: 
     hour = entry/60 
     minute = entry % 60 
     time = "%s:%s" % (hour, minute) 
     print time 
    else: 
     print "Please enter a number greater than zero next time." 

minutesToHours() 

input() 
+0

你不能例如代碼的頂部分配「時間」,因爲「分鐘」尚未定義。 – Totem

+0

Python沒有聲明;這只是一個簡單的任務。 – chepner

+0

在我以前的代碼迭代中,我將頂端的「分鐘」和「小時」分別設置爲零。我只是沒有具體提到我到目前爲止所嘗試過的... – pleaseDontPanic

回答

3

你不需要if聲明擺在首位:

hour, minute = divmod(int(entry), 60) 
time = "%s:%s" % (hour, minute) 

甚至:

time = "%s:%s" % divmod(int(entry), 60) 

這裏的divmod文檔

+0

太棒了!我還沒有發現divmod()函數。謝謝您的幫助! – pleaseDontPanic

0

因爲hour不存在,直到你在entry只是其使用上述條款定義它。

0

你可以使用lambda

def minutesToHours(): 

    time = lambda hour, minute: '%s: %s' % (hour, minute) 
    hour = 0 
    entry = input("How many minutes? I will convert it to hours...") 

    if 0 <= entry < 60: 
     minute = entry 
    elif entry >= 60: 
     hour = entry/60 
     minute = entry % 60 
    else: 
     print "Please enter a number greater than zero next time." 
     return 

    print time(hour, minute) 
1

您可能需要重構一些代碼。

  1. 您可以讓用戶輸入一個數字,而entry不是一個數字。
  2. 您並不需要if聲明,因爲計算模數與entry大於60相同或不相等。您可以使用divmod來進行除法和模數。
  3. 所以顯示器可以統一

所有這些建議:

def minutesToHours(): 
    entry = "" 
    while not entry.isdigit(): 
     if entry != "": 
      print "Please enter a number greater than zero next time." 
     entry = input("How many minutes? I will convert it to hours...") 

    hour, minutes = divmod(int(entry), 60) 
    time = "%s:%s" % (hour, minutes) 
    print time 

minutesToHours() 

input() 
0
def minutesToHours(): 
    entry = input("How many minutes? I will convert it to hours...") 
    if entry < 0: 
     print "Please enter a number greater than zero next time." 
    else: 
     print "%02d:%02d" % divmod(entry,60)   

minutesToHours() 

input()