我编写了这个程序,它接受一个名为Sonnets的文件,首先,将十四行诗中的所有罗马数字更改为数字,将其复制到新文件,然后要求用户输入数字,并向他们显示与他们相对应的十四行诗数字(如果在1到7之间)。
对于1和7以外的数字,我会显示相应的错误消息,给出他们输入的内容以及他们需要再输入的内容的具体指示。
我分别编写了所有函数,当我将它们放在一起时一切都运行除了函数serve_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'
答案 0 :(得分:0)
您的问题是您没有将此行包裹在try...except
块中:
x=int(input("Please enter a number 1-7:"))
如果给出非数字输入,此行将引发异常,但try...except
块不会处理此异常。你只需要将一行放在try...except
块中,如果该行通过它将保证是数字输入,所以你的比较应该有效。
然而,正如Martjin所说,这不是最佳方法。