Python 并非所有参数都在字符串格式化过程中转换(证明Collatz猜想)
当我运行下面的代码时,我得到一个错误。我在这里查看了StackOverflow,但最终没有解决我的问题Python 并非所有参数都在字符串格式化过程中转换(证明Collatz猜想),python,python-2.7,type-conversion,collatz,Python,Python 2.7,Type Conversion,Collatz,当我运行下面的代码时,我得到一个错误。我在这里查看了StackOverflow,但最终没有解决我的问题 print "insert value" value = raw_input () flag = False i = 0 while flag: if value == 1: flag = True elif value % 2 == 0: value = value / 2 else: value = value *
print "insert value"
value = raw_input ()
flag = False
i = 0
while flag:
if value == 1:
flag = True
elif value % 2 == 0:
value = value / 2
else:
value = value * 3
value = value + 1
i = i + 1
print "After", i, "attempts the conjecture has been demonstrated"
我在elif
逻辑测试值%2==0
中得到一个错误
并非所有参数都在字符串格式化过程中转换
我认为问题出在变量类型上,但我尝试了
input
函数,并强制使用int
类型,value=int(input(..)
,但这也不起作用。在空闲状态下,这对我有效
value = int(raw_input ())
将原始输入转换为整数
while True:
if value == 1:
break
elif value % 2 == 0:
value = value / 2
else:
value = value * 3
value = value + 1
i = i + 1
在空闲状态下不使用任意标志的一种更简单的方法对我来说很管用
value = int(raw_input ())
将原始输入转换为整数
while True:
if value == 1:
break
elif value % 2 == 0:
value = value / 2
else:
value = value * 3
value = value + 1
i = i + 1
iScrE4m演示了如何修复您的程序,但我将解释为什么您会这样做
TypeError:在字符串格式化过程中并非所有参数都已转换
错误消息
当Python解释器在字符串后看到%
时,它将%
解释为,用于转换数据并将其插入字符串
比如说
a = 2
b = 3
print "%d + %d = %d" % (a, b, a + b)
输出
2 + 3 = 5
在您的代码中,value
是一个字符串,因此解释器尝试对value%2
执行字符串插值,但随后它发现value
不是格式化数据2
的有效格式字符串,因此它给出了TypeError
在现代代码中,不鼓励使用%
-样式的字符串格式,首选该方法。与上述示例等效的是:
print "{0} + {1} = {2}".format(a, b, a + b)
在Python 2.7及更高版本中,可以省略字段号:
print "{} + {} = {}".format(a, b, a + b)
我对你的代码还有一些评论
value = int(raw_input("Enter value: "))
i = 0
while True:
if value == 1:
break
elif value % 2 == 0:
value //= 2
else:
value = value * 3 + 1
i += 1
print "After {} attempts the conjecture has been demonstrated.".format(i)
在Python中调用函数时,通常不在函数名后加空格
在调用raw\u input
之前,无需使用print
打印提示:您可以(而且应该)将提示作为参数提供给raw\u input
执行整数除法时,应使用整数除法运算符/
。在Python2中,一个斜杠可以正常工作,但在Python3中,它不会像这里预期的那样工作,因为它将执行浮点除法。例如,10/2
将导致5.0
当需要对变量执行单个操作并将该操作的结果保存回同一变量时,可以使用增广赋值运算符。例如,您可以编写
i+=1
,而不是i=i+1
您可以编写
value//=2
,而不是value=value//=2
而且,代替
value = value * 3
value = value + 1
你可以
但是,当对一个变量执行多个操作时,在一行上执行这些操作会更紧凑、更高效。因此,更常见的做法是:
value = value * 3 + 1
总而言之,这里是代码的重新工作版本
value = int(raw_input("Enter value: "))
i = 0
while True:
if value == 1:
break
elif value % 2 == 0:
value //= 2
else:
value = value * 3 + 1
i += 1
print "After {} attempts the conjecture has been demonstrated.".format(i)
iScrE4m已经展示了如何修复您的程序,但我会解释为什么您会这样做
TypeError:在字符串格式化过程中并非所有参数都已转换
错误消息
当Python解释器在字符串后看到%
时,它将%
解释为,用于转换数据并将其插入字符串
比如说
a = 2
b = 3
print "%d + %d = %d" % (a, b, a + b)
输出
2 + 3 = 5
在您的代码中,value
是一个字符串,因此解释器尝试对value%2
执行字符串插值,但随后它发现value
不是格式化数据2
的有效格式字符串,因此它给出了TypeError
在现代代码中,不鼓励使用%
-样式的字符串格式,首选该方法。与上述示例等效的是:
print "{0} + {1} = {2}".format(a, b, a + b)
在Python 2.7及更高版本中,可以省略字段号:
print "{} + {} = {}".format(a, b, a + b)
我对你的代码还有一些评论
value = int(raw_input("Enter value: "))
i = 0
while True:
if value == 1:
break
elif value % 2 == 0:
value //= 2
else:
value = value * 3 + 1
i += 1
print "After {} attempts the conjecture has been demonstrated.".format(i)
在Python中调用函数时,通常不在函数名后加空格
在调用raw\u input
之前,无需使用print
打印提示:您可以(而且应该)将提示作为参数提供给raw\u input
执行整数除法时,应使用整数除法运算符/
。在Python2中,一个斜杠可以正常工作,但在Python3中,它不会像这里预期的那样工作,因为它将执行浮点除法。例如,10/2
将导致5.0
当需要对变量执行单个操作并将该操作的结果保存回同一变量时,可以使用增广赋值运算符。例如,您可以编写
i+=1
,而不是i=i+1
您可以编写
value//=2
,而不是value=value//=2
而且,代替
value = value * 3
value = value + 1
你可以
但是,当对一个变量执行多个操作时,在一行上执行这些操作会更紧凑、更高效。因此,更常见的做法是:
value = value * 3 + 1
总而言之,这里是代码的重新工作版本
value = int(raw_input("Enter value: "))
i = 0
while True:
if value == 1:
break
elif value % 2 == 0:
value //= 2
else:
value = value * 3 + 1
i += 1
print "After {} attempts the conjecture has been demonstrated.".format(i)
值%2==0:应该做什么?它应该检查值是否为偶数值%2==0:应该做什么?它应该检查值是否为偶数我是一名学生,它起作用了谢谢我会尽快接受(3分钟)我是一名学生,它起作用了谢谢我会尽快接受(3分钟)