用和交换尝试if

时间:2016-09-13 19:27:01

标签: python python-3.x

交换时为什么会出现错误

try:
    hrs=float(hrs)
    rate=float(rate):

if hrs=float(hrs) and rate=float(rate):

换句话说:

  1. 我使用and
  2. 时出错
  3. 我的代码中存在概念错误
  4. 你能不能try代替if,(如果可以的话,那不会使try多余吗?)
  5. 代码:

    hrs = raw_input('how many hours do you work per week:')
    rate = raw_input('what is your rate per hour?:')
    #try:
        #hrs=float(hrs)
        #rate=float(rate)
    if (hrs == float(hrs) and rate == float(rate)):
        if (hrs > 40.0):
            pay=2*hrs*rate
            print ('your weekly salary is: %0.2f') %pay
        else: 
            pay = hrs*rate
            print('your weekly salary is: %0.2f') %pay
    else:  
    #except:
        print('enter a number, yo')    
    

4 个答案:

答案 0 :(得分:2)

  

3)如果

你不能交换尝试

是那个。 tryif执行完全不同的工作,语法完全不同。它们不可互换。

try用于处理异常。 try下的代码块无条件运行。如果在该代码块中抛出异常,并且异常类型与except块之一匹配,则异常停止传播,并运行关联的except块来处理异常。

if用于决定是否根据条件做一件事或另一件事。评估if上的表达式,如果表达式具有真值,则执行if下的代码块。否则,执行else下的块。

异常和真/假条件完全不同。

答案 1 :(得分:2)

其他人已经通过= vs ==来解决这个问题。

但值得一提的是,python严重依赖缩进来创造意义。行if hrs>40.0:应缩进。您的第一个else语句没有与您当前存在的程序相对应的if

答案 2 :(得分:0)

=是赋值运算符。

因此,在试用案例中,您的代码确认您确实可以设置' hrs'到浮点值(小时),它运行得很好。

但是hrs = float(hrs)不是bool,所以不能在if语句中使用。

 hrs == float(hrs)

会在适当的时候给你一个真或假,并且可以在if语句中使用。

答案 3 :(得分:0)

假设用户输入有效代表两个浮点数的文本。然后if语句失败:由于raw_input返回一个字符串,hrs最初绑定到一个字符串。在if语句中,float函数返回一个数字(当然是浮点数);表达式hrs == float(hrs)引发异常,因为您试图将数字与字符串进行比较。

假设用户输入了一些不能转换为浮点数的文本。现在if语句由于其他原因而失败:float函数在无法转换字符串时引发异常。这意味着浮点函数不会返回,因此从不尝试==比较。在这两种情况下,您都没有看到错误消息。

在注释掉的try:除了程序版本之外,try:block中抛出异常,因此异常处理程序运行,并打印错误消息。

你想要的是这样的东西(使用try:except:else:的好例子)

str_hrs = raw_input('how many hours do you work per week:')
str_rate = raw_input('what is your rate per hour?:')
try:
    hrs = float(str_hrs)
    rate = float(str_rate)
except:
    print('enter a number, yo')    
else:
    if (hrs > 40.0):
        pay=2*hrs*rate
        print ('your weekly salary is: %0.2f') %pay
    else: 
        pay = hrs*rate
        print('your weekly salary is: %0.2f') %pay