函数在不同的实例中运行不同

2024-05-28 20:04:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我写了一个程序,它取一个叫做十四行诗的文件,首先把十四行诗中所有的罗马数字都改成数字,复制到一个新的文件中,然后要求用户输入数字,并向他们显示与数字对应的十四行诗(如果在1到7之间)

对于1和7之外的数字,我会显示相应的错误消息,给出他们输入的内容和需要再次输入的内容的具体说明

我分别编写了所有函数,当我将它们放在一起时,除了函数serve\u poem()中的“EXCEPT”部分外,所有函数都会运行。当我单独运行函数时,它给了我正确的错误消息,但是,现在它只给我自动错误消息,而不是我编码的特定消息

我把我的全部代码都贴在下面,因为我发现其他函数中的某个函数弄乱了它(???),因为它本身运行得很好

def change_romans_to_numbers(s):
    if   s == "I.":     
        return("1.")
    elif s == "II.":    
       return("2.")
    elif s == "III.":   
        return("3.")
    elif s == "IV.":   
        return("4.")
    elif s == "V.":    
        return("5.")
    elif s == "VI.":    
        return("6.")
    elif s == "VII.":   
        return("7.")
    else:               
        return s

def serve_poem():
    sonnet=open(r"C:\Users\Emily\Documents\sonnets.txt", "r")
    x=int(input("Please enter a number 1-7:"))
    s=sonnet.readlines()
    s=list(s)
    try:
        if x==1:
            up=int(2+14*(x-1))
            lower=int(2+14*(x-1)+14)
            for i in range (up,lower):
                print(s[i])
        if 2<=x<=7:
            up=int((2+14*(1-1))+(19*(x-1)))
            lower=int((2+14*(1-1)+14)+(19*(x-1)))
            for i in range (up,lower):
                print(s[i])
        if x<0:
            print("You entered a negative number. Please enter a number between 1 and 7:")
            serve_poem()
        if x==0:
            print("You entered 0. Please enter a number between 1 and 7:")
            serve_poem()
        if x>7:
            print("You entered a number greater than 7. Please enter a number between 1 and 7:")
            serve_poem()
    except ValueError:
        print("Error: Value Error. You did not enter a number at all! Please re-enter a number:")
        serve_poem()

def writing_romans_to_numbers():        
    sonnet=open(r"C:\Users\Emily\Documents\sonnets.txt", "r")
    sonnet_fixed=open(r"C:\Users\Emily\Documents\sonnets-fixed.txt", "w")
    for line in sonnet:
        new=change_romans_to_numbers(line.strip())
        sonnet_fixed.write(new + '\n')

def main():
    writing_romans_to_numbers()
    serve_poem()

main()

这是我的错误消息(如果用户输入q):

File "C:/Users/Emily/.spyder2-py3/temp.py", line 28, in serve_poem
x=int(input("Please enter a number 1-7:"))

ValueError: invalid literal for int() with base 10: 'q'

Tags: 函数消息numberreturnif错误数字int
1条回答
网友
1楼 · 发布于 2024-05-28 20:04:35

您的问题是没有将此行包装到try...except块中:

    x=int(input("Please enter a number 1-7:"))

如果给定非数字输入,此行将引发异常,但此异常不会由try...except块处理。您只需要将那一行放在try...except块中,如果那一行经过,它将保证是数字输入,因此您的比较应该可以工作

然而,正如Martjin所说,这并不是最好的方法

相关问题 更多 >

    热门问题