簡體   English   中英

您好,我的代碼遇到問題,我正在附加代碼以及收到的錯誤 output

[英]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)

更新:EOL 錯誤發生了什么

當您嘗試訪問用戶輸入時,您想將其解析為 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 Lelt是您使用的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 xif 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM