我已经写了这个程序,它获取一个叫做十四行诗的文件,首先,将十四行诗中的所有罗马数字改为数字,复制到一个新文件中,然后要求用户输入数字,并向他们显示与他们的数字相对应的十四行诗(如果在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'发布于 2015-03-15 17:11:48
您的问题是您没有在try...except块中包装这一行:
x=int(input("Please enter a number 1-7:"))如果给定非数值型输入,此行将引发异常,但try...except块不会处理此异常。您只需要将这一行放入try...except块中,如果该行通过,将确保它是数值输入,因此您的比较应该有效。
然而,正如Martjin所说,这不是最好的方法。
https://stackoverflow.com/questions/29058960
复制相似问题