我写了一个程序,它取一个叫做十四行诗的文件,首先把十四行诗中所有的罗马数字都改成数字,复制到一个新的文件中,然后要求用户输入数字,并向他们显示与数字对应的十四行诗(如果在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'
您的问题是没有将此行包装到
try...except
块中:如果给定非数字输入,此行将引发异常,但此异常不会由
try...except
块处理。您只需要将那一行放在try...except
块中,如果那一行经过,它将保证是数字输入,因此您的比较应该可以工作然而,正如Martjin所说,这并不是最好的方法
相关问题 更多 >
编程相关推荐