Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/317.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 并非所有参数都在字符串格式化过程中转换(证明Collatz猜想)_Python_Python 2.7_Type Conversion_Collatz - Fatal编程技术网

Python 并非所有参数都在字符串格式化过程中转换(证明Collatz猜想)

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 *

当我运行下面的代码时,我得到一个错误。我在这里查看了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 * 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分钟)