在开始之前,我们复习一下C语言中的数据类型:
来源:https://static.zhihu.com/heifetz/7191.216a26f4.89b44032a371ad982cda.css
而Python 中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。
来源:http://www.runoob.com/python3/python3-data-type.html
Python3 中常见的数据类型有:
- Number(数字)
- String(字符串)
- bool(布尔类型)
- List(列表)
- Tuple(元组)
- Set(集合)
- Dictionary(字典)
Python3 的六个标准数据类型中:
- 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
- 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
一、输出hello,world!
要求:
将字符串 'Hello World!' 存储到变量str中,再使用print语句将其打印出来。
输入: 无
输出: 一行输出字符串Hello World!
本来没啥好写的,输入
print("hello,world!")
就可以了,但是给出的初始代码很容易混淆 ,让人误以为下列代码都要用到
import sys
for line in sys.stdin:
a = line.split()
print(int(a[0]) + int(a[1]))
PS:这段代码是一个简单的 Python 脚本,它从标准输入(stdin)中读取输入的每一行,然后将每一行按照空格分割成多个字符串,并计算分割后的第一个和第二个字符串所代表的整数的和。
删掉之后,自己写了一下
str a = 'Hello World!'
print(a)
还是出错,发现疏忽了, 题目要求变量str,即,变量名为str,而非变量类型。正确结果为:
str = 'Hello World!'
print(str)
虽然是最简单的输出,但还是提醒我们要细心看题。
二、多行输出
要求:
将字符串 'Hello World!' 存储到变量str1中,再将字符串 'Hello Nowcoder!' 存储到变量str2中,再使用print语句将其打印出来(一行一个变量)。
输入:无
输出:第一行输出字符串Hello World!,第二行输出字符串Hello Nowcoder!
这里注意,与C语言不同
#include <stdio.h>
int main() {
printf("Hello, World!\n");
printf("hello, Hello Nowcoder!");
return 0;
}
输出时,C语言如果不特意加上 "\n",即使把两个字符串分行写,输出的结果也是同一行。
因此,也可以这样写:
printf("Hello, World!\nhello, Hello Nowcoder!");
相比而言,Python更方便一点
str1='Hello World!'
str2='Hello Nowcoder!'
print(str1)
print(str2)
三、读入字符串
要求使用input函数读入一个字符串,然后将其输出。
使用Python实现比较简单,输入函数input默认变量类型为字符串,因此两行代码就能解决
str=input()
print(str)
如果要求输入变量为int类型,那么需要强制转换变量类型
str=int(input())
print(str)
但是延伸一下,由于Python和C较为相似,我们可以比较学习。
对于本题目,如何通过C实现
#include <stdio.h>
int main() {
char a[100];
scanf("%s",a);
printf(a);
return 0;
}
字符型:str(Python)char(C)
PS:存储类型为 %d %s %e %f %lf %lld之类的格式串,需要提供变量的地址作为参数。这时应该使用取址符 &
。但存储数组时,数组名 a
本身就是数组首元素的地址,而 %s
格式说明符会自动将输入的字符串存储到数组中,所以直接使用 a
就可以了。
在 C 语言中,字符数组的长度不能直接为空。需要指定一个长度(如a[100])来定义字符数组。或者动态分配内存,如下:
char *a; // 声明一个指针,用于存储动态分配的内存地址
a = (char *)malloc(100 * sizeof(char)); // 动态分配 100 个字符的内存空间
if (a == NULL) {
printf("内存分配失败\n");
return 1;
}
free(a); // 不用时释放动态分配的内存
或者:
char *a = "Hello, World!"; #使用字符指针
char a[] = "Hello, World!"; #使用字符数组的初始化方式
char a[100] = {'\0'};
strcpy(a, "Hello, World!"); #使用字符数组并初始化为 '\0'
总的来说,用字符数组的初始化方式最好。
关于指针和取址符
当我们使用字符指针时,该如何输出字符串呢?
在 C 语言中,字符串常量在内存中是以字符数组的形式存储的,并以空字符 '\0'
结尾。字符指针指向字符串的第一个字符的地址,因此 *a
所指向的就是字符串的第一个字符。
对于字符串常量 "Hello, World!",字符指针 a
所指向的是字符串的第一个字符 'H'
。因此,a[0]
的值就是 'H'
。
对于取址和指针的问题,可以用例子来展示:
我们让指针p指向数组a,数组类型为char,那么指针p存储的就是数组a的地址,同时也是数组首元素的地址。
四、读入整数并输出变量类型
要求:使用input函数读入数字并输出数字与变量类型。
输入:输入只有整数。
输出:将输入的数字输出,同时换行输出变量类型。
a=int(input())
print(a)
print(type(a))
在Python中,往往变量赋值以后该变量才会被创建。但在C语言中,你可以手动指定变量的类型,因为在编写代码时你已经知道变量的类型,因此没有此类算法。但typeof()函数似乎可以完成C语言高级用法---typeof()关键字_c语言中typeof-CSDN博客
但好像没必要。
五、格式化输出
要求:假设输入的name为Niuniu,则输出I am Niuniu and I am studying Python in Nowcoder!
str=input()
print("I am %s and I am studying Python in Nowcoder!"%str)
或者
str=input()
print("I am {} and I am studying Python in Nowcoder!".format(str))
在这两种方法中,%s
或 {}
是格式化字符串的占位符,它将会被变量 str
的值替换。
C语言表述也是类似的
#include <stdio.h>
int main() {
char a[100];
scanf("%s",a);
printf("I am %s and I am studying Python in Nowcoder!",a);
return 0;
}
六、按规定小数位数输出
要求把所有读入的数据都保留两位小数输出
number = float(input())
print("{:.2f}".format(number))
由于对Python的函数不了解,开始想使用
a = float(input())
b=int(100 *a)
print(b/100)
这种方式只是简单的先乘1000,再除100,对于普通的数字如1.2345有效,但无法解决题干要求的,输入1.0000,输出1.00,因为在没有强制要求两位小数的情况下,输出为1.0
在Python中,round()
函数会按照四舍五入的规则对数字进行舍入,但它不会自动添加尾部的零来保留指定的小数位数。所以下面代码也无法完成
print(round(1.0000,2))
round(1.0000, 2)
实际上已经四舍五入到了两位小数的精度,即 1.0
。如果想要输出为 1.00
,可以使用字符串格式化来控制输出的格式,例如:
print("{:.2f}".format(1.0000))
此外还有别的方法:Python中保留两位小数的几种方法_python保留两位小数-CSDN博客
到这里,已经完成了牛客网中Python入门的第一章输入输出。