我正在编写一个必须接受用户输入的程序.
#note: Python 2.7 users should use `raw_input`, the equivalent of 3.X's `input`
age = int(input("Please enter your age: "))
if age >= 18:
print("You are able to vote in the United States!")
else:
print("You are not able to vote in the United States.")
Run Code Online (Sandbox Code Playgroud)
如果用户输入合理数据,这将按预期工作.
C:\Python\Projects> canyouvote.py
Please enter your age: 23
You are able to vote in the United States!
Run Code Online (Sandbox Code Playgroud)
但如果他们犯了错误,那就崩溃了:
C:\Python\Projects> canyouvote.py
Please enter your age: dickety six
Traceback (most recent call last):
File "canyouvote.py", line 1, in …Run Code Online (Sandbox Code Playgroud) 我正在编写一个Python应用程序,它将命令作为参数,例如:
$ python myapp.py command1
Run Code Online (Sandbox Code Playgroud)
我希望应用程序是可扩展的,即能够添加实现新命令的新模块,而无需更改主应用程序源.树看起来像:
myapp/
__init__.py
commands/
__init__.py
command1.py
command2.py
foo.py
bar.py
Run Code Online (Sandbox Code Playgroud)
所以我希望应用程序在运行时找到可用的命令模块并执行适当的命令模块.
Python定义了一个__import__函数,它接受一个模块名称的字符串:
__import __(name,globals = None,locals = None,fromlist =(),level = 0)
该函数导入模块名称,可能使用给定的全局变量和局部变量来确定如何解释包上下文中的名称.fromlist给出了应该从name给出的模块导入的对象或子模块的名称.
所以目前我有类似的东西:
command = sys.argv[1]
try:
command_module = __import__("myapp.commands.%s" % command, fromlist=["myapp.commands"])
except ImportError:
# Display error message
command_module.run()
Run Code Online (Sandbox Code Playgroud)
这很好用,我只是想知道是否可能有更惯用的方法来完成我们正在使用此代码.
请注意,我特别不想使用鸡蛋或扩展点.这不是一个开源项目,我不希望有"插件".重点是简化主应用程序代码,并在每次添加新命令模块时无需修改它.
有人能举例说明为什么与Python生成器函数相关的"发送"功能存在吗?我完全理解屈服函数.但是,发送功能让我很困惑.有关此方法的文档很复杂:
generator.send(value)
Run Code Online (Sandbox Code Playgroud)
恢复执行并将值"发送"到生成器函数中.value参数成为当前yield表达式的结果.send()方法返回生成器产生的下一个值,如果生成器退出而不产生另一个值,则引发StopIteration.
那是什么意思?我认为价值是功能的输入?短语"send()方法返回生成器产生的下一个值"似乎也是yield函数的确切目的; yield返回生成器产生的下一个值...
有人能给我一个利用发送器生成器的例子吗?
我正在编写一个拒绝访问未授权用户的安全系统.
import sys
print("Hello. Please enter your name:")
name = sys.stdin.readline().strip()
if name == "Kevin" or "Jon" or "Inbar":
print("Access granted.")
else:
print("Access denied.")
Run Code Online (Sandbox Code Playgroud)
它按预期授予对授权用户的访问权限,但它也允许未经授权的用户访问!
Hello. Please enter your name:
Bob
Access granted.
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我明确表示,只有在与nameKevin,Jon或Inbar相同时才授予访问权限.我也尝试过相反的逻辑if "Kevin" or "Jon" or "Inbar" == name,但结果是一样的.
我遇到了一个python问题.我想用来type()找出我正在使用的变量类型.代码看起来与此类似:
class Foo():
array=[ myField(23),myField(42),myField("foo"), myField("bar")]
def returnArr(self):
for i in self.array:
print type(i)
if __name__ == "__main__":
a=Foo()
a.returnArr()
Run Code Online (Sandbox Code Playgroud)
编辑:myField()是我定义的类.
当我要求type()时,我得到: <type 'instance'>现在根据1,这是因为我使用了一个类元素并要求type()它.现在,我需要的是:<type 'int'>对于例如:myField(42)与<type 'str'>对myField(foo).我怎么能实现这一点?
编辑:
def __init__(self, name, default, fmt="H"):
self.name = name
if fmt[0] in "@=<>!":
self.fmt = fmt
else:
self.fmt = "!"+fmt
self.default = self.any2i(None,default)
self.sz = struct.calcsize(self.fmt)
self.owners = []
Run Code Online (Sandbox Code Playgroud)
代码取自scapy,我尝试调整它.
bin(30)的输出中"b"代表什么:"0b11110"?有什么办法可以摆脱这个"b"吗?如何让bin()的输出始终返回标准的8位数输出?
有什么办法可以阻止python.exe在完成后立即关闭吗?它关闭的速度比我读取输出的速度快.
这是程序:
width = float(input("Enter the width: "))
height = float(input("Enter the height: "))
area = width * height
print("The area is", area, "square units.")
Run Code Online (Sandbox Code Playgroud) 我使用valgrindwith 检查了C++中的以下代码--leak-check=full,它说没有内存泄漏.这是为什么?
char *p = new char[256];
delete p;
Run Code Online (Sandbox Code Playgroud)
new[]delete[]据我所知应该匹配.
我是一个新手Python用户试图做一些我认为应该简单但无法解决的问题.我定义了2个变量:
a = 'lemon'
b = 'lime'
Run Code Online (Sandbox Code Playgroud)
有人能告诉我如何在新变量中组合这些吗?
如果我尝试:
>>> soda = "a" + "b"
>>> soda
'ab'
Run Code Online (Sandbox Code Playgroud)
我想要苏打水'lemonlime'.这是怎么做到的?
谢谢!
我在Python中搜索一个很好的模糊库,但是我找到的那些并没有被维护,似乎没有添加我创建模糊系统所需的一切.
这些是我到目前为止发现的:PyFuzzy,Peach和Fuzzpy.
你知道有什么好的图书馆吗?如果没有,C#,Java或C++中是否有任何库?
python ×9
boolean ×1
c++ ×1
fuzzy-logic ×1
loops ×1
memory-leaks ×1
python-3.x ×1
user-input ×1
valgrind ×1
validation ×1