Python 2.7 Python控制流:如果x在0.0001到0.0624之间?
所以我要做的是编写一个程序,将克面粉转换成杯面粉,反之亦然 因为杯子的测量值只有1/8杯的间隔(即0.125、0.250…),我想让程序告诉用户什么测量值最合适,基于小数点,对于不擅长分数或小数的人来说。因此,如果答案返回一个从Python 2.7 Python控制流:如果x在0.0001到0.0624之间?,python-2.7,numpy,control-flow,Python 2.7,Numpy,Control Flow,所以我要做的是编写一个程序,将克面粉转换成杯面粉,反之亦然 因为杯子的测量值只有1/8杯的间隔(即0.125、0.250…),我想让程序告诉用户什么测量值最合适,基于小数点,对于不擅长分数或小数的人来说。因此,如果答案返回一个从0001到0624杯的十进制值,程序将指示用户这大致等于杯的确切数量 或者,如果程序返回一个小数点在0.0625到0.1875杯之间的值,程序将指示用户该值大致等于x和1/8杯 例如,126克面粉等于1.008杯,那么程序会告诉用户这大约等于1杯。如果结果为1.150,用
0001
到0624
杯的十进制值,程序将指示用户这大致等于杯的确切数量
或者,如果程序返回一个小数点在0.0625到0.1875杯之间的值,程序将指示用户该值大致等于x和1/8杯
例如,126克面粉等于1.008杯,那么程序会告诉用户这大约等于1杯。如果结果为1.150,用户将被指示1杯和1/8杯是最合适的测量值
这是我写的,使用numpy
我可以得到一个从0.0001到0.0624的数字范围;但是,我不知道如何在if
语句中使用它
基本上,我想让程序做的是从数量中提取小数点,如果小数点落在某个区间(即0.0001到0.0624),那么它将打印该区间的最佳度量值
这让我有点困惑,我不完全确定我是不是太难了,还是怎么了。这是我的代码,除了指定的部分外,所有代码都有效
print "Flour Conversion Program"
import numpy as np
flour_type = raw_input( "What type of measurement do you want to use? " )
flour_recipe = raw_input( "What type of measurement does the recipe use? " )
if flour_type.lstrip() in ["Cups", "C", "cups", "cup", "c"] and flour_recipe.lstrip() in ["Grams", "Gram", "G", "g", "grams", "gram"]:
grams_to_cups = float(0.008)
flour_amount1 = raw_input("How many grams of flour does the recipe require? ")
x = float(flour_amount1)
print flour_amount1 + " grams of flour is " + str(x * grams_to_cups) + " cups."
print str((x * grams_to_cups) % 1)
#THIS IS THE PIECE OF CODE, I DON'T KNOW.
if str((x * grams_to_cups) % 1).lstring() in str(np.arrange(0.0001, 0.0624, 0.0001)):
#THIS IS THE PIECE OF CODE, I DON'T KNOW.
print str(x * grams_to_cups) + " is roughly " + str((x * grams_to_cups)-((x * grams_to_cups) % 1)) + " cups"
else:
pass
else:
print "Invalid input"
如果我告诉我的代码打印((x*grams-to-cups)%1)它只打印我想要的小数,如果我使用np.arrange(0.0001,0.0624,0.0001)
它列出了所有正确的值,但我不知道如何设置它,如果我的((x*grams-to-cups)%1)
是这些值之一np.arrange(0.0001,0.0624,0.0001)
向用户打印内容
我知道这个问题很长,但我昨天学了python,所以我还是个新手,能把事情弄清楚,任何提示都将不胜感激
谢谢。恶魔隐藏在匹配的“in”-构造函数中:
计算机以几种不同的方式表示浮点数,其中有些不“精确”,有些则是
>>> grams_to_cups = float( 0.008 )
>>> 200 * grams_to_cups
1.6
>>> ( 200 * grams_to_cups ) % 1
0.6000000000000001
>>>
>>> np.arange( 0.0001, 0.628, 0.0001 )
array([ 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0007,
0.0008, 0.0009, 0.001 , 0.0011, 0.0012, 0.0013, 0.0014,
0.0015, 0.0016, 0.0017, 0.0018, 0.0019, 0.002 , 0.0021,
0.0022, 0.0023, 0.0024, 0.0025, 0.0026, 0.0027, 0.0028,
...
0.6
... ])
只要看看你的%
过程中数学部分的结果(不使用str()
将数字转换为字符串),最后一个1
在多次、多次0
-s之后的简单地阻止匹配np.arange()
>
Python帮助(参考)可以帮助您探索如何在需要时使用内置的Decimal
数字来准确表示数字
python的许多令人愉快的特性之一是它能够检查对象:
>>> str(( 200 * grams_to_cups ) % 1).__doc__
str(object='') -> string
Return a nice string representation of the object.
If the argument is a string, the return value is the same object.
>>> dir( str(( 200 * grams_to_cups ) % 1) ) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get slice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser',
'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join',
'ljust',
'lower',
'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', ' strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
这将帮助您解决一个小问题,即在代码中为对象调用的
.lstring()
方法无法理解对象,因为它没有实现此类方法:
>>> str(( 200 * grams_to_cups ) % 1).lstring()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'lstring'
>>str((200*克到杯)%1).lstring()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“str”对象没有属性“lstring”
通过这种方式,您可以一步一步地验证构造,并在需要时采取纠正措施
希望您越来越喜欢python,Benscott,它可以并且将为您的后续项目带来很多功能。魔鬼隐藏在匹配的“in”构造函数中:
计算机以几种不同的方式表示浮点数,其中有些不“精确”,有些则是
>>> grams_to_cups = float( 0.008 )
>>> 200 * grams_to_cups
1.6
>>> ( 200 * grams_to_cups ) % 1
0.6000000000000001
>>>
>>> np.arange( 0.0001, 0.628, 0.0001 )
array([ 0.0001, 0.0002, 0.0003, 0.0004, 0.0005, 0.0006, 0.0007,
0.0008, 0.0009, 0.001 , 0.0011, 0.0012, 0.0013, 0.0014,
0.0015, 0.0016, 0.0017, 0.0018, 0.0019, 0.002 , 0.0021,
0.0022, 0.0023, 0.0024, 0.0025, 0.0026, 0.0027, 0.0028,
...
0.6
... ])
只要看看你的%
过程中数学部分的结果(不使用str()
将数字转换为字符串),最后一个1
在多次、多次0
-s之后的简单地阻止匹配np.arange()
>
Python帮助(参考)可以帮助您探索如何在需要时使用内置的Decimal
数字来准确表示数字
python的许多令人愉快的特性之一是它能够检查对象:
>>> str(( 200 * grams_to_cups ) % 1).__doc__
str(object='') -> string
Return a nice string representation of the object.
If the argument is a string, the return value is the same object.
>>> dir( str(( 200 * grams_to_cups ) % 1) ) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get slice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser',
'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join',
'ljust',
'lower',
'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', ' strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
这将帮助您解决一个小问题,即在代码中为对象调用的
.lstring()
方法无法理解对象,因为它没有实现此类方法:
>>> str(( 200 * grams_to_cups ) % 1).lstring()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'lstring'
>>str((200*克到杯)%1).lstring()
回溯(最近一次呼叫最后一次):
文件“”,第1行,在
AttributeError:“str”对象没有属性“lstring”
通过这种方式,您可以一步一步地验证构造,并在需要时采取纠正措施
希望您越来越喜欢python,Benscott,它可以并且将为您的后续项目带来很多功能。如果我理解正确,编写条件的方法是:
if 0.001 < x * grams_to_cups < 0.0624:
如果0.001
如果我正确理解了问题,编写条件的方法是:
if 0.001 < x * grams_to_cups < 0.0624:
如果0.001