我是C ++的新手,我在完成作业时遇到了麻烦。我需要将这个if语句切换到switch语句,但由于数字必须是整数,我完全迷失了。有人能指出我正确的方向吗?
见下文:
import numpy as np
import pandas as pd
fname = 'TheBigBangTheory.Season01.Episode01.speakername'
s_name = []
p_name = []
with open('%s.ctm'%fname, 'r') as f:
for line in f:
colum = line.split(' ')
colum = [col.strip() for col in colum]
nsn = colum[7]
npn = colum[9]
s_name.append(nsn)
p_name.append(npn)
Np = sorted (np.unique(p_name))
Np.remove('"')
Ns = sorted (np.unique(s_name))
print(Np)
print(Ns)
A = np.zeros((len(Ns),len(Np)))
print(A)
答案 0 :(得分:3)
这是不可行的。 switch
需要完整的相等性,您的代码检查的次数小于双数。
不可行的选项是将double转换为精度丢失的整数,并将所有15000个选项列为case标签。根本不可行。
答案 1 :(得分:1)
如果您使用gcc,那么您可以使用案例范围:Case Ranges,但这对于整数数据类型适用于IMHO,我不确定双打。
但不要忘记,这只是编译器的扩展。我也听说类似的东西是用C ++ 11引入的,但我不确定那里。
答案 2 :(得分:1)
从技术上讲,你可以用这种可怕的方式做到这一点:
//calculate commission
switch (sales <= 15000.0)
{
case true:
commission = sales * RATE1;
break;
default:
commission = sales * RATE2;
}
但永远不会,永远在实际代码中执行此操作。
答案 3 :(得分:0)
SergeyA在his answer中指出,这是可行的,因为它涉及的范围很广。
如果它绝对需要一个switch语句,那么我们可以作弊并拥有一个返回true或false的函数,然后打开该函数的结果
bool is_less(double amount)
{
return amount < 15000.0;
}
//...
switch (is_less(sales))
{
case true: commission = sales * RATE1; break;
case false: commission = sales * RATE2; break;
}
答案 4 :(得分:-2)
你可以这样做,类似于NathanOliver的答案而没有新功能。
#include <iostream>
#include <iomanip>
using namespace std;
int main()
{
//declare named constants and variables
const double RATE1 = .02;
const double RATE2 = .05;
double sales = 0.0;
double commission = 0.0;
//get input item
cout << "Enter the sales amount: ";
cin >> sales;
//calculate commission
bool lessthan = sales <= 15000.0;
switch (lessthan)
{
case true:
commission = sales * RATE1;
break;
case false:
commission = sales * RATE2;
break;
default:
break;
}
//display commission
cout << fixed << setprecision(2);
cout << "Commission: $" << commission << endl;
system("pause");
return 0;
} //end of main function`