當用戶輸入無效值以存儲到「數字」變量中時,我無法保護腳本不會崩潰。在不使用max的情況下打印列表中的最大數()
程序目的:允許用戶輸入整數,將它們存儲到列表中,然後找到並打印出最大的數字。不允許輸入字符串或浮點數。
功能:
getNum(prompt)
- 測試和將輸入的值整數和返回y。swap(A, x, y)
- 簡單交換例程函數對數據進行排序。 (目前未使用)sortNum(A)
- 在列表中排序和使用Swap例程。maxIt(numbers)
- 查找列表中最高的數字。 (IN USE),如果我使用這個max函數,我認爲我甚至不需要對列表進行排序。main()
代碼:輸入一個STR或漂浮到getNum當
Please enter an integer or < 0 to finish >: 222
Please enter an integer or < 0 to finish >: 333
Please enter an integer or < 0 to finish >: 444
Please enter an integer or < 0 to finish >: 555
Please enter an integer or < 0 to finish >: 666
Please enter an integer or < 0 to finish >: 777
Please enter an integer or < 0 to finish >: 888
Please enter an integer or < 0 to finish >: 999
Please enter an integer or < 0 to finish >: 0
The maximum value is: 999
錯誤:
def getNum(prompt):
# Function to call when asking for the numbers later.
# Try/except to catch crashes if failing to store integer.
try:
x = input(prompt)
y = int(x)
return y
# Message to print when excepting.
except:
print("I was expecting an integer number, please try again... \n")
# Function to swap to highest # in list 'numbers'.
def swap(A, x, y):
temp1 = A[x]
A[x] = A[y]
A[y] = temp1
# Function to perform the looping/swap routine.
# Program can find max with separate function.
## This function is to sort the numbers in the list.
def sortNum(A):
for i in range(len(A)):
for k in range(len(A) - 1):
first = k
second = k + 1
if (A[first] > A[second]):
# Uses Swap function
swap(A, first, second)
# Function to find the highest number in the list.
def maxIt(numbers):
maxNum = numbers[0]
for i in numbers:
if i > maxNum:
maxNum = i
return maxNum
# Start main
def main():
# Creates the numbers array.
numbers = []
# Starts the loop to enter numbers into the array.
done = False
while not done:
numInput = getNum("Please enter an integer or < 0 to finish >: ")
# Stores every input from numInput into numbers.
numbers.append(numInput)
# Test condition to break out of loop '0'.
if numInput is 0:
# Prints the resulting max number once finished.
print("The maximum value is: " + str(maxIt(numbers)))
# Flag to stop the program once finished.
done = True
main()
電流輸出時不失敗getNum的測試(STR或浮動)/numInput:
Please enter an integer or < 0 to finish >: 222
Please enter an integer or < 0 to finish >: 333
Please enter an integer or < 0 to finish >: 444
Please enter an integer or < 0 to finish >: test
I was expecting an integer number, please try again...
Please enter an integer or < 0 to finish >: 555
Please enter an integer or < 0 to finish >: 666
Please enter an integer or < 0 to finish >: 0
Traceback (most recent call last):
File "C:\Users\Bar\Desktop\IS115\Peretz_A9.py", line 64, in <module>
main()
File "C:\Users\Bar\Desktop\IS115\Peretz_A9.py", line 59, in main
print("The maximum value is: " + str(maxIt(numbers)))
File "C:\Users\Bar\Desktop\IS115\Peretz_A9.py", line 37, in maxIt
if i > maxNum:
TypeError: '>' not supported between instances of 'NoneType' and 'int'
問題是,您的嘗試除了返回null而不是循環 –
此外,您應該更具體的錯誤處理 - 「ValueError'除外 - 並保持try塊儘可能短。 – jonrsharpe