我不知道為什么我會收到此錯誤:Traceback (most recent call last): line 78, in find_max_gap(x) line 22, in find_max_gap vmin = x[0] TypeError: 'int' object is not subscriptable
我是 Python 新手,所以我很難跟蹤我所犯的錯誤。我一直在試圖弄清楚一整天發生了什么
用戶輸入引數并創建一個隨機串列,計算其元素之間的最長距離。
import random
def generate_random_floats(n,m,seed):
x = []
if (y==0):
random.seed()
for i in range (n):
x.append(random.uniform(-m,m))
else:
random.seed(y)
for i in range (n):
x.append(random.uniform(-m,m))
return x
pass
# function that returns a list of n random numbers in span
# -m, m with seed generator of random numbers (optional argument)
def find_max_gap(x):
vmin <= x[0]
dmax = 0
for i in range (n):
if (x[i] < vmin):
vmin = x[i]
elif (x[i] - vmin > dmax):
dmax = x[i] - vmin
return (dmax)
# function that accepts a list of real numbers and returns the maximum distance between them
pass
def present_list():
print(" The random list is:",generate_random_floats(n,m,seed))
# auxiliary function that prints the elements of a list
pass
n=-1
while n < 0 or n == 0 :
while True:
try:
# user input of how many random numbers
n = int(input(">>Define the number (n) from the random numbers.\n-Positive number) :"))
break
except:
continue
m=-1
while m < 0 :
while True:
try:
# input user -m, m
m = int(input(">>Define (range) from which random values will be selected.\n) :"))
break
except:
continue
seed=0
b=0
x=0
s=0
while True:
try:
# input seed
y = int(input("Enter the number that will set the seed value. :"))
break
except:
continue
# create list of random numbers
generate_random_floats(n,m,seed)
present_list()
find_max_gap(x)
uj5u.com熱心網友回復:
當您x = 0在代碼中定義時,您希望它將它傳遞給您的函式,因為它被隱含地視為全域變數。
然后在generate_random_floats您認為正在修改的函式中,x而實際上該x函式中的xin 與您的全域范圍中的不同。
之后,在您呼叫 時find_max_gap,在該行vmin <= x[0]中 thex仍然是一個 int (并且等于 0)。嘗試x像向量 ( x[0]) 一樣訪問會引發錯誤。
在您的代碼中需要修改一些內容,以便它執行您想要的操作:
- 我會將您的執行腳本封裝在其中
if __name__ == "__main__":(有關更多詳細資訊,請參見What does if __name__ == "__main__": do?)。 - 我會避免以全域方式使用變數。我不會像這樣呼叫你的函式,而是
generate_random_floats(n,m,seed)明確地使用函式的回傳來分配變數:x = generate_random_floats(n,m,seed)。 - 以同樣的方式,我將
x作為present_list()函式的輸入變數傳遞 - 我還將更正您對
seedand的使用y(在執行腳本和函式中)
如果您的代碼太難理解,我稍后會更正您的代碼。
編輯:更正的代碼
import random
def generate_random_floats(n,m,seed):
x = []
if (seed==0): # modified y => seed
random.seed()
for i in range (n):
x.append(random.uniform(-m,m))
else:
random.seed(y)
for i in range (n):
x.append(random.uniform(-m,m))
return x
# function that returns a list of n random numbers in span
# -m, m with seed generator of random numbers (optional argument)
def find_max_gap(x):
vmin = x[0] #corrected assignation
dmax = 0
for i in range (n):
if (x[i] < vmin):
vmin = x[i]
elif (x[i] - vmin > dmax):
dmax = x[i] - vmin
return dmax
# function that accepts a list of real numbers and returns the maximum distance between them
def present_list(x):
print(" The random list is:", x) # replaced the function call with x
# auxiliary function that prints the elements of a list
if __name__ == "__main__":
n=-1
while n < 0 or n == 0 :
while True:
try:
# user input of how many random numbers
n = int(input(">>Define the number (n) from the random numbers.\n-Positive number) :"))
break
except:
continue
m=-1
while m < 0 :
while True:
try:
# input user -m, m
m = int(input(">>Define (range) from which random values will be selected.\n) :"))
break
except:
continue
seed=0
while True:
try:
# input seed
seed = int(input("Enter the number that will set the seed value. :")) # replaced y with seed
break
except:
continue
# create list of random numbers
rfloats = generate_random_floats(n,m,seed) #generate new list rfloats
present_list(rfloats)
mgap = find_max_gap(rfloats)
print("The max gap is :", mgap)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413401.html
標籤:
