问题描述
我在一个初学者脚本课程中,我们需要编写一些基于整数输入进行更改的代码。它还需要为每种硬币类型打印正确的复数。我在让我的代码工作时遇到了一些麻烦,因为它在它执行的第一个操作时停止,我不知道如何让它继续。我猜这与我如何布置所有这些 elif 语句有关,我不确定正确的做法是让代码继续,如果它仍有余数进行更改:
import sys
from PyQt5.QtWidgets import *
from PyQt5.QtCore import *
class MainWindow(QMainWindow):
def __init__(self):
QMainWindow.__init__(self)
self.setMinimumSize(300,300)
self.pushButton1 = QPushButton("see css result",self)
self.pushButton1.setCheckable(True)
#self.pushButton1.setAutoFillBackground (True) # mentioned in
self.pushButton1.setStyleSheet(css_pushButton())
self.pushButton1.resize (100,40)
self.pushButton1.move(50,50)
print("scc1:",self.pushButton1.styleSheet())
self.pushButton_control = QPushButton("Button Enabled",self)
self.pushButton_control.setCheckable(False)
self.pushButton_control.clicked.connect(self.pushButton_control_clicked)
self.pushButton_control.move(50,100)
self.pushButton_control.resize (100,40)
def pushButton_control_clicked(self):
print("Checked:",self.pushButton1.isChecked())
if self.pushButton1.isEnabled():
print("set False")
self.pushButton1.setEnabled(False)
self.pushButton_control.setText(('disABLED'))
else:
self.pushButton1.setEnabled(True)
self.pushButton_control.setText(('ENABLED'))
print("set True")
def css_pushButton():
css = '''
QPushButton {
font-size: 10px;
background-color: green;
color: black;
border: 2px green;
border-radius: 22px;
border-style: outset;
}
QPushButton:hover {
background: qradialgradient(
cx: 0.3,cy: -0.4,fx: 0.3,fy: -0.4,radius: 1.35,stop: 0 grey,stop: 1 lightgray
);
}
QPushButton:enabled{
color: black;
font: 10px;
background: green;
background-color: red;
border: 1px black;
border-style: outset;
}
QPushButton:pressed {
color: white;
background: yellow;
}
QPushButton:disabled {
color: gray;
background-color: gray;
border: 1px black;
border-style: outset;
}
QPushButton:checked{
color: black;
font: 12px;
font: bold;
background-color: red;
border: 1px black;
border-style: outset;
}
QPushButton:!checked{
color: black;
font: 12px;
font: bold;
background-color: green;
border: 1px black;
border-style: outset;
}
'''
return css
if __name__ == "__main__":
app = QApplication (sys.argv)
prog = MainWindow()
prog.show ()
app.exec_ ()
谁能给我一个主意?感谢您抽出宝贵时间。
解决方法
始终从其余更改中减去您已经匹配的内容。 然后继续使用 IF 而不是 ELIF,因为 elif 将永远不会再次匹配前一个 if 匹配。
# Get input for amount of change
change = int(input())
# If change is less than 1,print 'No change'
if change < 1:
print('No change')
# If change is over 199,subtract and print 'X Dollars'
if change > 199:
print(change // 100,'Dollars\n')
change = change - change // 100 * 100
# If change is 100-199,subtract and print '1 Dollar'
if 99 < change <= 199:
print('1 Dollar\n')
change = change - 100
# If remaining change is 50-99,subtract and print 'X Quarters'
if 49 < change <= 99:
print(change // 25,'Quarters\n')
change = change - change // 25 * 25
# ....
等等...
,如果我的问题是正确的,那就是根据不断减少直到为零的“变化”打印 dollars
/dollar
[和子值]。
让我澄清一下(不是美元用户:):
- 1 便士 = 1 美分
- 1 镍 = 5 美分
- 1 角钱 = 10 美分
- 1 个季度 = 25 美分
- 1 美元 = 100 美分
因此,如果输入为 1451
Cents,则预期输出为:1451 = 14 Dollars 2 Quarters 0 Dime 0 Nickel 1 Penny
你可以这样做:
change = int(input())
wt = {'Dollar': 0,'Quarter': 0,'Dime': 0,'Nickel': 0,'Penny': 0} # weight
wt['Dollar'] = change // 100
change = change % 100
wt['Quarter'] = change // 25
change = change % 25
wt['Dime'] = change // 10
change = change % 10
wt['Nickel'] = change // 5
change = change % 5
wt['Penny'] = change // 1
change = change % 1
for key,value in wt.items():
print(f'{value} {key}s' if value > 1 else f'{value} {key}',end=' ')
print()
输出:
➜ python file.py
112341
1123 Dollars 1 Quarter 1 Dime 1 Nickel 1 Penny
➜ python file.py
24
0 Dollar 0 Quarter 2 Dimes 0 Nickel 4 Pennys # you might wanna add some small condition to rectify this :)
➜ python file.py
521
5 Dollars 0 Quarter 2 Dimes 0 Nickel 1 Penny