我正在尝试编写一个以字符串和宽度作为输入并提供输入的程序:
ABCDEFGHIJKLIMNOQRSTUVWXYZ 4 并给出一个输出(在换行符中): ABCD \ n EFGH \ n IJKL \ n IMNO \ n QRST \ n UVWX \ n YZ
我写了这段代码:
def wrap(string, max_width):
while 0 < len(string) < 1000 and 0 < max_width < len(string):
print (textwrap.fill(string,max_width))
while True:
try:
string = input()
max_width = int(input())
except EOFError:
print("EOFError")
break
我该怎么做才能解决这个问题,我还是编程新手。我得到的错误信息是:
Original exception was:
Traceback (most recent call last):
File "try2.py", line 8, in <module>
max_width = int(input())
ValueError: invalid literal for int() with base 10: ''
答案 0 :(得分:1)
每个input()
“消耗”整行。您需要将其拆分为2 或将其输入为两行。如果您在1行中输入全部并且返回两次返回,则会出现错误,int(input())
成为要转换的空字符串文字,这会引发ValueError
- 而不是EOFerror
(https://docs.python.org/3/library/exceptions.html )
我添加了对它们的处理,错误的解析输出“helptext”,空行退出
拆分版本:'ABCDEFGHIJKLIMNOQRSTUVWXYZ 4'
def wrap(string, max_width):
print('\n'.join( [ string[i:i+max_width] for i in range(0,len(string),max_width) ]) )
while True:
try:
s = input() # ABCDEFGHIJKLIMNOQRSTUVWXYZ 4 + return
if not s:
print("Empty input quits program.")
break
spl = s.split()
string, max_width = spl[0], int(spl[1])
except ValueError:
print("ValueError: place text and spacing into 1 line, separated by space")
continue
except IndexError:
print("ValueError: place text and spacing into 1 line, separated by space")
continue
wrap(string,max_width)
应该有效。列表表达式从您的输入开始创建切片,从[0:0+max_width]
开始,并按max_width
将其与'\n'
连接,以便打印输出。
两个输入版本:'ABCDEFGHIJKLIMNOQRSTUVWXYZ'
和'4'
在不同的行中:
def wrap(string, max_width):
print('\n'.join( [ string[i:i+max_width] for i in range(0,len(string),max_width) ]) )
while True:
try:
string = input() # ABCDEFGHIJKLIMNOQRSTUVWXYZ + return
if not string:
print("Empty input quits program.")
break
max_width = int(input()) # 4 + return
except ValueError:
print("ValueError: place text into 1 line, number into next line")
continue
wrap(string,max_width)