[英]Hello, I am facing problems with my code, I am attaching the code as well as the error output I am receiving
編碼-
def minimum(n):
L = []
for i in range(n):
x = eval(input("enter number 1:"))
y = eval(input("enter number 2:"))
if x or y== "\n":
print("please enter valid value")
l = [x,y]
L.append(l)
print("input keyset-",L)
for i in range(n):
if L[i][0] < L[i][1]:
r = L[i]
print("FIRST","\t",r)
elif L[i][0] == L[i][1]:
r = L[i]
print("ANY","\t",r)
else:
r = L[i]
print("SECOND","\t",r)
print(minimum(4))
我收到了這個錯誤-
Traceback (most recent call last):
File "c:\Users\Ban\Documents\BAANI\code s 1.py", line 22, in <module>
print(minimum(4))
File "c:\Users\Ban\Documents\BAANI\code s 1.py", line 5, in minimum
y = eval(input("enter number 2:"))
File "<string>", line 0
SyntaxError: unexpected EOF while parsing
def minimum(n):
L = []
for i in range(n):
x = eval(input("enter number 1:"))
y = eval(input("enter number 2:"))
if "\n" in (x, y):
print("please enter valid value")
l = [x,y]
L.append(l)
print("input keyset-", L)
for i in range(n):
if L[i][0] < L[i][1]:
r = L[i]
print("FIRST","\t",r)
elif L[i][0] == L[i][1]:
r = L[i]
print("ANY","\t",r)
else:
r = L[i]
print("SECOND","\t",r)
minimum(4)
但是有更有效的方式使用 min lib:
def minimum(n):
L = []
for i in range(n):
x = eval(input("enter number 1:"))
y = eval(input("enter number 2:"))
if "\n" in (x, y):
print("please enter valid value")
L.append((x, y))
print("input keyset-", L)
for pair in L:
n = min(*pair)
print(f"the min number: {n}")
minimum(4)
當您嘗試訪問用戶輸入時,您想將其解析為 int,但是當輸入無效時 python 無法處理它。
x = input("enter number") # x is string now
n = int(x) # n is int
當你將空字符串 x 解析為 int 時,你會得到解析錯誤,因此,你應該添加錯誤句柄
x = input("enter number") # x is string now
try:
n = int(x) # n is int
except Exception as e:
# error
print(str(e))
continue
在這種情況下不要使用eval,不需要,如果需要,catch error 是解決它的唯一方法。
我嘗試運行您的代碼並輸入 1、2 等...並且效果很好,因此問題可能是由您的輸入引起的。 但是,您的代碼存在一些問題:
為了轉換input
返回的字符串,您使用eval
。 這是一個非常糟糕的主意,因為eval
所做的是將其參數解釋為 Python 源代碼,並返回結果。 您想要做的比這更簡單,您只想將字符串轉換為數字。 而不是eval(input("enter number 1:"))
,您應該使用float(input("enter number 1:"))
。 我不能 100% 確定,但我猜你對eval
的使用是導致你問題的原因
對於(我猜)檢查輸入的值是否非空,您使用: if x or y== "\n":
這被解釋為“如果 x 為真或 y 是換行符”。 這根本不是你想要的! 由於 x 和 y 是eval
的輸出,您不知道它們的類型是什么,如果正確使用程序,它們可能不會是字符串,因此與給定字符串的比較將是 False(旁注: input
修剪尾隨\n
,因此在檢查輸入字符串是否為空時,您應該使用if x == "":
或 just if not x:
)
檢查輸入是否正確后,即使輸入無效,您也可以使用 go。 您應該改用while
循環
最后,在迭代L
時,由於您只關心L[i]
(而不是i
本身),因此您應該for elt in L
( elt
是您使用的L[i]
)
有了這一切,我會將您的代碼重寫為:
def minimum(n):
L = []
for i in range(n):
while True:
try:
x = float(input("Enter number 1:"))
y = float(input("Enter number 2:"))
except ValueError:
print("Please enter valid value")
else: break
L.append([x, y])
print(f"Input keyset: {L}")
for elt in L:
if elt[0] < elt[1]: print("FIRST","\t", elt)
elif elt[0] == elt[1]: print("ANY","\t", elt)
else: print("SECOND","\t", elt)
minimum(4)
你有:
if x or y== "\n":
print("please enter valid value")
總是評估為 True
if x
或if y == '\n'
True or False = True --> 打印(輸入有效值)
如果兩個條目都為空,它只會評估為 False,這不是您想要的。
你想要做的是:
if x =='\n' or y== "\n":
print("please enter valid value")
也eval(input("enter number 1:"))
在發送空字符串''
, '\n'
或' '
時會拋出異常,這可能導致EOF錯誤,如果刪除它后,你仍然得到EOF ,您要考慮重置項目或 python 文件
我在修復后測試了代碼,它工作正常,邏輯沒有問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.