小编Gri*_*han的帖子

为什么语句(foo .__ init__是foo .__ init__)返回false

码:

class Foo(object):
    pass

foo = Foo()
foo.__init__ == foo.__init__ #return true
foo.__init__ is foo.__init__ #return false
Run Code Online (Sandbox Code Playgroud)

我能理解foo.__init__ == foo.__init__回报True.为何foo.__init__ is foo.__init__回归False

python

6
推荐指数
0
解决办法
88
查看次数

为给定的正则表达式绘制minmal DFA

绘制minimal的直接简单方法是什么DFA,它接受与给定语言相同的语言Regular Expression(RE).
我知道可以通过以下方式完成:

Regex ---to----? NFA ---to-----? DFA ---to-----? minimized DFA
Run Code Online (Sandbox Code Playgroud)

但是有没有捷径?像(a+b)*ab

dfa nfa regular-language

5
推荐指数
1
解决办法
1万
查看次数

C中没有定义的宏

没有定义的宏功能有什么用途/适用性:

#ifndef __SYSCALL
#define __SYSCALL(a, b)
#endif
Run Code Online (Sandbox Code Playgroud)

可以在头文件中找到Linux系统中的这个宏 /usr/include/asm/msr.h

我也注意到以下类型的宏.

#define _M(x) x
Run Code Online (Sandbox Code Playgroud)

并且只有定义这种宏的理由才能使代码统一.比如#define SOMETHING(1 << 0).是否还有其他隐藏(更好)的使用这种宏?

一个例子的答案将非常有帮助.也有人可以给我一个文本/链接来阅读这个.

macros c-preprocessor

5
推荐指数
1
解决办法
1567
查看次数

char变量如何接受Pointer(NULL)作为其值?

我明白char变量可以接受一个null字符(1个字节)即; \0作为它的值但是,我不明白我的应用程序中的char变量如何接受指针(4个字节)作为其值并仍然正常工作?

#include<stdio.h>
int main()
{
    char p[10]="Its C";
    printf("%s\n",p);
    p[3]='\0';                // assigning null character 
    printf("%s\n",p);
    p[2]=NULL;               //  assigning null pointer to a char variable
    printf("%s\n",p); 
    p[1]=(void *)0;          //  assigning null pointer to a char variable
    printf("%s\n",p);
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

注意: GCC编译器(32位Linux平台).

c pointers void-pointers

5
推荐指数
1
解决办法
3883
查看次数

Scanf不会第二次执行

我正在尝试: - 如果用户输入无效值,则重新读取该值.但问题只scanf()执行一次,不会执行任何其他时间,程序会陷入无限循环.

#include<stdio.h>
#include<math.h>
main()
{
    unsigned int a;
    unsigned int b = pow(2,M-1);
    unsigned int c;
    int x;

    printf("b = %i",b);

    input:
    fflush(stdin);
    fflush(stdout);
    printf("\nEnter any integer: ");
    x = scanf("%u",&a);

    printf("%u",a);
    if(x==0) 
        goto input;

    printf("\na = %i",a);

    c = a & b;

    printf("\nc = %i",c);

    if(c)
        printf("\nthe bit %i is set",M);
    else
        printf("\nthe bit %i is not set",M);
}
Run Code Online (Sandbox Code Playgroud)

我之前尝试使用添加空间,但%u也试过fflush(stdin)但没有任何效果.

编辑:我知道不建议使用goto,但我必须这样做.(使用循环不是一个选项).M是我在编译时使用gcc命令行定义的宏.

c goto scanf

5
推荐指数
1
解决办法
1714
查看次数

python:检索字典或集合中的天花板键和楼层键

我有一串带整数键的字典.对于我没有的密钥,我希望能够在它想要检索的密钥之前和之后检索最小和最大的密钥,但这不存在.
java中的Treemap类有两个方法正是这样做的:ceilingkey()floorkey().

我怎么能用python做到这一点?

作为一个例子,我有一个这样的字典:

 { 1: "1", 4: "4", 6: "6" ..., 100: "100" } 
Run Code Online (Sandbox Code Playgroud)

如果我要求钥匙1,我会检索"1",但如果我找钥匙3,我应该得到KeyError,因此能够得到floor(3) = 1ceil(3) = 4.

python tree dictionary map

5
推荐指数
2
解决办法
1456
查看次数

将元组的格式和打印列表作为一行

我有一个包含从数据库查询生成的元组的列表,它看起来像这样.

[(item1, value1), (item2, value2), (item3, value3),...]
Run Code Online (Sandbox Code Playgroud)

元组将是混合长度,当我打印输出时它将看起来像这样.

item1=value1, item2=value2, item3=value3,...
Run Code Online (Sandbox Code Playgroud)

我已经找了一段时间试图找到一个解决方案,但.join()我找不到适用于这种情况的解决方案.

python tuples list

5
推荐指数
1
解决办法
7076
查看次数

Python元组列表将第二个元素与唯一的第一个元素合并

给出一个像这样的元组列表:

a = [ ( "x", 1, ), ( "x", 2, ), ( "y", 1, ), ( "y", 3, ), ( "y", 4, ) ]
Run Code Online (Sandbox Code Playgroud)

过滤唯一第一个元素并合并第二个元素的最简单方法是什么.像这样的输出是期望的.

b = [ ( "x", 1, 2 ), ( "y", 1, 3, 4 ) ]
Run Code Online (Sandbox Code Playgroud)

谢谢,

python merge tuples list unique

5
推荐指数
2
解决办法
3320
查看次数

在c中排序和删除int数组中的重复项

我正在学习C并且讨论了排序问题.我写了一个comp()函数并用于qsort对数组进行排序int.现在,对于下一个任务,我需要从数组中删除重复项.
是否可以同时排序和删除重复项?

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>    
int indexes[10] = { 0, 98, 45, 65, 45, 98, 78, 56, 65, 45 };

int comp(const void * elem1, const void * elem2) {

    int f = *((int*) elem1);
    int s = *((int*) elem2);

    if (f > s) {    
        return 1;
    }    
    if (f < s) {    
        return -1;
    }    
    return 0;
}

void printIndexArray() {    
    int i = 0;    
    for (i = …
Run Code Online (Sandbox Code Playgroud)

c arrays sorting

5
推荐指数
1
解决办法
4555
查看次数

为什么这个演员的结果不是左值?

我需要一些关于这种奇怪行为的建议 - 让我们有这个代码:

int ** p;
Run Code Online (Sandbox Code Playgroud)

编译没有任何麻烦:

p++;
Run Code Online (Sandbox Code Playgroud)

但是这个:

((int**)p)++;
Run Code Online (Sandbox Code Playgroud)

给我这个错误信息:“error: lvalue required as increment operand”.

我正在转向p它已经存在的类型,没有任何改变,那么问题是什么?这是我遇到的问题的简化版本,当我试图编译一个旧版本的时候gdb.所以我想,这样做有所改变.知道第二个例子有什么问题吗?

c casting rvalue lvalue

5
推荐指数
4
解决办法
1075
查看次数