如何将“return / cr”识别为可用的字符串?

时间:2014-07-31 03:42:34

标签: python

这就是我所拥有的

# my code
print "This is fun"
said = raw_input("<...")
print type (said)   #checking to see what type "\r" would be 
if said == "\r":
    print type(said)
    print "Error"
    said = raw_input("<...")
print "for the whole family.\n"*int(said)
print "HAHaHaHAAAAA"

输入“2”时会发生这种情况。该模块完成了预期的工作

This is fun
<...2
<type 'str'>
for the whole family.
for the whole family.

HAHaHaHAAAAA

输入“enter \ cr”时会发生这种情况

This is fun
<...
<type 'str'>

Traceback (most recent call last):
  File "C:\Python27\ascii.py", line 10, in <module>
    print "for the whole family.\n"*int(said)
ValueError: invalid literal for int() with base 10: ''

This is fun
<...
<type 'str'>

Traceback (most recent call last):
  File "C:\Python27\ascii.py", line 10, in <module>
    print "for the whole family.\n"*int(said)
ValueError: invalid literal for int() with base 10: ''

它将“输入\”\ r \ n“识别为字符串 它没有在“if”语句中识别“\ r”,而是在第10行中识别。

为什么会这样?

3 个答案:

答案 0 :(得分:1)

如果您在访问said语句之前尝试确保print是一个整数,那么您应该使用while循环:

while True:
    try:
        said = int(raw_input('<...'))
        break
    except ValueError:
        print('Please enter a number')

您的代码未执行您认为应该执行的操作的原因是因为如果没有为raw_input ()输入值,则该值未设置为\r,则将其设置为空字符串, ''raw_input函数将从值中删除返回字符。如果输入\r,则会自动转义,并且该值将设置为\\r

答案 1 :(得分:1)

在条件设置中,您正在检查said是否为"\r"。嗯,它不是(在你的测试中,它是""),所以条件是假的。

要在调试时正确查看变量的内容,请尝试使用类似print '%r' % said的内容。

如果您使用带有CR / LF行结尾的终端,字符串文字"\r"可能会以字符串结尾,但显然您不是(或者终端驱动程序在将输入传递给Python之前规范化行结尾) )。

答案 2 :(得分:0)

问题在于打印"for the whole family.\n"*int(said)

空字符串''无法转换为int

检查字符串是否为空或使用print "for the whole family.\n"*int(said or '0')